1.数据并行DP(朴素数据并行,Zero数据并行之后补充)
O
(
h
2
∗
l
)
O(h^2*l)
O(h2∗l)
每台机器做完自己的梯度后需要做一次All reduce操作来累积梯度,故一个batch计算发送的数据量为每层梯度大小
h
2
h^2
h2乘以层数
l
l
l
优点:运用简单,效率高,计算和通讯之间可以做异步。
缺点:有时候单个GPU无法容纳下整个大模型做训练。
流水线并行PP(Gpipe)
O
(
b
∗
s
∗
h
∗
l
/
k
)
O(b*s*h*l/k)
O(b∗s∗h∗l/k)
每个pp层之间发送中间变量大小(和输入x相同大小)为
b
∗
s
∗
h
b*s*h
b∗s∗h,乘以正向和反向一共要传递的次数
2
∗
(
l
/
k
−
1
)
2*(l/k-1)
2∗(l/k−1),得到上述大致的数量级
优点:通讯量小,数据无关。
缺点:要保证模型能均匀切分,否则会影响性能。需要用到重计算,来支持更大的批量 b b b,从而保证流水能发挥作用。反传之前需要等待所以微批量计算。
张量模型并行TMP
O
(
b
∗
s
∗
h
∗
l
)
O(b*s*h*l)
O(b∗s∗h∗l)
MLP层第一个W1纵向切,第二个W2横向切能保证一个MLP只做一次All reduce操作通讯。同理attn根据头数来切分投影层。两者每次的发送数据大小和PP一样都是
O
(
b
∗
s
∗
h
)
O(b*s*h)
O(b∗s∗h),不同是,TMP发送量和模型Transformer层数成线性关系。