这周只收一条。
问题先摆出来:为什么 4096 块 GPU 一起跑,速度不是单块的 4096 倍。
简单说,卡在同步。每一步,所有卡都要在同一个屏障前碰头。这批的耗时由最慢的那块定,不由平均速度定。
这叫掉队者问题。一句话讲清楚:掉队者不是坏卡,是慢卡。
这个词不新。Jeff Dean 那批人 2010 年代初用几千台机器训神经网络的时候就在处理它,DistBelief 当年试过异步的路子。十多年过去,硬件快了不知道多少倍,这问题反而更重。
原因不复杂:作业变大了。
一个 4096 块的作业,4095 块都算完了,还得等最后一块。等的时候,下一步不推进。规模小,这是个小麻烦。到了大模型那个量级,它就成了账单。
有个餐厅的比方好懂。八道菜,七道十分钟,一道十四分钟。平均出菜时间是十点五分钟,但只要一起上桌,就是十四分钟。
独立任务看平均,同步批次看最大。这两句值得抄下来。
数据并行的训练步也是这个理。各卡 forward、backward,然后进 all-reduce 那道屏障。单步耗时的近似是「最慢那块的用时,加同步时间」,不是「平均时间加同步时间」。
差别在哪。一块卡慢 5%,未必只拖累系统 5%。它拖的比它自己慢得多。
我自己把那个概率算了一遍。假设单卡一步踩线的概率是 1%。一块卡,无所谓。一百块卡里至少有一块踩线的概率,超过六成。放到 4096 块,基本是必然。p50、p95、p99 排得再好看也没用,你每一步都在采样那条尾巴。
期待的最大值随节点数往上涨。这点挺反直觉:加卡在提算力的同时,也加了你撞上尾部的机会。所以「GPU 翻倍、训练就该翻倍快」这个模型,在同步训练里从一开始就不成立。
算笔账。4096 块卡跑十天,总分配量九十多万个卡时。掉队让有效算力少掉一成,就是九万八千多个卡时没了。按每小时两美元算,十九万六千美元。按五美元算,四十九万多。
钱还不是最贵的。十天变十一天,评估、检查点、微调、下一轮实验、部署,全往后顺一天。这部分机会成本比账单大,只是没人把它记在训练成本那一栏里。
下面是这篇文章里我觉得最值的一段。
今年 OSDI 上有篇研究,作者来自 NYU、字节和浙大,扒了字节某个集群五个月的生产训练 trace。三千多个作业,每个至少用 128 块卡,里面有用几千块的。结果:四成多的作业因为掉队至少慢一成,尾巴上有些作业浪费到四成半的分配资源。
关键在下一条。主要原因不是哪台机器硬件坏了,也不是软件崩了。更常见的是流水线切得不均、序列长度不均衡、GC 停了一下。
序列长度那条单独说。某些 worker 手上的 token 就是更多,它慢得合法。可同步训练不问原因,它照等。
同步这东西不做归因,只做对齐。残忍就在这。
这也解释了为什么这类问题难查。关键路径不只穿过 GPU 上的 kernel,还可能穿过 CPU 上的运行时、内存管理、集合通信、调度器、数据加载、流水线切分。现代大模型训练又是数据并行、流水线并行、张量并行叠在一起,有时还加上下文并行或者专家并行。同步不是一道屏障,是一片屏障网。一个张量并行的 worker 慢下来,能顺着链条把流水线阶段、数据并行副本、梯度同步一层层拖住。
调试的时候,你得知道是哪个 worker、哪次集合通信、哪个并行组、哪个 microbatch、哪个流水线阶段,是计算慢还是通信慢,是持续的还是一下子的。这一串问下来,才知道该动哪里。
缓解的路子,文章给的顺序是:先把活分匀,再找同步的等待,再分清是计算掉队还是通信掉队,再看是持续还是偶发,最后才决定是重平衡、上备用 worker、改调度,还是放松同步。
第一类最根本。流水线怎么划、序列长度怎么分桶、microbatch 怎么造、卡怎么放,这些做在前面,能消掉一批确定性掉队。某个阶段明明更贵,把层挪一挪就可能匀过来。
备用 worker 是另一个方向。一百块卡,只等最快的九十四份结果,最慢的六个不等了。代价是那六份钱照付。同步频繁、卡又贵的场景下,这个权衡不好做。
这条我其实只看懂一半。能保住同步优化的行为,又把最慢那批的影响压下来,这个界限在哪,我还没吃透。先放在这里,搞明白了再补。
还有更狠的一路:直接把慢 worker 的活丢了或者推迟。吞吐会上去,但更新就不再是完全同步 SGD 了。收敛、优化器动态、可复现性、最后的模型质量都可能跟着变。这条路不是系统问题,是算法问题,得另算。
文章把结论压成一句:有效吞吐是 1 除以最慢那个 worker 的时间的期望,再叠上通信和调度开销。
我的版本更白一点。关键路径攥在少数 worker 手里,4096 块卡的集群就不会真给你 4096 块卡的算力。
多数人一辈子不会碰 4096 卡。但同步点决定上限这件事,小规模一样成立。你自己串起来的任何流程,只要有一句是「等所有人齐了再走」,最慢的那一环就是你的速度。
小规模的优化,通常是想办法让平均情况更快。到了超大规模,越来越变成怎么管住尾部。这个转向,比那十九万美元有意思。
本周就这些。
上面有哪条你觉得我讲错了,欢迎告诉我。讲错的我补,没讲清的我改。
下周见。
