Di-PS:异构跨集群大模型训练的系统—算法协同设计
Di-PS 的适用场景:同一个大模型需要跨越速度、网络和可靠性各不相同的集群训练。它保留 DiLoCo 的两阶段优化框架,各集群先本地训练,再低频交换完整模型;去中心化 AllReduce 被 leader–follower 参数服务器取代。参数服务器利用全局更新历史拒绝异常 pseudo-gradient,按消费 token 加权并裁剪。点对点分片通信、动态 grace time 和故障隔离减少等待与陈旧度,算法侧 penalty 则防止朴素异步训练发散。受控实验中,Di-PS 相对同步 DiLoCo 提速 1.27–4.67 倍;16 集群弱扩展达到无跨集群通信理想吞吐的 98.3%–98.8%。论文还报告了 9 个生产集群、峰值 10,112 个 NPU、100B 模型、2.3T token、33 天的训练。
本文目录 · 18 节
- 1. Di-PS 处理的跨集群问题
- 2. 前置知识:三类并行、参数服务器与陈旧更新
- 3. 从数据并行推到 DiLoCo
- 4. 三个 baseline 为什么失败
- 5. 总体架构:leader 控制、followers 承载模型
- 6. 完整外层算法与伪代码
- 7. 动态 grace time:在等待与错过之间在线取舍
- 8. pseudo-gradient penalty:公式、变量和判定过程
- 9. 为什么这种异步方法仍有收敛依据
- 10. 通信调度、数据流与部署位置
- 11. 手算端到端例子:四集群一次更新如何发生
- 12. 实现细节与故障恢复
- 13. 实验设置:硬件、模型、对照与统一超参数
- 14. 主要结果与准确数字
- 15. 消融、敏感性与系统开销
- 16. 33 天生产案例与经验
- 17. 结果应怎样解读,以及哪些结论不能外推
- 18. 局限、适用边界与可复现要点
1. Di-PS 处理的跨集群问题
训练超大模型通常在一个机房内组合张量并行(TP)、流水线并行(PP)和数据并行(DP)。这些并行方式每一步都有密集通信,依赖集群内低时延、高带宽网络;但现实中很难长期拿到一个足够大的同构集群。建设多个较小集群更容易满足供电、散热、故障隔离和日常作业规模,代价是跨集群 TCP/IP 带宽可能比集群内训练网络低上百倍,而且不同站点的 NPU 代际、节点数、网络拓扑与故障率都不同。
Di-PS 让多个集群共同预训练同一份模型,研究范围不包括多作业排队,也不把单个前向算子跨洲切分。每个集群内部仍运行成熟的 TP/PP/DP 和 AdamW;只有一批本地步骤结束后才跨集群交换参数。一次同步仍要搬完整模型,按 FP32 估算,100B 参数约 400GB。同步执行会让最快设备等待最慢集群,完全异步又会让慢集群基于旧模型提交更新,可能破坏收敛。训练持续数周、涉及上万设备时,集群加入、退出以及硬件或管理系统故障也会让全局 collective 扩大影响。
系统需要让快集群独立前进,让慢链路只影响自身,同时维持可靠的全局优化轨迹,并把集群或参数服务器故障限制在局部。Di-PS 为此使用中心化参数服务器,既利用点对点通信的系统特性,也利用完整更新历史提供的统计信息。
2. 前置知识:三类并行、参数服务器与陈旧更新
集群内并行。TP 把一个算子的张量切给多设备,PP 把模型层切成多个 stage,DP 复制模型并对不同 mini-batch 求梯度。TP、PP 对时延敏感,DP 的梯度归约对带宽敏感。Di-PS 不替换这些机制;它位于整个集群之上,把一个训练集群视作一个外层优化参与者。训练 worker 中 TP 与 DP rank 0 先在 TP group 内收集参数,随后由数量等于 PP size 的 workers 与参数服务器通信。
参数服务器。传统 PS 由 worker 推送梯度、服务器更新参数、worker 再拉取新参数。中心化不等于所有数据都穿过一个进程:Di-PS 的 leader 只处理小于 1KB 的控制消息,真正的大张量直接在训练 workers 与多个 follower PS 之间流动。每个 follower 只保存若干层及其外层优化状态,因此容量和网络端点都可横向扩展。
陈旧度。设服务器当前模型是版本 20,慢集群却从版本 17 开始完成了若干本地步,那么它提交的模型差分并不是版本 20 附近的方向。异步延迟越大,方向越可能偏离当前下降方向。尤其两阶段优化把许多内层梯度压成一次模型差分,差分的范数会同时反映数据、局部训练长度与模型版本差异,不能把它当作普通同步 SGD 梯度无条件平均。
3. 从数据并行推到 DiLoCo
若有 N 个集群,每一步都跨站点做 DP,通信频率等于训练步频率,WAN 会成为主路径。DiLoCo 把一次全局更新拆成内外两层。外层轮次 t 开始时,所有集群拿到共同参数 θ_t;集群 i 用学习率 γ_in 和本地随机梯度 g 连续走 H 步:
θ^(i)_(t,h+1) = θ^(i)_(t,h) − γ_in · g^(i)_(t,h), h = 0,…,H−1 Δ^(i)_t = θ_t − θ^(i)_(t,H) θ_(t+1) = θ_t − γ_out · (1/N) · Σ_i Δ^(i)_t
θ^(i)_(t,h) 是集群 i 在外层轮次 t、第 h 个内层步的参数;γ_in 是 AdamW 内层学习率;H 是两次跨集群同步之间的本地步数;Δ^(i)_t 是模型起点减去本地终点,论文称 pseudo-gradient;γ_out 是外层学习率。它叫“伪梯度”,因为它是连续 H 次带优化器状态的更新结果,不是某个 batch 上直接反向传播得到的梯度。
通信频率从每步一次降成每 H 步一次,但每次仍发送完整参数。同步 DiLoCo 还要求所有参与者在外层 barrier 会合,轮次时间由最慢训练或最慢链路决定。于是自然想到异步:谁完成就更新谁。但异步后各集群的起点不再相同,Δ 所对应的 θ 版本不同,公式中“同时对同一参数求平均”的前提被破坏。Di-PS 正是在这里接管外层优化。
4. 三个 baseline 为什么失败
跨集群 DP:每一步同步全部梯度,WAN 进入关键路径。即使算力相同,1Gbps 链路也会迫使其他 10Gbps 集群等待;它只适合网络近似同构且跨站带宽足够高的条件。
同步 DiLoCo:把通信次数降到每 64 步一次,却没有消除 barrier。算力慢 40% 的集群会让每一轮都多等,故障或临时降速也传播到所有参与者。论文弱扩展实验里,继续加入较慢集群后,同步 DiLoCo 的最高吞吐反而出现在 12 个集群,而不是 16 个,直接展示了“资源更多、有效吞吐更低”的 straggler 效应。
去中心化 Async DiLoCo:每个集群维护外层优化器副本并异步更新,能减少算力等待,却有两个根本问题。系统上,副本间同步依赖 collective,最慢链路仍会污染整体通信;论文在四集群、三条 10Gbps 加一条从 10 降到 1Gbps 的实验中观察到去中心化架构退化更明显。算法上,任何单个集群都没有完整、连续的全局更新历史,难以低成本比较当前 pseudo-gradient 与历史分布。论文用四个模拟集群训练 LLaMA3.2-1B,令性能差异 η 从 10% 增至 40%,朴素 ADiLoCo 不能收敛且异构越强越糟;仅仅“去掉等待”并不是可用方案。
中心化 PS 的关键价值因此不只是 RPC 更灵活。点对点传输让慢链路局部化;全局更新历史让异常检测可行;单点协调让故障无须所有集群共同形成新视图。这三个性质分别对应效率、收敛和韧性。
5. 总体架构:leader 控制、followers 承载模型
100B 模型无法由一台普通 CPU 服务器承担完整 PS。论文估算外层模型及优化器状态需要 1600GB,接收各集群参数至少还需 400GB 缓冲,总内存下限约 2000GB。Di-PS 因而把模型按层切给多个 follower PS,每个 follower 部署在独立 CPU 服务器;leader 只保存成员、调度、进度、范数历史等小元数据,不保存完整模型。
- 训练集群完成本地训练,向 leader 发 push request,附带 cluster ID 与已消费 token 等元数据。
- leader 根据 worker、层和 follower 状态生成通信 schedule,并分别通知请求方和 followers。
- 训练 workers 把各层参数直接推给对应 followers;传完后向 leader 报告。
- 首个请求触发一个 grace window。窗口内到达的其他集群可合并到同一次外层更新。
- followers 计算各自 shard 上每个集群 pseudo-gradient 的平方范数,leader 汇总、检测异常并返回保留集合。
- followers 对保留更新按消费 token 加权、做全局一致裁剪,以 Nesterov 更新各自模型 shard。
- followers 通知完成;leader 让本轮参与集群拉取最新参数。未参与的慢集群继续本地计算,不形成全局 barrier。
控制流使用 gRPC,数据流使用多线程 ZeroMQ。这样大张量拥塞不会阻塞 heartbeat、完成通知和恢复指令,也避免控制与数据共享 channel 形成死锁。论文在 16 集群、3 天训练中测得控制消息平均 1.35 条/秒、峰值 26 条/秒,远低于 gRPC 处理超过 10,000 条/秒亚 KB 消息的能力,因此 leader 在所测规模不是控制瓶颈。
6. 完整外层算法与伪代码
输入:初始模型 θ0;k 个训练集群;grace time τ_grace;token 预算 tks_max
状态:θ 按层分散在 followers;completed = ∅;updates = ∅;timeout = ∞
while 已累计消费 token < tks_max:
g = 在 timeout 内取得一个请求外层更新的集群
if g 存在:
timeout = τ_grace # 第一位到达者开启合并窗口
θ_g = followers 接收 g 的参数
Δ_g = θ − θ_g # 基于服务器当前参数形成 pseudo-gradient
updates 加入 Δ_g;completed 加入 g
累加 g.local_consumed_tokens
else: # grace window 到期
accepted = 用全局历史验证 updates,排除异常集群
δ = 按各集群消费 token 对 accepted 加权平均
g_n = min(1, 1 / ||δ||_2) · δ # 全模型 L2 范数裁剪到不超过 1
θ = Nesterov(θ, g_n) # 每个 follower 更新自己的层
把 θ 发给 completed 中的集群
timeout = ∞;completed = ∅;updates = ∅
这里第一次等待是无限的,表示没有请求时服务器不空转更新;收到首个请求后,等待改为短暂的 τ_grace,把时间接近的完成者聚成一个外层 batch。窗口到期才更新,因此更新期间和 pull 阶段暂不接受新的 push。算法以累计 token 而非“所有集群完成相同轮数”作为总进度,这与异步参与和按 token 加权一致。
论文的外层优化器是 Nesterov,内层是 AdamW。Nesterov 的动量状态由 followers 随模型 shard 保存,避免每个训练集群维护一份可能分叉的 outer optimizer。算法描述中的 verify_pseudo_gradients 不只是 clip:它先基于历史分数整条排除异常集群,再聚合正常更新,最后才做范数裁剪。
7. 动态 grace time:在等待与错过之间在线取舍
若首个集群一到就立即更新,稍晚几秒的第二个请求会撞上 update/pull 禁止期,只能等待整个阶段;若固定等很久,又会让最快集群无谓空闲。论文把它类比 ski-rental 问题。令 λ 为近期 cluster push 的平均到达率,C_m 为错过请求后额外等待 parameter update 与 pull 的代价,等待窗口的期望成本是:
C(τ_grace) = τ_grace + C_m · exp(−λτ_grace) τ*_grace = (1/λ) · ln(C_m λ)
第一项就是主动等待时间;若请求近似以速率 λ 到达,窗口内没有后续请求的概率是 exp(−λτ),乘上错过代价形成第二项。对成本求导并令其为零得到最优窗口。λ 与 C_m 都由运行时观测估计,所以快集群密集提交时窗口可以容纳更多请求,提交稀疏或 update 很短时则不必长期等待。该模型不是收敛证明的一部分,而是减少系统空闲和额外陈旧度的在线策略。
8. pseudo-gradient penalty:公式、变量和判定过程
设有 n 个 follower,集群 j 在外层步 t 的第 i 个模型 shard 差分为 Δ^(i,j)_t。各 follower 本地计算平方 L2 范数,leader 汇总:
G^j_t = Σ_(i=1)^n ||Δ^(i,j)_t||² E^j_t = (G^j_t − μ^j_t) / σ^j_t μ_(t+1) = αG_t + (1−α)μ_t σ_(t+1) = sqrt((1−α)σ_t² + α(G_t−μ_(t+1))²)
G^j_t 是集群 j 整条 pseudo-gradient 的平方范数;μ、σ 是其指数移动均值和标准差;E 是标准化异常分数;α 控制历史更新速度,默认 0.02。leader 保存近期分数栈 E。若某集群当前分数 E^j_t > β·max(E),则把该集群标成异常,默认 β=3,并通知所有 followers 在本次参数更新中排除它。这保证各 shard 对一个集群做相同决定,不会有的层保留、有的层拒绝而扭曲方向。
设通过检测的集群集合为 c,集群 j 对应消费 token 数为 T_j,follower i 上的加权差分为:
δ^i_t = (Σ_(j∈c) T_j · Δ^(i,j)_t) / (Σ_(j∈c) T_j) g_n = min(1, 1 / ||δ_t||_2) · δ_t
按 token 加权不是按集群平均:快集群可能在相同墙钟时间消费更多训练数据,其贡献因此更大。最后的 ||δ_t||_2 是跨所有 shard 的全模型 L2 范数;系数小于 1 时把范数压到 1,否则原样保留。异常排除解决离群方向,token 权重处理异步进度差,最终 clipping 限制一次外层更新幅度,三者职责不同。
9. 为什么这种异步方法仍有收敛依据
论文在目标函数 L-smooth、随机梯度满足 (M,σ²) 有界噪声等假设下,把已有异步优化的 error-feedback 分析扩展到两阶段设置,得到随机选取输出迭代点 θ_out 的梯度范数期望:
E[||∇f(θ_out)||²] = O(τ/T + σ/√T)
T 是外层迭代尺度,τ 是系统异步延迟,σ 表示随机梯度噪声。随着 T 增大,两项都下降,给出次线性收敛率。这个式子说明系统与算法不能分开:PS 的并发通信、grace window 和点对点路径缩短 τ;基于全局历史的异常排除针对异步引入的低质量更新,意图降低有效噪声。论文把这种一一对应称为 system–algorithm co-design。
该上界不是“任何异构程度都保证不发散”。它依赖平滑性、有界噪声和延迟等条件,也没有消除非独立同分布数据的偏差。实验仍是必要证据:在四个模拟集群上把性能差异扩到 η=200% 时,Di-PS 的 loss 保持稳定;BBH、MMLU、DROP 结果与同步方法相近。理论解释设计方向,实验验证论文所用模型和超参数范围。
10. 通信调度、数据流与部署位置
一个训练集群会有多个 PP workers,多个 followers 又各持不同层,因而一次 push 是 many-to-many。leader 生成由若干“通信步”组成的 schedule;每一步包含可并行执行且不冲突的 worker–PS 对。贪心规则从第一个 worker 开始,把它尚未发送的最早层分给最久未被使用的 follower,再依次处理其他 workers,直到所有层排完。目标是尽量同时激活多条跨集群链路并避免同一端点争用。新集群可独立生成 schedule,无须重求全局组合优化,这对异步到达很重要。
大参数采用序列化数据流。follower 收到字节后先放进 memory pool,由专用 consumer thread 异步反序列化;发送端也对序列化与网络发送做对称流水。论文指出未经处理时,100B 外层优化的序列化可占约 40% 时间。checkpoint、控制通信和数据通信也可重叠。跨集群通信走 TCP/IP,集群内 TP/PP/DP 使用专用训练网络,因此不会争用同一物理训练链路。
PS 可以放在任一有 CPU 节点的候选集群。令 B∈R^(N×M) 表示 N 个候选 PS 位置到 M 个训练集群的带宽矩阵,B[i,j] 是候选位置 i 到训练集群 j 的带宽;p[j] 是集群 j 的训练吞吐。假设提交频率与吞吐成正比,部署位置为:
i* = argmax_i (B[i,*] · p)
这不是选单条最快链路,而是最大化“到各训练集群带宽 × 它们提交权重”的总和,让 PS 更靠近高吞吐、通信更频繁的参与者。作者还指出 CPU 服务器比 NPU 便宜,实际可把训练集群的空闲 CPU 容量作为候选。
11. 手算端到端例子:四集群一次更新如何发生
设 A、B、C、D 都从某次拉取的模型开始做 H=64 个 AdamW 步。A 在 100 秒完成,B 在 103 秒完成,C 在 106 秒完成,D 因算力与 1Gbps 网络要 180 秒。A 的请求让 leader 开启 8 秒 grace window;B、C 在窗口内到达,于是三者共同形成一次外层更新,D 不阻塞它们。A/B/C 的 PP workers 按 schedule 同时向不同 followers 推层,followers 直接接收数据,leader 只看元数据。
为了演示公式,假设全模型只切成两个 shard。三个集群差分的平方范数之和分别是 G_A=4、G_B=5、G_C=81;历史移动均值约 4.5、标准差约 1,近期最大标准化分数为 2,默认阈值 β·max(E)=6。C 的标准化分数约 (81−4.5)/1=76.5,被整条排除;A、B 保留。若 A 自上次参与后消费 32K token,B 消费 64K token,而某个 shard 上 Δ_A=(0.2,0.4)、Δ_B=(0.5,0.1),则:
δ = [32K·(0.2,0.4) + 64K·(0.5,0.1)] / 96K = (0.4, 0.2) ||δ||₂ = sqrt(0.4²+0.2²) ≈ 0.447 < 1,因此本例不缩放
所有 followers 用同一保留集合和相同全局 clipping factor 更新各自 shard。更新结束后 A、B、C 拉取新模型并开始下一批 64 步。D 在 180 秒完成时提交的起点较旧;它可能独自触发下一窗口,也可能与其他完成者合并。若 D 的差分因陈旧而成为异常,就会被本轮排除;系统保留 D 的计算机会,但不承诺每份过旧计算都被采用。这也解释了论文为何警告性能差超过 100 倍会造成大量陈旧更新被丢弃、浪费算力。
12. 实现细节与故障恢复
内层训练沿用 TP、PP、DP 的通信—计算重叠;跨集群参数传输默认用 BF16 降低带宽,外层 Nesterov 状态保持 FP32 以维持数值稳定。受控实验中 1B、14B 模型使用 1 个 follower,100B 使用 16 个 follower。生产的 16 台 follower 都是独立 CPU 服务器,网络为 10–25Gbps。
训练集群周期性向 leader 发 heartbeat。新集群加入时,leader 让 followers 把最新参数发给它初始化;连续三个 heartbeat interval 未收到响应,就把该集群移出外层优化。健康集群不需要暂停或共同确认成员变化。数据层面,生产做法是把数据预先切成远多于集群数的 chunks,让动态数量的集群仍获得均衡且有代表性的数据;仅有弹性成员机制并不能自动保证数据一致性。
leader 只 checkpoint 小于 100KB 的元数据。每个 follower 在每次外层优化后异步保存模型和优化器 shard,只保留少数最近快照,这些状态也可用于模型评估。follower 通过 heartbeat 被 leader 发现并从最新 checkpoint 重启。leader 故障时,训练集群和 followers 非阻塞地持续重连,由 Kubernetes 等管理系统重启 leader;这段时间跳过外层更新,但各集群继续做 inner steps。
33 天生产训练里 Di-PS 自身共出现 4 次故障。故障注入中,leader 对 1B/14B/100B 的检测时间分别为 40.5、31.7、38.9 分钟,进程重启约 0.21、0.22、0.21 分钟;follower 检测仅 1.52、1.41、1.35 分钟,重启为 0.18、2.56、1.14 分钟。leader 检测慢与其故障由外部管理系统识别有关,但 inner training 可继续;follower 的主动 heartbeat 使检测更快。
13. 实验设置:硬件、模型、对照与统一超参数
论文构造三组平台。Real 是 16 个真实小集群,配置覆盖 2×H800、1×H800、2×A100、1×A100、4×3090、16×2080Ti、16×2080、8×2080Ti、8×2080,其中 8 个集群为 4×3090,训练吞吐最大相差 8.18 倍。Emu-S 是 16 个单卡 80GB H800 集群;Emu-L 是 16 个 8×80GB H800 集群。模拟环境通过注入最高一个 iteration 的 100% 延迟形成均匀速度差异。Real 与 Emu-S 训练 LLaMA3.2-1B,Emu-L 训练 Qwen3-14B。
对照包括:每步同步的 DP;每 H 步同步一次的 DiLoCo;采用去中心化外层优化器副本的 Async DiLoCo;以及 Di-PS。默认每集群内层学习率 6e−5、batch size 32K、H=64、外层学习率 0.7、外层 momentum 0.8。网络实验让一个集群的最慢跨集群链路为 10、5 或 1Gbps,其余均为 10Gbps;真实集群内带宽 100Gbps,模拟集群内带宽 1600Gbps。报告的是所有集群聚合训练吞吐,因为各 baseline 的集群内 DP 性能相同。
稳定性实验另用四个模拟集群,η=x 表示集群性能在 0–x% 范围均匀变化,测试到 η=200。模型质量在 BBH(推理)、MMLU(知识)、DROP(阅读理解)上比较。弱扩展从 1 增至 16 个真实集群:前 8 个都是 4×3090,后续按性能从高到低加入;第一个集群为 1Gbps,其余为 10Gbps。这样既有同构扩展段,也有逐步增强异构的扩展段。
14. 主要结果与准确数字
| 问题 | 论文结果 | 应如何解释 |
|---|---|---|
| 相对同步 DiLoCo 的端到端吞吐 | 1.27–4.67× | 主要来自快集群不再等待算力或链路 straggler |
| 相对 Async DiLoCo 的端到端吞吐 | 1.00–1.60× | 中心化点对点通信适应异构网络,同时 Di-PS 保持稳定收敛 |
| 同构弱扩展段 | 相对其他 DiLoCo 方法 1.00–1.11× | 算力同构时主要收益来自网络利用 |
| 异构弱扩展段 | 相对 Async DiLoCo 1.11–1.13× | 加入慢集群后仍能利用新增资源 |
| 相对无跨集群通信理想吞吐 | 除单集群外达到 98.3%–98.8% | 16 集群范围内通信与协调损失很小 |
| 累计 outer communication | 相对 Async DiLoCo 减少 1.06–4.69× | 在 16 集群、训练 10B token、不同最慢链路下统计 |
| follower 优化 | 通信最高 1.39×;序列化最高 1.48×;outer loop 总体 1.21× | 调度、多线程和流水重叠的独立贡献 |
在 η=10…200 的四集群实验中,Di-PS 保持稳定 loss。对应 BBH 分数为 29.23、29.46、30.09、30.47、29.45、28.94、29.67,DP 为 31.11、同步 DiLoCo 为 29.52;MMLU 为 24.18、24.94、24.61、24.21、24.66、24.76、26.34,DP 为 24.38、DiLoCo 为 24.16;DROP 为 31.45、32.75、31.02、31.22、31.53、31.42、29.94,DP 为 31.77、DiLoCo 为 27.88。单项有波动,但没有随异构度单调崩坏,整体处于同步 baseline 的同一量级。
这些数字不能混成一句“提速 4.67 倍且只损失 1.2%”。4.67× 是相对同步 DiLoCo 的特定端到端异构场景;98.3%–98.8% 是弱扩展对“每个集群完全独立且无 WAN 通信”的理想上限;1.21× 是 follower 局部工程优化;模型质量则用独立 benchmark 验证。不同口径共同支撑“异步、有效、未明显牺牲质量”,但各自回答不同问题。
15. 消融、敏感性与系统开销
通信消融把训练 10B token 后的累计 outer communication 单独拿出来。在 16 个集群且最慢链路从 10Gbps 降到 1Gbps 时,同步 DiLoCo 通信轮次较少,因为每次都等齐;Async DiLoCo 每个集群完成就通信,次数更多且去中心化路径受慢链路影响;Di-PS 的点对点架构把总通信时间相对后者降低 1.06–4.69 倍。Follower 消融覆盖 1B、14B、100B 和 10Gbps WAN,模型分别用 1、1、16 个 follower,确认计算成本不变,调度/多线程改善通信,producer–consumer overlap 改善序列化,总 outer loop 提速 1.21×。
附录在四个 η=100 模拟集群上测试 H=64,128,256,512,1024,2048。64 与 128 的收敛相近,其他值趋于更慢,较大的 H 尤其会降低收敛质量。更大 H 会减少 WAN 频率、提高系统吞吐,却让本地模型漂移更远,这是必须联合衡量的 trade-off。
精度敏感性比较 FP32 通信+FP32 外层、BF16 通信+FP32 外层、BF16 通信+BF16 外层。结果支持 FP32 外层优化可靠收敛,论文因此选择 BF16 传参、FP32 optimizer,节省通信但不把低精度用于外层状态。Penalty 的 α 测试 0.01、0.02、0.05、0.2、0.5;小于 0.05 时稳定,0.2/0.5 稍慢,0.01 噪声更大,默认 0.02。β 测试 1、3、5、10,均稳定;10 稳定较迟,1 会产生不必要更新,默认 3。这里的“不必要更新”沿用论文描述,核心结论是默认值位于稳定区而非精细调参所得的孤立最优点。
16. 33 天生产案例与经验
生产模型是 100B 参数的 LLaMA-like dense 模型,96 层,hidden size 8192,intermediate size 36864;33 天共消费 2.3T token。训练资源动态扩缩到 9 个集群,峰值 10,112 个 NPU,Di-PS 使用 16 台独立 CPU follower。训练 loss 在数据集切换处出现可解释变化,其余时间各集群稳定收敛。生产基座模型的结果为:BBH 83.4、MMLU 81.4、CMMLU 83.5、DROP 80.2、MBPP 72.0、GSM8K 84.5、HellaSwag 93.2。论文还列出 LLaMA3.1-70B、Qwen2.5-72B、LLaMA3.1-405B 作参考,但这不是同数据、同 token、同系统的严格因果对照,主要说明成品质量合理。
各类生产集群一次 push/update/pull 的平均秒数分别为:A 195/110/135,B 193/110/134,C 60/110/67,D 86/110/80,E 116/110/121。C/D/E 的通信更快,原因是更大的 PP 配置让更多设备同时与 Di-PS 交互。论文按完整训练过程计算,Di-PS 给每个训练集群增加的时间少于约 6%。Follower 的 24 小时 breakdown 中 CPU optimizer 计算是主要瓶颈;6 小时网络 trace 显示约每两小时与集群交互一次,发送呈 burst,25Gbps 网络峰值 16.4Gbps,9 集群时 followers 超过 95% 时间空闲,说明当前规模仍有余量。
33 天内平均每天 1.3 个故障,多数是瞬态并自动恢复。论文记录的故障包括网卡、故障 NPU、HBM overflow、存储、背板、collective、框架、用户代码、配置和管理系统问题;管理系统故障的平均恢复最慢,为 159.54 分钟。新建 Cluster E 有 31 次故障、MTBF 0.9 天,而其他集群少于 4 次,说明硬件 burn-in 差异会形成显著可靠性异构。中心化隔离使一个训练集群的失败、加入或移除不停止其他集群。
作者总结四条生产经验:多个小集群在网络成本、供电散热和故障域上可能比单一 mega-cluster 更现实;异构不能无限放大,超过 100 倍的慢集群可能持续产生被丢弃的陈旧更新;主动上报故障比从吞吐或 loss 间接推断更快;动态成员下必须全局协调数据分片,预切大量 chunks 以维持代表性和一致性。
17. 结果应怎样解读,以及哪些结论不能外推
吞吐提升的第一来源是删除全局 barrier,而不是 penalty。朴素 Async DiLoCo 同样删除 barrier,所以短时间也能跑快;它的问题是训练 loss 在强异构下失稳。Penalty 的价值是让系统收益可以持续兑现为有效 token 和最终模型质量。相反,局部调度与序列化优化只有 1.21× outer-loop 增益,不能单独解释 4.67× 端到端提升。论文用 baseline、收敛曲线、benchmark 与消融把“快”和“训得成”分开验证。
中心化也不是天然单点数据瓶颈。leader 不传参数,followers 按层扩展;9 集群生产 trace 还显示大量空闲。但作者明确承认,在数百集群等极端规模,中心化 PS 可能面临扩展挑战。现有证据最多支持 16 个受控集群和 9 个生产集群,不能直接推出任意规模线性扩展。
生产 100B 证据来自专用 NPU 集群,不等同于公有云抢占 GPU;受控速度实验主要是 1B/14B GPU 模型,也不等同于真实 100B 的算法消融。生产模型 benchmark 受训练数据影响,不能仅归功于 Di-PS。正确结论是:该架构在给定软硬件、优化器和数据流程中完成了长周期训练,并把系统开销控制在约 6%;不是证明所有模型、WAN 与数据分布都获得相同倍数。
18. 局限、适用边界与可复现要点
- 完整参数仍要传。Di-PS 降低频率并并行化路径,没有压缩掉每次 outer sync 的全模型通信;远低于 1Gbps 或跨洲高时延时仍可能昂贵。
- 极慢资源可能无效。性能差超过约 100 倍时,慢集群的更新可能反复因陈旧而被拒绝,系统吞吐增加不代表有效优化贡献增加。
- 数据偏差未被自动解决。token 加权处理数量,不保证 non-IID 数据的方向无偏。动态集群必须另行保证 tokenizer、batch 语义、数据 chunk 和去重一致。
- 中心控制仍需可靠基础设施。leader 数据小、可重启,但权限、跨域信任、网络分区和管理系统故障不由算法消除。
- 理论条件有限。收敛界建立在平滑、有界噪声和延迟等假设上;改变 inner/outer optimizer、
H或 penalty 规则要重新验证。
复现时应固定并记录以下项目:模型结构和初始 checkpoint;每集群 TP/PP/DP 拓扑;AdamW 内层学习率 6e−5、batch 32K、默认 H=64;Nesterov 外层学习率 0.7、momentum 0.8 与 FP32 状态;BF16 跨集群传参;α=0.02、β=3、全局范数裁剪阈值 1;每集群累计 token;grace time 的 λ、C_m 估计窗口;异常集合与参数版本;链路带宽、注入 delay 和 follower 数量。对照必须同时实现 DP、同步 DiLoCo 和朴素 Async DiLoCo,并以相同模型、数据、集群内并行和 token 预算比较。
系统复现还需检查三条不容易从最终 loss 看出的不变量:同一次外层更新中所有 followers 使用完全相同的 accepted cluster 集合和 clipping factor;模型 shard、Nesterov shard 与 checkpoint 版本一致;新加入集群先拉完整同版本模型再消费新数据。评估至少报告聚合 token/s、outer communication 累计时间、最终 benchmark、异常更新比例、有效 token、故障检测/恢复时间和各阶段 breakdown。只有这些指标齐全,才能区分“通信跑得快”“更新被大量丢弃”和“真正更快得到同质量模型”。
结论边界:参数服务器和异步 SGD 都是已有机制。Di-PS 针对跨集群两阶段大模型训练,将 leader–follower 分片、控制/数据双流、动态等待、全局异常检测、token 加权、checkpoint 与弹性成员组织成闭环。它适合单集群放不下模型、现有集群性能不同但差距仍可控制、训练周期长且故障频繁的预训练任务。已有单一高带宽同构集群时,或参与者慢到更新几乎总被拒绝时,这套复杂度未必划算。