分布式訓練本質上是為了加快模型的訓練速度,面對較為復雜的深度學習模型以及大量的資料,單機單GPU很難在有限的時間內達成模型的收斂,這時候就需要用到分布式訓練,
分布式訓練又分為模型并行和資料并行兩大類,
1. 資料并行
資料并行在于將不同batch的資料分別交給不同的GPU來運算,如下圖所示,灰色部分表示資料,藍色表示模型,

資料并行中的一類就是引數平均,比如將第一個Batch的256個資料交給第一個U
第二個batch的256個資料交給第二個U
引數平均就是在他們分別通過整個神經網路計算出結果后取平均值,再修改模型中的引數,這樣實作實際上在不考慮多GPU與CPU的通信成本上,與單GPU以batchsize為512來進行訓練是一樣的,但因為同時進行了兩個batch的運算,運算速度在理想情況下是線性增加的,引數平均同時也是一個同步更新的程序,多個GPU的運算結果會統一結束并計算平均引數,這在我們使用同算力GPU的時候可以做到效率最大化,
除了同步更新,我們還有異步隨機梯度下降,這意味著不同的GPU不需要等待每一個epoch中所有GPU的運算完畢就可以直接更新引數,這很顯然進一步提升了多個U的效率,因為我們不再需要保證多個GPU的同步性,更大加快了模型的收斂,但不可避免地是,由于異步的特點,當某一個GPU完成運算并更新引數的時候,可能這時候模型中的全域引數已經經過了多次的改變,這可能會導致絕對誤差的放大,優化程序可能不穩定,
2. 模型并行
說完了資料并行,我們來看一下專門用于優化非常復雜的深度學習網路的模型并行,與資料并行不同的是,這次我們通過將模型拆分為幾個小的部分,分別交給多個GPU來進行運算,每次仍然給每個模型一個batch的資料來進行計算,將多個GPU作為節點,最后將運算結果進行合并,實際上是一種將模型切割為幾個子模型按順序計算的程序,

參考文本 :
【深度學習】— 分布式訓練常用技術簡介
【分布式深度學習part1】:神經網路的分布式訓練
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336157.html
標籤:AI
上一篇:深度學習-神經網路卷積核理解
