1. 程式人生 > >Spark大規模機器學習的效能瓶頸和解決方案

Spark大規模機器學習的效能瓶頸和解決方案

  • 瓶頸:

在模型的引數維度非常大時,spark的記憶體和網路會成為比較大的瓶頸。
在每輪訓練之前,spark driver都會把模型引數廣播到executor端, 每個task分割槽訓練完本地分割槽資料後,會把算出的梯度或weights增量聚集到driver端對模型引數(weights)進行更新。當模型引數維度比較高時,網路廣播和聚集都需要比較長的時間,也需要耗費比較多的記憶體,同時更新計算時間也會比較長。

  • 解決方案:

採用引數伺服器。引數伺服器將模型引數(一維或多維陣列)劃成多個分割槽分佈地儲存在多個節點上, 支援並行地對模型引數進行獲取、更新等操作,它具有高效能、可擴充套件、容錯等特點。
在機器學習和深度學習中,通過使用引數伺服器,每個task分割槽可以只獲得自己需要的那部分引數,這樣只需要更少的記憶體和網路傳輸。 同時引數的更新也可以並行地在所有引數伺服器節點上進行,從而提高了效能。