tensorflow 多GPU操作有兩種方法: 一種是常用的數(shù)據(jù)并行,,另一種是模型并行。 一 模型并行 指的是將一個完整的網(wǎng)絡(luò)切分成不同塊放在不同gpu上執(zhí)行,,每個gpu可能只處理某一張圖的四分之一,。采用模型并行很大程度上是因為顯存不夠放不下整個網(wǎng)絡(luò)的數(shù)據(jù)。 二 數(shù)據(jù)并行 數(shù)據(jù)并行的原理很簡單,,如下圖,,其中CPU主要負責(zé)梯度平均和參數(shù)更新,而GPU1和GPU2主要負責(zé)訓(xùn)練模型副本(model replica),,這里稱作“模型副本”是因為它們都是基于訓(xùn)練樣例的子集訓(xùn)練得到的,,模型之間具有一定的獨立性。具體的訓(xùn)練步驟如下,,
值得說明的是,,在第(1)步中定義模型參數(shù)時,要考慮到不同model replica之間要能夠share Variables,,因此要采用tf.get_variable()函數(shù)而不是直接tf.Variables()(關(guān)于tf.get_variable()和tf.Variable的區(qū)別,,請讀者參見其幫助手冊)。另外,,因為tensorflow和theano類似,,都是先定義好tensor Graph,,再基于已經(jīng)定義好的Graph進行模型迭代式訓(xùn)練的。因此在每次迭代過程中,,只會對當(dāng)前的模型參數(shù)進行更新,,而不會調(diào)用tf.get_variable()函數(shù)重新定義模型變量,因此變量共享只是存在于模型定義階段的一個概念,。 |
|