- Batch Size B
- Sequence length S
- Head num H
- Head dim d
- Hidden size h=H×d
- Parallel Size p
Tensor Parallel in one machine
Attention
计算量

Usually d = hidden_size
矩阵乘法每个元素为乘加计算,为2个操作
XWqkv:
2×B×3×s×h×h=6Bsh2
QKT:
2×B×s×h×s=2Bs2h
P=SV:
2×B×s×s×h=2Bs2h
output=PWo:
2×B×s×h×h=2Bsh2
total:
FLOP=8Bsh2+4Bs2h
通信量:
All-Reduce after attention layer:
2×(p−1)×p1BSHd=p2(p−1)BSHd
Prefill阶段Sequence Parallel 是 Reduce-Scatter + All Gather, 通信量和All-Reduce一样

MLP Block
前后通信方式和Attention一样,故通信量也一样。

计算量:
升维再降维的操作,设升维到d
2×B×shd=2Bshd
升维再降维总量:
FLOP=4Bshd
FFN in MOE
前后各一个All-To-All
收集Attention结果,得到完整的sequence作为FFN输入,FFN输出分到各rank继续其他层TP执行
2×(p−1)×p1BSHd=p2(p−1)BSHd

计算量:
MOE内部FFN为降维再升维,设降维到d
FLOP=4Bshd
Pipeline Parallel
按层分到各个rank,每个rank负责一部分网络
单次rank间通信为BSHd,整体总通信
(p−1)×BSHd
通信量减少,服务端利用率最大化。
每个Request一次在各rank上运行并把输出传到下个rank,相比Tensor Parallel latency增加。
TP + PP 如 TPsize=4, PPsize=2, 在attention后的All-Reduce可以从 P0传到 P1,一次的通信量是p×pBSHd=BSHd
KV Cache
decoder需要获取之前每个step token 的KV,s′=sprefill+sdecode
KV cache size:
2×L×Hd×s′
再乘上sizeof(dtype)即可
计算量:
每个step需要计算当前token 的QKV,即s=1
XWqkv
FLOP=2×B×3×1×h×h=6Bh2
QiKT为当前token Qi和所有K
FLOP=2×B×1×h×s=2Bsh
P=SV:
FLOP=2×B×1×s×h=2Bsh
output=PWo:
FLOP=2×B×1×h×h=2Bh2
总计算量:
FLOP=8Bh2+4Bsh