Skip to content

10. 多卡、MoE 与分离部署 ​

本篇导读 ​

前两篇看过单个引擎怎样运转。这一篇把小林的资料助手扩展到多台设备:模型放不下、同事太多、长输入干扰生成,分别该怎样拆?读完应能先说清“拆的是权重、请求,还是计算阶段”,再判断增加 GPU 是否值得。

加一张卡,究竟替谁分担 ​

模型切分、请求副本与计算阶段分离的区别

如果一本手册大到一个工作台放不下,需要把工作拆给多人协作;如果一本放得下,只是排队的人太多,可以增加独立服务台。前者像 TP / PP,后者像 DP。两者都用了更多设备,解决的问题却不同。

设备之间也要交换数据。两张卡不自动快于一张;如果新增通信超过省下的计算,延迟会变差。

并行到底拆了什么 ​

方式拆分对象适用问题主要代价
TP,张量并行同一层的矩阵、头等张量模型容量、部分计算延迟频繁集合通信,对互联敏感
PP,流水线并行不同层放在不同阶段跨设备容量与流水气泡、阶段传输、负载平衡
DP,数据并行不同请求给不同副本增加总体请求吞吐每副本权重、路由与缓存分散
EP,专家并行MoE 的专家分布专家容量和计算token dispatch/combine、all-to-all
CP,上下文并行上下文位置或相关注意力状态长上下文容量与计算attention/KV 通信、实现复杂度

这些方式可以组合。部分框架的 DP attention、PCP、DCP 等名称代表更具体的混合机制,不能仅按缩写推断“复制完整模型”或“KV 一定平均分片”。

TP 常需要各卡在一层内协作;PP 像多个加工阶段,需要足够工作填满流水线;DP 像多个独立服务台,单请求未必更快,但总请求容量可增大。

MoE 的参数省在哪里 ​

MoE 的路由器为每个 token 选择部分专家。它减少的是该 token 的激活计算,不代表其他专家权重消失。部署时仍需保存、分布或卸载总专家参数。

某些专家可能被大量 token 选中,另一些很闲;跨设备时还要搬运 token 表示。低延迟小 batch 与大吞吐 batch 的最佳通信和布局可能不同。评估不仅看激活参数,还要看总权重、专家热点、dispatch/combine、通信重叠与负载均衡。

同样数量 GPU,NVLink、PCIe、RDMA 与普通网络的成本差异很大。比较不能省略卡间拓扑和有效带宽。

Prefill 与 decode 可以分开部署吗 ​

Prefill 常有较大的矩阵形状,decode 则需要稳定地推进许多活跃序列。把两者放在不同 worker 池,可以分别配置硬件、并行和调度,减少长 prefill 对吐字间隔的干扰。

路由、prefill池、KV传输、decode池及失败清理路径

这是一种典型职责图,不绑定某个产品的控制协议。首 token 在哪侧产生、何时传状态、是否流式传 KV,都依具体实现。

分离后,多出的是状态交接问题:目的端需要的不仅是 KV 字节,还包括请求位置、块布局与兼容配置。传输期间,源端和目的端可能短暂同时持有状态。超时或目标 worker 失败后,需要中止交接、清理双方占用,并由请求管理层决定失败返回或重试。

不能在半段输出后悄悄重跑并拼接新结果,也不能假设 KV 传到一半就可以安全恢复。

传输收益要算账 ​

沿用 32 层、8 KV 头、头维 128、BF16 的例子,8192 token KV 为 1 GiB。若端到端有效速度 25 GB/s:

text
仅传输时间下界 = 1 GiB / 25 GB/s ≈ 43 ms

还没有计算队列、连接、协议、同步、布局恢复与分配。网卡标称通常用 bit/s,公式需要 Byte/s。更少的实际 KV、更快互联和重叠传输可能改善结果;排队、布局不匹配与网络争用会恶化结果。

如果分离节省的干扰和排队小于交接成本,就不划算。短 prompt、小规模或网络弱的场景,合并部署往往更容易管理。是否拆分应以真实混合负载下的 goodput、成本和尾延迟判断。

外围组件各接在哪 ​

Mooncake、LMCache 提供 KV 传输、缓存与存储相关能力,分工依配置而异;NIXL 是传输与异构内存相关基础组件;Dynamo 提供分布式推理编排、路由等能力;Kubernetes、KServe、Ray Serve 处理部署、生命周期与服务编排的不同部分。

它们可以和模型引擎协作,不能把“引入分布式系统”当成 GPU 内部 kernel 已经更快。增加一个服务还会增加版本、监控、隔离和故障恢复责任。

判断练习:八个副本命中率低,应该立即引入共享 KV 吗?

先检查稳定前缀的长度、请求路由和热点分布。缓存感知路由可能已能解决部分问题。共享 KV 还需比较传输与重算成本、缓存工作集、隔离和故障行为。若几乎没有重复前缀,共享存储可能只有额外开销。

本篇回顾 ​

  • 模型放不下与请求处理不过来,需要不同的拆分方法;先确定拆分对象。
  • MoE 每次只激活部分专家,但部署仍要处理总权重、专家热点和通信。
  • P/D 分离能减少阶段干扰,也增加 KV 交接和失败清理成本。

到这里,小林已经能通过文字使用资料助手。如果他改成开口提问,刚学过的优化还能用多少? 下一篇进入语音与多模态。

别急,先让缓存热一下。