平行計算與機器學習

2021-10-09 14:57:40 字數 1754 閱讀 9918

資料集的規模和模型的維度都是巨量的,epochs很大(將本地資料全部掃一遍是乙個epoch),完成一次訓練需要跑很多輪模型,且每調一次超引數就要重新訓練一次。所以需要借助平行計算來提高計算效率;其次,如果不懂平行計算的話,當程式執行的時候,根本不知道**出錯。

主要通過提高計算梯度的效率,使模型盡快收斂,具體通過多個gpu(分攤計算樣本的任務量)平行計算來加快計算梯度的速度;

並行梯度下降,要對資料作劃分,還要把引數w和梯度g傳來傳去。

(1) 通過共享記憶體(sharing memory)進行通訊,沒有辦法做到大規模的並行;

(2) 通過訊息傳遞(message passing)進行通訊,適合很多個節點的通訊,每個節點都有幾個處理器,節點內的處理器可以共享記憶體,但不同節點間無法共享記憶體,節點之間要進行訊息傳遞,可以把向量打包通過網線或tcp/ip協議傳送。

(1) client server架構,把乙個節點作為server來協調其他的節點,把其他的節點全都作為work用來計算;

(2) peer to peer架構(點對點),所有的節點都拿來做計算,每乙個節點都有幾個鄰居,鄰居之間可以通訊。

使用mapreduce(hadoop,spark),是client server架構。

(1) broadcast:server把最新模型引數w廣播到所有worker(m個);

(2) map:設定函式,每個worker都通過本地資料和模型引數wt並行進行,各自計算一部分梯度得到m個向量;

(3) reduce:將每個worker的向量傳回server,server將m個向量根據設定的函式合成乙個梯度向量g;

(4) 有了梯度g,server可以做一次梯度下降得到新的模型引數wt+1 ;

(5) 系統不斷重複上述mapreduce過程直到演算法收斂,理想狀態下執行時間減少到1/m,但是平行計算有通訊和同步的額外代價。

(1) 通訊代價(通訊時間=通訊複雜度/網路頻寬+網路延遲

通訊複雜度:與模型引數,節點個數正相關(儘量減少通訊內容的大小);

網路延遲:與系統和網路有關,與傳多少資訊無關(儘量減少通訊的次數)。

(2) 同步的代價

所有worker算完了才能進行reduce。平行計算同步的時間由跑的最慢的那個worker決定,如果乙個節點掛掉了重啟就會比其他節點慢很多,這個掛掉的叫struggler(節點越多,同步代價越大)。

嗶哩嗶哩:

python平行計算 python平行計算

0.基礎並行 發 multiprocessing threading 1.concurrent 2.併發 asynico 3.ipython下的平行計算 使用ipyparallel庫的ipython提供了前所未有的能力,將科學python的探索能力與幾乎即時訪問多個計算核心相結合。系統可以直觀地與本...

R與平行計算

本文在creative commons許可證下發布 什麼是平行計算?平行計算,準確地說應該包括高效能計算機和並行軟體兩個方面。不過,近年來隨著個人pc機,廉價機群,以及各種加速卡 nvidia gpu,intel xeon phi,fpga 的快速發展,現在個人電腦已經完全可以和過去的高效能計算機相...

分布式機器學習(上) 平行計算與機器學習

這一節講解 平行計算與機器學習 上 這節課的主要內容 我們先以最小二乘法為例開始講解 ww 使得 l w l w l w 最小。那麼我們就是要求這麼乙個梯度 然後我們講一下如何用mapreduce做並行梯度下降。這個是mapreduce的簡單介紹。mm 個節點的話,我們可以吧資料均勻分給他們,那麼差...