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层数成线性关系。