ChatGPT的推出,人工智能正式進入大模型時代。要訓練一個chatgpt這樣的大模型,需要分佈式AI集羣的支持。
Open AI的GPT-3模型,使用512張V100,需要訓練7個月。現在的大模型訓練,離不開分佈式訓練,通過分佈式訓練來加速訓練過程,減少耗時。
分佈式並行架構
加速比
單機訓練時:
訓練耗時 = 訓練數據規模 * 單步計算量 / 單設備計算速率
多機訓練時,理想情況是:
訓練耗時 = 訓練數據規模 * 單步計算量 / ( 單設備計算速率 *設備數)
但是,由於並行等帶來的損失,實際達不到理想情況,實際的效率處於立項效率,就是加速比。 假設單設備吞吐量爲T,n個設備系統的吞吐量應爲nT,系統實際達到吞吐量爲Tn,則加速比爲:
實際過程中,這個加速比通常在0.4左右。
參數服務器
分佈式訓練時,需要更新模型參數,通常是用參數服務器來承擔,工作包含:
- 計算損失和梯度
- 梯度聚合
- 參數更新並參數重新廣播
有下面幾種模式,當前大模型參數量過大,單個GPU不能承載,通常採用參數服務器分佈在所有GPU上。
並行計算方法
分佈式深度學習計算時,每迭代一個batch,需要同步參數,這裏就涉及到如何並行。
同步並行
該並行方法,數據必須等全部工作節點完成了本次通信之後才能繼續下一輪本地計算,優點是本地計算和通信同步嚴格順序化,能夠容易地保證並行的執行邏輯於串行相同。但是如果計算能力不一致,會導致最早計算完成的等待其它工作節點處理,造成了計算硬件的浪費。
半同步並行
通過動態限制進度推進範圍,有限定的寬鬆同步障的通信協調並行。
跟蹤各節點進度並維護最慢節點,保證計算最快和最慢節點差距在一個預定的範圍內。
環同步
參數間如何同步,通過NVLink連接的GPU,主要通過環同步來實現。下面介紹,Ring All Reduce 算法。
首先,GPU通過NVLink互聯,每個GPU一路發送,一路接收,構成一個環。
第一步,Scatter-reduce
開始的時候,每個GPU有各自的參數,現在需要通過環同步,實現參數同步。
通過環,我們可以把gpu0 的數據給GPU1,這樣GPU1 就有a1+a0,同樣的GPU1給GPU2,依次類推。
這樣,遍歷完一個環之後,每塊GPU都有一個完整的參數,比如GPU4上,有a的全部部分。
第二步,All Gather,再執行一次環同步操作,這樣執行完成後,所有GPU都有了全部數據。
通過該算法,對於3億(0.3B)參數的語言模型每秒處理的樣本數量與同時進行同步訓練的 GPU 數量呈線性關係
總結
- 大規模分佈式訓練中主要使用參數服務器架構模式(PS),參數服務器分佈在多個 GPU
- PS架構下通過集合通信來實現環同步,從而同步分佈在多個 GPU 中的參數, Ring All Reduce 是環同步的經典同步方式