32 TB 的行李:训练一个两万亿参数的模型,卡在哪
两万亿参数听起来是个天文数字,工程上它先是一道很具体的算术题。
一个参数在训练时要占多少显存?不是两字节,是十六字节。拆开看:BF16 的权重两字节,BF16 的梯度两字节,FP32 的主权重副本四字节,Adam 优化器的动量四字节,方差再四字节。混在一起,每个参数背着十六字节的行李。两万亿参数乘上去,32 TB。
一张 H100 的显存是 80 GB。光把行李放进去,就要四百张卡——这还没算激活值,没算通信缓冲区,没算任何一道计算。所以训练大模型的第一课不是算法,是搬家:怎么把这 32 TB 拆开、分掉、需要的时候再拼回来。
第一道坎:内存
ZeRO 是第一把刀。 它的全名是零冗余优化器,思路直白:那十六字节的行李其实不必每张卡都背一份。优化器状态只占总数的一半,就按卡数切成片,每张卡只存自己那一片;梯度也可以这样切;最激进的版本连参数本身都切片,要用的时候临时聚拢。三种切法叠加,内存占用可以压掉一个数量级以上——代价是通信变多,本来看不见的带宽现在成了主角。
梯度检查点是第二把刀。 神经网络前向计算时会留下大量中间结果,留给反向传播用。层数一深,这些激活比权重本身还占地方。检查点的做法是只在层与层之间存一个摘要,反向传播时把这一层重新算一遍。用计算换内存,训练慢大约三成,换来的是激活内存从随深度线性膨胀变成几乎不动。
FlashAttention 是第三把刀,也是最深的一刀。 注意力机制有个平方律:序列长度翻倍,中间结果翻四倍。FlashAttention 的做法来自一个硬件观察——GPU 上有两级显存,主显存(HBM)大而慢,片上缓存(SRAM)小而快。A100 上 SRAM 只有 20 MB,带宽却是主显存的十几倍。那就把序列切成小块,搬进 SRAM 里算完再搬出来,softmax 的分母在块间逐步重缩放,全程不碰那个平方级的大矩阵。激活内存从此随序列长度线性增长,后来百万 token 的上下文能训起来,这一刀是前提。
第二道坎:计算
多卡训练的经典操作叫环全归约:每张卡算出自己的梯度,沿一个环状的拓扑两两交换,转两圈之后每张卡都拿到全体梯度的平均值。数学上干净,问题是它只对准同步这条路。
梯度平均之后有个微妙现象:批量大到某个临界值之后,再往上加,损失下降的效率不升反降——这是临界批量大小。想要超临界的大批量训练,普通 Adam 会失稳,LAMB 优化器给每层参数按自己的可信度分层设定步长,把临界点往上推了一个数量级。GPT-3 之前的工程,一半是在跟这个临界点打交道。
再往后是精度。BF16 用七位尾数换掉了 FP32 的二十二位,乘法快一倍,动态范围还守得住;FP8 更进一步,训练 DeepSeek-V3 时被推到了主力位置——那套方案的每个矩阵乘法都围着细粒度的缩放因子转,数值才能不塌。精度每降一档,同样的卡就多算一截,前提是你肯为数值稳定性做工程。
第三道坎:网络
四百张卡放不下一个模型,就得讨论它们怎么连。节点内靠 NVLink,H100 上一张卡 900 GB/s;张量并行把一个大矩阵乘切成小块分给邻居,序列并行把长序列切段分给邻居——这两个都要求邻居之间高频通信,所以必须住在同一台机器里。节点间带宽骤降一个数量级,于是用流水线并行:把模型按层切成段,段与段之间只传一次激活。1F1B 调度让正向传一块、反向收一块,把流水线的空泡填掉大半;交错式流水线再把每段切小、轮着喂,填得更满。
两条路线的分岔在 MoE 上看得最清楚。Llama 3 405B 走稠密路线,16,384 张 H100,四维并行全开,每张卡都被喂到最饱。DeepSeek-V3 是 671B 总参数、激活 37B 的稀疏模型,只用 2,048 张 H800——卡更少、单卡更弱、卡间带宽还被砍过。它的解法是几乎放弃张量并行,把通信大头换成专家并行加 DualPipe 流水线,让「卡间通信便宜」这个假设从头到尾成立。同一个万亿级问题,两种答案:一种假设带宽管够,一种假设带宽是奢侈品。硬件假设不同,架构就长得完全不一样。
然后是账单和故障
训练成本可以用 Chinchilla 法则粗算。按每个参数喂二十个 token 的配比,两万亿参数对应四十万亿 token;每个 token 的训练算力约为参数量乘六,总账约 4.8×10²⁶ FLOPs。一张 H100 按四成的有效利用率折算,全跑下来约三亿卡时。云租价按两美元一小时折算,六亿美元出头,加上存储、网络、冗余和电费,七点五亿美元是这个账的合理读数。这个数字买来的不是模型本身,是模型加一整条供应链的工程。
真实的训练日志长什么样?Llama 3 405B 的 54 天预训练里,16,384 张卡遭遇了 419 次意外中断——平均不到三小时一次。其中 58.7% 与 GPU 相关(含 HBM3 显存故障),CPU 在整个 54 天里只挂了两次。训练靠两件事活下来:每张 H100 都配了热备卡,坏了直接顶替,不用等人搬机器;checkpoint 自动回滚,恢复不靠运维半夜爬起来。一万六千张卡是一个统计系统,坏卡不是事故,是日常——容错不是训练系统的一个模块,是训练系统本身。
往前看
两个方向在收尾处汇合。向上,GB200 NVL72 把「节点内」重新定义成整个机架:72 张 Blackwell 通过第五代 NVLink 连成一个域,单卡 1.8 TB/s,整个机架的聚合带宽 130 TB/s——原来要跨节点忍的带宽悬崖,被一台机架内部的铜线抹平了一截。向外,DiLoCo 反着来:每五百步才同步一次参数,配合本地优化,DeepMind 的论文测得通信量比全同步训练少五百倍,而效果打平——8 个互不相连的算力孤岛可以被当成一台机器训练,今年四月升级出的解耦版开始把这条路线推向跨大洲的数据中心。
一个把网做粗,一个把话变少。硬件感知协同设计这句话,翻译过来就是:先看清网有多贵,再决定架构长什么样。32 TB 的行李没有变小,只是打包的人越来越清楚,每一层行李该由谁来背、多久搬一次。
讨论回复
加载中...正在加载回复...
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。