《使用 GPU 加速 XGBOOST 在 SPARK 集群上的分布式訓練.pdf》由會員分享,可在線閱讀,更多相關《使用 GPU 加速 XGBOOST 在 SPARK 集群上的分布式訓練.pdf(40頁珍藏版)》請在三個皮匠報告上搜索。
1、NVIDIA使用GPU加速XGBOOST在SPARK集群上的分布式訓練Jiaming Yuan BobbyWang 會#page#AGENDAJiaming Yuan介紹XGBoost高性能算法的實現BobbyWang介紹在Spark3.0+集群上利用GPU對XGBoost進行加速人#page#BACKGROUND人#page#XGBOOST梯度提升樹模型訓練支持regression,classification,ranking,survival以及用戶自定義模型大量實際應用w#page#XGBOOST梯度提升隨機森林Ranking樹Regressiontree1tree2Classifica
2、tion20Survival60+091室)=2+0.9=2.9)=-1-0.9=-1.9Comingw#page#為什么需要高性能GPU運算Bias-variance tradeoff使用更多的樹和較小的learningrate有助于降低bias和variance使用隨機森林可以通過樹的深度和數量降低bias和variance,但隨機森林可能需要訓練更深的樹增大數據量有助于降低bias和variance。Thebackboneofmachinelearning無論通過哪一種方案來降低bias和variance,強大的計算能力都是必須的。而NVIDIAGPU則為XGBoost提供了所需要的計算
3、能力。Source:https./ SHAPw#page#XGBOOST技術棧SparkScalaCuDFXGBoostThrustCubCUDA LibrariesNCCLCUDAw#page#TRAINING#page#向上拓展梯度提升不是一個stochastic算法,在確保準確度的前提下難以直接通過batches進行訓練完整的數據集難以加載進入內存aws#page#方案外存訓練基于梯度采樣分布式訓練通過高效采樣,在通過增加計算節點太慢!每一個樹節保證準確度的前提提升訓練性能以及數點都要遍歷所有的據加載量下提升數據加載量數據塊向上拓展結合外存訓練#page#分布式訓練GBT模型訓練基于類M
4、PI框架(allreduce),需要較高的節點間通信性能。分布式框架(Spark,Dask)通常對數據進行分塊處理。而GBT并非stochastic算法,訓練前需要先把數據塊進行合并,增加內存占用量ETL占用了pipeline的大部分時間。Sn4#page#通信高效的通信TCP套接字很慢!XGBOOST通過NCCL實現GPU間進程通信。(directP2P)根據節點/集群上的可用硬件,將為XGBoost提供最佳的通信性能數據訓練Partition 0DMatrix0Partition 1梯度直方圖Patition2訓練DMatrix 1Partition 3#page#內存占用需要在訓練開始前
5、把Spark的數據塊進行合并。GPUHistogram算法XGBoost is memory hungryChunk 1Chunk Onom nomnom一數據復制ConcatenatedCSR matrix數據復制Compressed histogram index#page#優化我們對每一個數據塊進行sketch,通過sketchmerge對summary進行合并,從而避開了數據的復制After320 batchesChunkoChunk 1100000 rows per batch32 millions rows in totalSketchSketchSummarySummary單節點
6、內存占用45421MBDMatrix:Summary18617MBQuantileDMatrixCompressed histogram indexaius#page#新增inplaceprediction實現。5038450040883500088825000208nnomnom1500區1000058004542118817awug#page#GPU TREE SHAP#page#GPU TREE SHAPMachine learning model explanation using SHAP.XGBoost原生支持SHAPvalue計算,雖然treeshap中featurecontri
7、bution是polynomialtimecomplexity算法,但實際的運算速度依然較慢通過GPU加速可以獲得1020倍提升。Featureinteraction由于計算的復雜性在實際中難以使用。通過降低算法復雜度以及結合GPU的運算性能,我們把數小時的運算縮短到幾分鐘。https:/ contribution computation time0Feature Contribution模型越大,提升越多03Single V100 vs.2X 20-Core Intel Xeon E5-2698 CPUs(40physical cores total).datasettreesrows800
8、010000covtype100001000cal housingadult1000010001000010000fashion mnist08t856PUGPL#page#性能提升Feature Interaction Computatior2500Feature Interaction2000模型越大,提升越多1500Single V100 vs.2X 20-Core Intel Xeon E5-2698 CPUs (401000physical cores total).降低算法復雜度+GPU運算性能580DalaseGPUdatasetOriginalrowstreesIn log s
9、cale!CPUS2055.7828.852008000covtype93.678.55皖32001000cal housing51263.53200100021603.53adult1.50.567.292.76fashion mnist20010000nw4#page#page#XGBOOST4J-SPARK#page#TLXGBoost只能用于訓練數值型的數據實際環境中大部分數據并非數值型:需要將非數值型數據通過ETL(Extract,Transform,Load)轉換為數值型#page#XGBOOST4J-SPARKXGBoost社區通過XGBoost4j-Spark項目將XGBoos
10、t與SparkMLLIB進行無縫集成一方面可以利用XGBoost的高性能算法實現一方面可以利用Spark強大的數據處理引擎#page#XGBOOST+SPARK+RAPIDSGPU-加速ETL(提取,轉換,加載)與模型訓練相比,數據科學家平均花費90%以上時間在ETL中forgot to add a featureget a coffeeeh,forgot12test modelstartETLstart Enl0twith1話getacoffeegetacoffeCPUGPUoonfigureETLworkflowPOWEREDPOWEREDWORKFLOWWORKFLOWdatasetco
11、llectionatastoredasstring.analysisdatnse113overnigttraininference#page#XGBOOST+SPARK2.X+RAPIDS#page#XGBOOST+SPARK2.X+RAPIDS,將Parguet/orc/Csv格式的文件直接讀進GPU內存中.Chunks loading,增量的將基于列的cuDF數據轉換為基于行的稀疏DMatrix#page#XGBOOST+SPARK2.X+RAPIDSCPUGPUval df=spark.read.parquet(path)val gpuDf s new GpuDataReader(spa
12、rk)parquet(path)val featureNames=Seq(f1”,“f2”,“f3)valfeatureNames=Seq(f1”,f2”,f3”)val vectorAssembler =new VectorAssemblerO.setlnputCols(featureNames.toArray).setOutputColrfeatures)val xgblnput=vectorAssembler.transform(df).select(features,labelColName)val xgbClassifier= new XGBoostClassifier(params
13、)val xgbClassifier=new XGBoostClassifier(params).setLabelCollabelColName)setLabelCollabelColName).setTreeMethod(hist”).SetTreeMethod(gpu_hist”).SetFeaturesCol(features”)SetFeaturesCols(featureNames)val model =xgbClassifier.fit(xgblnput)val model=xgbClassifier.fit(gpuDf)#page#XGBOOST+SPARK2.X+RAPIDS訓
14、練17年總共190GMortgage分類模型的基準測試RAPIDSSparkXGBoostTraining Timemins)-AWS EMRRAPIDSSparkXGBoostTrainingCosts-AWSEMR7.6HrS34.37華城300-34X Speedup-6X Cost SavingS5.4613mins4Nodes(4x16cores)1Node1x8-v100)4Nodes(4x16c0res)1Node1x8-V100)AwS(sa.4xlarge)AWS(p3.16xlarge)ANS(p3.16xlarge)ANS(r5a.4xlarge)SparkXGBostC
15、PURAPIDSSparkXGBoostGPUSparkXGBostCPURAPIDSSparkxGBoostGPU#page#XGBOOST+SPARK3.X+RAPIDS#page#XGBOOST+SPARK3.X+RAPIDSRapids-plugin-4-sparkZyedsndXOnSp.de要#page#RAPIDS ACCELERATOR FOR APACHE SPARK (PLUGIN)Rapids-plugin-4-spark與Spark3.0無縫集成DISTRIBUTEDSCALE-OUTAPPLCATIONS,用戶不需要做任何的代碼修改SPARCOMPONENTSM/DL
16、FRAMEWORKS:某些未啟動GPU的Spark功能將運行在CPU上SparSol肌品GRAPHXwPyTorthGB8DFnRDOAPACHESPARK3.0CORERapids-plugin-4-spark可用于加速RAPIDSAcceleratorforSpark:Spark DataFrames:Spark SQLRAPIDSCUDFCUMLuGraph:ML/DL training frameworksCUDA-XAEaxMAGNUMIOIfrastructurewitNIDIAGPUS=GPuAcelera#page#RAPIDS ACCELERATOR FOR APACHE S
17、PARK (PLUGIN)DISTRIBUTED SCALE-OUT SPARK APPLICATIONSAPACHE SPARK CORESpark SQL APIDataFrame APISpark Shuffleifgpu_enabledloperation,data_type)自定義的Shuffle實現調用RAPIDS使用RDMA和GPU-to-GPU直連來優RAPIDS Acceleratorelse化for Spark執行標準Spark操作JN bindingsJNI bindingsMapping From Java/Scala to C+Mapping From Java/Sc
18、ala to C+RAPIDS C+ LibrariesUCX LibrariesCUDA#page#XGBOOST+SPARK3.X+RAPIDSGPU調度GPU對數據加載加速Chunks loadingGPU對算子(join,filter,groupby,sort)進行加速RMM#page#XGBOOST+SPARK3.X+RAPIDSCPUGPUval df=spark.read.parquet(path)val df= spark.read.parquet(path)val featureNames=Seq(f1”,“f2”,“f3)valfeatureNames=Seq(f1”,f2
19、”,f3”)val vectorAssembler = new VectorAssemblerO.setlnputCols(featureNames.toArray).SetOutputColrfeatures)val xgblnput =vectorAssembler.transform(df).select(features,labelColName)val xgbClassifier=new XGBoostClassifier(params)val xgbClassifier= new XGBoostClassifier(params).SetLabelCol(labelColName)
20、.setLabelCol(labelColName).setTreeMethod(gpu_hist”).setTreeMethodhist”)setFeaturesCols(featureNames).setFeaturesCol(features)val model=xgbClassifier.fit(df)val model=xgbClassifier.fitt(xgblnput)#page#XGBOOST+SPARK3.X+RAPIDS用23天的Criteo數據(1TB)訓練分類模型RAPIDSSPaK3XGBoostTraining CostsAWS EMRRAPIDS Spark3X
21、GBoost Training Timelmins)AWS EMR542.9333mins54.00-6.42XCostSaving-5.5XSpeed-up6mins56.695聯16Nodes(8x64cores)16Node(11x4-T4)8Nodes(8x64cores)11Node(11x4-T4)AS(r5d.16xlarge)AWS(g4dn.12xlarge)AwS(r5d.16xlarge)ANS(g4dn.12xlarge)RAPIDSSpark3.0XGBoostGPUSpark3.0XGBoostCPUSpark3.0XGBoostCPURAPIDSSpark3.0XGBoostGPU#page#XGBOOST+SPARK+RAPIDS鏈接XGBoost4j-SparkGPU加速項目https:/ Cudf項目https:/