1. 程式人生 > 其它 >深度學習框架中的並行

深度學習框架中的並行

深度學習框架中的分散式通訊運算元和並行訓練

(1)首先要了解有哪些並行的種類。

(a)資料並行

(b)層內模型並行,這裡有Fully Connected模型並行,Group Convolution並行等等。

(c)層間模型並行,這裡包括一些流水線並行,,手動checkpoint和GPipe的知識。

(2) 常見的通訊運算元

首先要知道,集合通訊(Collective communication)有一對多,多對多。還有點對點通訊,Point-to-Point通訊。這些通訊運算元都是求導完備的通訊運算元。

a. broadcast, one sender, multiple receiver。

b. reduce,combine data from all senders。

c. all-reduce, Combine data from senders, deliver the result to all participant.

d. gather, multiple sender, one receiver

e. all-gather,gather messages from all, deliver messages to all participants.

f. all-to-all, a transpose. internal implementation is complex. 原本是資料切分,現在可以編成模型切分。

g. scatter, inverse to gather.

h. all scatter.

(3)介紹一下簡單引數並行。

首先,資料並行就是,模型複製多次,拆分資料。現在的簡單引數並行就是拆分模型,在需要進行線性操作之前,用all-gather收集資訊。在反向傳播之前進行一次reduce-scatter。

資料並行和模型並行的區別。資料並行在進行操作的時候(只針對前向來說),是不需要通訊的。比如矩陣乘可以一直往前面走,而模型並行需要一次all-gather。

層內模型並行。

如何實現由模型並行到資料並行的轉換呢?就是一個比較重要的運算元的功能了。all-to-all。all-to-all配合上all-gather就可以實現模型的各種並行操作了。

場景一:

Fully Connected模型並行。在人臉場景下,由於feature只有1k左右,但是由於人的id眾多,可能到幾百萬,所以最後一層模型就上G。為了handle這種情況,肯定是要模型並行的。如果覺得之後比較難算loss,可以進行一次all-to-all,但是實際上是不需要的,這裡涉及到一個softmax函式的性質(我不會)。

場景二:

group convolution:

組卷積,其實只需要一次通訊,所以可以判一次開頭和結尾。

流水線並行(Pipeline Parallelism)

由於在原來的流水線中,只有等上一塊卡做完之後,下一塊卡才能開始工作,這顯然是不怎麼科學。所以就可以把資料拆一拆,算一個部分之後,立馬交給下一張卡去進行計算。

手動checkpoint與Gpipe。

在流水線並行的這個過程當中,由於在反向傳播的時候可能需要保留中間結果,這意味著更多的視訊記憶體佔用。所以可以設計一個策略,在需要進行反向傳播的時候,我們再重新進行一次前向傳播。