大模型推理夯实:并行策略图解
大模型并行策略,别被吓到!说白了就三刀,刀刀见血!
哎,我跟你说,这事儿真得从上周那晚说起。
半夜了,我正搁那儿琢磨点事儿,手机“叮”一声,群里一个读者兄弟直接扔了个“求救信号”:“哥,CP和EP到底啥关系啊?我配了个CP=2,结果日志里那个MoE的通信图,我愣是盯了半小时没看懂!”
他还附了张截图。我点开一看,差点没笑出声来——图里那个叫 MOE_DP 的变量,后面明明白白跟着个 _ATTN_CP 组。他呢,死盯着那参数名看了半小时。
你说,是不是这样?并行策略这东西,就是爱跟你玩这套。名字是个“李逵”,干起活来可能是个“李鬼”。
我折腾多卡推理小一年了,这坑踩得,能从北京排到上海。今天咱们就把它摊开来当个故事讲,画几张贼简单的图,用人话,给你彻底整明白!
你不是在“堆金砖”,你是在“切蛋糕”
先给你倒一碗硬核鸡汤:多卡推理,不是显卡多你就牛了,关键是,你切了啥?
大模型有两个“人格”:一个是 Prefill(吞吞吐吐) ,一口气读完你写的小作文,算出KV Cache;另一个是 Decode(一字千金) ,一个字一个字地往外蹦,比老太太过马路还慢。
这两个人格,卡你的地方完全不一样。
Prefill 阶段,GPU 算得快冒烟了,但它怕 “肚子太小”,显存不够,模型都塞不下。Decode 阶段呢,显存是够了,但带宽成了瓶脖子,它怕 “跑得慢”,你等得黄花菜都凉了。
所以你看,并行策略这玩意儿,说到底就三刀,一刀一个痛点:
- **第一刀:切模型参数 —— 张量并行(TP) + 流水线并行(PP)**
- **第二刀:切请求 —— 数据并行(DP)**
- **第三刀:切序列 —— 上下文并行(CP) + 序列并行(SP)**
记住了,这三刀不是让你选一把,而是得组合着来,像做饭放调料一样,缺一不可。
张量并行:最狠的“庖丁解牛”
TP,是所有策略里最“高调”的。为啥?因为它通信最密集,是真正的“社交悍匪”。
TP 就是把一层 Transformer 的权重矩阵,像切西瓜一样“咔嚓”切开,每个 GPU 只分到一小块。但代价就是,每算一层,都得“大家一起来”同步两次。
来,我给你画个图想象一下。假设一个简单的全连接层,权重是 W,输入是 X:
TP列并行(竖着切):
GPU0: 我算 X 乘我手里那半块 W,得出个“半成品”!
GPU1: 我也算 X 乘我手里那半块 W,也得个“半成品”!
然后俩人 AllReduce 一下:“把你那半给我!我这半给你!” 加起来,才算个“成品”。
TP行并行(横着切):
GPU0: 我只管 X 的前一半,乘整个 W,得出我这份!
GPU1: 我只管 X 的后一半,乘整个 W,得出我那份!
然后俩人头一碰,AllGather 一下:“拼起来!” 才得到完整的“最终成品”。你看看,Transformer 每层有两个 Linear 层(Attention 和 FFN),再加上 Attention 的投影层,跑下来差不多每层都得搞 2-3 次 AllReduce。这得多累!
我亲测过,H200 的机内 NVLink 速度能飙到 900GB/s,可一旦跨了机器走 InfiniBand,直接掉到 50GB/s。慢了整整 18 倍!所以我说,TP 千万别跨机,最多 8 卡一组在机箱里自己玩,出去就是找死。
有个小坑你得注意:TP 的通信量和你的 batch size 也有关。小 batch 下,AllReduce 那点数据量你根本感觉不到;可一旦 batch 大了,你就得在那儿干等它算完,那叫一个煎熬。
数据并行:最朴素的“人多力量大”
DP 的概念最简单粗暴:“模型我复制几份,每个人发一个不就行了?”
简单,但代价是,每张卡都得当“全场最靓的仔”,把完整的模型权重和 KV Cache 都给我从头到尾背上!
我见过一个团队,8 张 H100 跑 70B 模型,一张卡放不下,他们就组成了 TP=8 的一个组,刚刚好。结果业务方说:“我们想吞吐再大点!” 这帮兄弟转头就加了 DP=2,搞了两个 TP=8 的并行组。
模型参数倒是可以大家共享,他们用了 DeepSpeed 的 ZeRO-3。但 KV Cache 这东西,你懂的,亲生的,没法共享!每张卡都得自己掏腰包存一份。
所以结论很简单:DP 只解决“人太多”,不解决“包太大”。它只管接客,不管模型能不能装下。
专家并行:MoE 的专属“员工咖啡厅”
MoE 模型,那就得另说了。
V3/R1 有 256 个专家,但每个 token 只找 8 个(top-k=8)。如果你不搞 EP,那每块 GPU 都跟个“老好人”一样,把 256 个专家的家底全存了,显存当场爆炸!
EP 的做法是啥?分分工嘛!一个专家一个工位,分散到不同 GPU 上。上班的 token 先问问门口的“门控(Gating)”大爷该去哪,大爷一指路,token 就直接杀过去,算完再回来。
EP的一天:
1. 选秀(Gating):每个 token 对着 256 个专家海选,挑出 top-8 个“心仪对象”。
2. 分发送达(Dispatch):大家像快递分拣一样,通过 **All-to-All(A2A)** 通信,把 token 送到对应的专家工位上。
3. 专家干活:每个 GPU 撸起袖子,只算属于自己的那一部分。
4. 打包回家(Combine):结果再次通过 A2A 通信,原路返回到原来的工位上。这里的关键就是这个 A2A 通信。
读者评论 5