LightGBM的並行優化
上一篇文章介紹了LightGBM算法的特點,總結起來LightGBM采用Histogram算法進行特征選擇以及采用Leaf-wise的決策樹生長策略,使其在一批以樹模型為基模型的boosting算法中脫穎而出。在時間和空間上都更勝一籌,准確率也比其他模型表現得更好。這些模型在處理一般規模的數據時,單機即可以解決,然而當數據規模更大時,即需要進行分布式計算,分擔每台機器(worker)的壓力。這篇文章介紹LightGBM的兩種並行學習算法(Feature Parallel & Data Parallel),以及他們較傳統並行算法的特別之處。
Feature Parallel
特征並行算法目的是在決策樹生成過程中的每次迭代,高效地找到最優特征分裂點。特征並行的主要思想是在不同機器在不同的特征集合上分別尋找最優的分割點,然后在機器間同步最優的分割點。
-
傳統的特征並行算法
- 根據不同的特征子集,將數據集進行垂直切分。(不同機器worker有不同的特征子集)
- 每個worker尋找局部的最優分裂特征以及分裂點。
- 不同worker之間進行網絡傳輸,交換最優分裂信息,最終得到最優的分裂信息。
- 具有最優分裂特征的worker,局部進行分裂,並將分裂結果廣播到其他worker。
- 其他worker根據接收到的數據進行切分數據。
該方法不能有效地加速特征選擇的效率,當數據量#data很大時,該並行方法不能加快效率。並且,最優的分裂結果需要在worker之間進行傳輸,需要消耗很多的傳輸資源以及傳輸時間。
-
LightGBM的特征並行算法
LightGBM並沒有垂直的切分數據集,而是每個worker都有全量的訓練數據,因此最優的特征分裂結果不需要傳輸到其他worker中,只需要將最優特征以及分裂點告訴其他worker,worker隨后本地自己進行處理。處理過程如下:- 每個worker在基於局部的特征集合找到最優分裂特征。
- workder間傳輸最優分裂信息,並得到全局最優分裂信息。
- 每個worker基於全局最優分裂信息,在本地進行數據分裂,生成決策樹。
然而,當數據量很大時,特征並行算法還是受限於特征分裂效率。因此,當數據量大時,推薦使用數據並行算法。
- Data Parallel
-
傳統的數據並行算法
- 水平切分數據集。
- 每個worker基於數據集構建局部特征直方圖(Histogram)。
- 歸並所有局部的特征直方圖,得到全局直方圖。
- 找到最優分裂信息,進行數據分裂。
缺點:網絡傳輸代價比較大,如果使用point-to-point的傳輸算法,每個worker的傳輸代價為O(#machine * #feature * #bin). 如果使用All Reduce並行算子,傳輸代價為O(2* #feature * #bin).
- LightGBM的數據並行算法
- LightGBM算法使用Reduce Scatter並行算子歸並來自不同worker的不同特征子集的直方圖,然后在局部歸並的直方圖中找到最優局部分裂信息,最終同步找到最優的分裂信息。
- 除此之外,LightGBM使用直方圖減法加快訓練速度。我們只需要對其中一個子節點進行數據傳輸,另一個子節點可以通過histogram subtraction得到。
- LightGBM可以將傳輸代價降低為O(0.5 * #feature * #bin)。
