前几节讲了"算法层"如何省 FLOPs、压 KV、稳训练。但 1.6T 参数 × 32T+ token 的训练, 真正的拦路虎是工程层的细节——通信能不能藏进计算、低精度会不会崩、loss spike 怎么救、 KV cache 怎么落盘。本节把 V4 论文 §3 / §4.2.3 / §5.2 里 8 个"工程亮点"一次性讲完, 每一个单独看都不大,合起来就是"能不能跑得动"的差别。
MoE 推理在多卡间的标准流程是三步串行:
传统实现里这三步严格串行——通信时 GPU 在等,计算时网卡在等。 MegaMoE 把三步融合成一个 CUDA kernel,按"波次"(wave)调度专家: 每波处理一小部分专家,第 k 波在 combine 时,第 k+1 波已经在 dispatch、第 k-1 波的 compute 还在跑。
在同样的 token 总量下,MegaMoE 通过波次调度把通信完全藏进上一波的计算里。
这条不等式来自 V4 论文 §3.1:要让通信完全被计算覆盖,每 1 GB/s 的可用带宽就够"喂" 约 6.1 TFLOP/s 的计算。换句话说,只要专家计算量足够大,bandwidth 就不再是瓶颈。
DeepGEMM PR #304 开源,社区可直接复用到自己的 MoE 推理栈。
主流的 FP4 部署都是 PTQ(post-training quantization)——训完用 BF16 / FP8,再 round 到 FP4。 V4 反过来做:训练时就让模型"知道"自己最终会跑在 FP4 上,把量化误差当成训练信号来 fit。
两处恰好都是"反复读、读得多"的部分——显存和带宽收益最大。
主 Attention 的 Q/K/V/O 投影对精度敏感(CSA 的 score 一旦失真,topk 就错)。 V4 把 FP4 用在对噪声不敏感、反向梯度光滑的位置。
B200/GB200 原生支持 FP4 × FP8 mixed-precision matmul。
config 里有一行不起眼的:
意思是:前 3 层 MoE 不走可学习的路由网络,而是用一张固定的 hash 表把 token ID 直接映射到 expert ID。
scores = W·h每次前向都要算 → 有计算开销 + 训练不稳定时 routing 会抖。
expert_id = hash(token_id) % n_experts来自 Roller et al. 2021 (Hash Layers)——简单粗暴但极快。
MoE 训练最经典的崩法:
这样做的好处:router 不会因为本步的剧烈更新就把 token 倒进冷门 expert—— 因为路由决策来自几步之前已经被验证"稳定"的 θ。
几乎完全消除 loss spike 引发的训练崩溃,1.6T 模型不用每次 spike 都 rollback 回 checkpoint。
spike 期间额外开销 ~20%(要保留旧 router 参数副本 + 多一次路由计算)。
只在监测到 loss spike 时启用,日常训练 0 开销——平均吞吐几乎不受影响。
SwiGLU 是现代 LLM 的标配(LLaMA、Gemma、Qwen、DeepSeek 全在用):
问题是输出可以任意大——两个线性分量逐元素相乘,没有上界。 超大模型训到几万亿 token 时,个别 token 的激活值能飙到几百,FP4 直接溢出 (E2M1 只有 ±6 的可表示范围),梯度也跟着爆。
标准 softmax 的死结:所有权重必须加和为 1。 即便所有 token 都"无关",softmax 还是被迫把这 1 单位注意力分配出去—— 结果就是模型必须"看"一些不该看的东西。
权重必和为 1 → 长上下文中无关 token 被迫分到注意力 → 信号被噪声稀释。
多一个可学习的 sink logit——无效注意力可以"弃权"倒进水槽。
原本 100% 注意力必须分给 N 个 token;现在有了 sink,模型可以决定"只给前 5 个 token 分 60%,剩下 40% 全部弃权"。 在百万级 token 上下文里,真正相关的可能只有几百个,sink 让模型有说"我不在乎"的权利。
OpenAI GPT-5 系列也采用了类似设计,这已经成为长上下文模型的标配。
config 行:
含义:在主预测头之外,额外加 1 个 MTP head,同时预测 下下一个 token(t+2 位置)。
V4 的 KV 来源很复杂:SWA(局部最近 128 token)、CSA(压缩 KV)、HCA(更深层压缩)。 一刀切的 PagedAttention 显然不合适——V4 用了分类型异构存储。
服务化场景里大量请求共享同一段系统 prompt / 工具描述 / few-shot 示例。 V4 把这些共享前缀的压缩 KV持久化到磁盘,新请求来时直接读盘,免去重复 prefill。
| 策略 | 磁盘占用 | 命中延迟 | 适用场景 |
|---|---|---|---|
| Full Caching | 最大(每层 SWA 都存) | 最低(直接读) | 磁盘充裕、延迟敏感 |
| Periodic Checkpointing | 中等(每 N 层存一次) | 中等(部分需重算) | 权衡折中 |
| Zero SWA Caching | 最小(只存压缩 KV) | 最高(SWA 全部重算) | 磁盘紧张、长前缀 |
SWA 部分按 token 数线性增长,是落盘成本的大头——三种策略本质都在权衡存储 vs prefill 计算。
| # | 名称 | 解决什么问题 | 关键收益 |
|---|---|---|---|
| 6.1 | Fine-Grained EP (MegaMoE) |
MoE 推理 dispatch/compute/combine 串行,GPU 等通信 | 1.50–1.73× 加速(rollout 1.96×) |
| 6.2 | FP4 QAT | PTQ 量化丢精度,FP8 还是太贵 | MoE 权重砍半,未来 FP4×FP8 再快 ~33% |
| 6.3 | Hash Routing | 底层 MoE 路由开销大、训练早期负载抖 | 前 3 层 O(1) 路由,省 router 计算 |
| 6.4 | Anticipatory Routing | router 突变 → loss spike → 训练崩溃 | spike 自动救火,~0% 日常开销 |
| 6.5 | SwiGLU Clamping | 激活值飙升 → 梯度爆炸 + FP4 溢出 | 梯度稳定,QAT 友好 |
| 6.6 | Attention Sink | softmax 必和为 1,被迫"看"无关 token | 长上下文降噪,百万 token 可用 |
| 6.7 | MTP (depth=1) | 表征不够 forward-looking | 主任务收益 + 推测解码 draft 模型 |
| 6.8 | 异构 KV + On-Disk | SWA/CSA/HCA 混合 KV 难统一管理;共享前缀重复 prefill | 显存利用率↑、TTFT↓(命中时) |