← 返回系列总览
[从零训练一个500B大语言模型] 2/25:到底需要多少张GPU?

[从零训练一个500B大语言模型] 2/25:到底需要多少张GPU?

B200的价格已经抄进表格,数量那一栏却还是空的。要把上一回的选卡变成一张采购单,我还欠自己一个答案:到底买多少台?

一千张可以填,两千张也可以填。可数量一变,价格就跟着跳,而训练什么时候结束,依然说不清。卡数要有来由,得先知道它们一共要干多少活。

我把表格拆成三步:先算500B模型要学多少材料,再算完成这些学习需要多少计算,最后用机器的速度换出时间。这样,买多少卡就能和多久拿到结果放在一起决定。

500B的模型,为什么先安排10T训练量

模型这一栏已经写着500B,也就是训练中要不断调整的5,000亿个数字。这轮先用稠密结构:处理输入时,主要参数都会参与计算。沿着这套结构,工作量可以一层层加起来。

可是,参数量只能告诉我模型有多大。让它读一页和读一座图书馆,显然不是同一笔计算。材料量那一栏也得填上。

训练系统会把文字切成一个个小片段,叫作token。它可能是一个字、一个词,也可能只是词的一部分。这里的1T token,就是一万亿个这样的片段。模型读过的token越多,需要做的计算通常也越多。

为了给这个空格找到起点,我先翻了模型规模与训练量的研究。其中一个常见的起步比例是:训练token数约为参数量的20倍。这个比例来自早期对计算投入怎样分配的研究:在一定训练算力下,模型规模和学习材料之间存在一个相对有效的搭配。

2026年5月的一项扩展规律研究回顾了这个约20倍的经验,也指出,把固定比例直接外推到不同规模和训练条件会有偏差。因此,我们把它用作第一轮设计的起点,后续再用自己的数据和实验调整。

这一轮要先把500B基础模型完整训练出来,评估质量,也看清整套工程能跑到什么程度。我先按20倍安排训练量,把计算写在旁边:

500B × 20 = 10,000B token = 10T token

也就是:5,000亿个参数,安排10万亿token的累计训练量。这里的20倍是一种经验配比,不能理解为每个参数各自阅读20个token。整个模型会共同处理这些材料。

10T填进表格以后,另一种选择也浮出来:再多读一些,会不会更好?要等目标任务上的提升来回答。增加到20T或更多,需要新增计算换来足够的收益。也有项目选择用更小的模型读更多材料,换取日后更低的使用成本。那条路线会重新分配模型和材料的大小。这次先把500B首轮训练算完整,让下一次调整有一个比较起点。

10T解决了工作量的记账,却没有自动变成硬盘里的材料。数据清单还得回答:有多少独立内容,哪些需要重复,重复多少次。同一份材料读两遍,会记两遍训练量,但不一定带来两倍进步。Meta在2026年介绍Muse Spark时,也描述了通过一系列较小模型实验建立扩展规律的做法。我们的实验同样要回答:增加这些材料,究竟能带来多少提升。

现在表里有了两个数字:500B稠密模型,累计读10T token。数量那一栏终于可以往下算了。

读完这些材料,机器一共要算多少次

层:接收上一层的结果、再做一轮处理的计算单元。

训练步骤(step):一轮学习过程,包括读入一批材料、计算预测与误差,再更新参数。

为了把这两个大数写得短一点,我用N记参数量,也就是5,000亿;用D记累计训练量,也就是10万亿token。接下来要把N和D换成机器能够完成的运算次数。

我沿着一次学习过程往下看。模型先算出预测,再根据误差往回找,决定参数怎样调整。前面预测约用2N次运算,后面追溯约用4N次,加起来是6N。让模型累计处理D个token,主要工作量就是6ND。N已经加总了所有层的参数,各层的工作也随之进入了这笔账。

展开推导:为什么是6,模型的每一层又算在哪里?

模型有很多层,每一层当然都要计算。这里的N已经把全模型所有层的参数加在一起。举一个简化例子:假设100层,每层50亿个参数,合计就是 100 × 50亿 = 5,000亿 = 500B。这只是帮助理解的示意,并不是本篇已经确定的模型架构,实际各层的参数量也可以不同。

后面会解释,普通稠密模型处理一个token时,主要训练计算量可以近似按每层参数量的6倍估算。把第1层、第2层一直加到最后一层,就是 6 × 第1层参数量 + 6 × 第2层参数量 + … = 6 × 全模型参数量 = 6N。所以每一层的工作都在账里;N已经包含层数,再乘一次100层就会重复计算。

一次浮点加法或者乘法,计作1 FLOP。比如把两个数相乘,再把结果加到已有的总数里,就计作2 FLOPs。GPU可以把乘和加合成一条指令执行,计算工作量时仍然记2次。一个训练步骤会包含大量这样的运算。

先看模型怎样算出一个结果。把输入分别乘上权重,再加在一起,是神经网络里最常见的计算之一。假设三个输入是2、4、6,对应权重是0.2、0.3、0.5,那么结果就是:

2 × 0.2 + 4 × 0.3 + 6 × 0.5 = 0.4 + 1.2 + 3 = 4.6

这里做了3次乘法、2次加法,一共5次浮点运算。把这个求和放大到成千上万项,乘法和加法的次数就几乎相同。因此估算大规模计算时,通常按每项“乘一次、加一次”,合计2次来计数,忽略每个求和起点少的一次加法。

权重:模型参数中的一类,决定输入对计算结果的影响有多大。

Transformer:这类语言模型常用的结构,每层先联系上下文,再加工得到的表示。层内结构会在架构篇展开。

注意力:模型根据当前内容,选择上下文中哪些信息值得参考的计算。

很多这样的加权求和排在一起,就是矩阵乘法。稠密Transformer的大量计算都发生在这些矩阵里。把主要权重矩阵的工作合起来,处理一个token的前向计算约为2N次。前向就是从输入一路算到预测结果;GPU实际会把许多token打包成矩阵一起处理。

训练还需要知道这次预测错在哪里、哪些参数应该怎样改。这个从结果往前追溯的过程,叫反向传播。对主要的线性计算,它需要再完成两类矩阵乘法。

一类计算权重的梯度,也就是每个权重变化一点,会怎样影响最后的误差;另一类计算输入的梯度,把误差信号继续传给前面的层。它们各自的主要计算量都与前向接近,约为2N。因此反向合计约4N。NVIDIA的线性层指南把这三个计算过程分别列了出来。

于是,处理一个token的主要训练计算量就是:

前向2N + 反向4N ≈ 6N

累计处理D个token,就得到 总计算量 ≈ 6ND。这是已有多年的基础估算方法,2022年Chinchilla论文的计算量附录同时给出了更细的分项计算和6ND近似。它估的是稠密Transformer中占主导的矩阵计算,不要求每个小运算都恰好遵循这个比例。

How layer parameters, forward computation, and backward computation lead to 6ND

图中先把各层参数加成N,再把每个token的前向与反向计算相加,最后乘以累计token数D。100层、每层5B只是示意,各层可以大小不同;公式近似计算主要矩阵运算。

顺着图里的箭头,把这轮计划代进去。先看一个token:

6 × 500,000,000,000 = 3,000,000,000,000次浮点运算

也就是平均每个token约3万亿次。再乘以累计10万亿token:

3,000,000,000,000 × 10,000,000,000,000 = 3 × 10²⁵ 次浮点运算

这就解释了 6 × 500,000,000,000 × 10,000,000,000,000。用科学计数法写,3 × 10¹²乘以1 × 10¹³,前面的数相乘得到3,指数相加得到25,所以结果是3 × 10²⁵。

实际训练还会做更多工作。比如注意力需要计算token之间的关系,文本越长,这部分额外计算越大;为了省显存而重新计算的部分,也没有加进这个基础公式。接下来使用的“有效速度”,统一按6ND这份主要工作量除以实际训练时间来算。因此额外计算、通信和等待花掉的时间都会反映为较低的有效速度,不能再把同一份开销扣一次。

工作量算出来了,下一格要填速度。联想2026年更新的B200规格给出,使用BF16这种16位计算方式时,稠密计算理论峰值为每秒2.25千万亿次,也就是2.25 PFLOP/s。

规格给的是最高速度,训练途中还有搬数据、交换结果和为了省显存而重算的时间。我在工期表里先填每卡1 PFLOP/s,即每秒1千万亿次,写作 1 × 10¹⁵,约为理论峰值的44%。这就是当前排期采用的有效速度;目标500B模型的实测回来后,替换这一格,整张时间表会一起更新。

我先在数量栏试填5,120张,也就是640台八卡服务器。这个规模能把等待结果的时间压到多久?先把所有卡的有效速度加起来。

这640台机器合起来,每秒能够推进的主要计算量是:

5,120 × 1 × 10¹⁵ = 5.12 × 10¹⁸ 次计算/秒

把总工作量除以这个速度,得到秒数:

(3 × 10²⁵) ÷ (5.12 × 10¹⁸) = 5,859,375秒

秒数太长,再按一天86,400秒换成日历:

5,859,375 ÷ 86,400 = 67.8168天

67.8168天看起来已经有了答案,日历里却还少了保存进度、阶段性评估和故障恢复的位置。我给这些训练步骤之外的停顿留下10%的窗口,按90%的时间推进训练来排:

67.8168 ÷ 0.90 ≈ 75.352天

数字变成了约75.4天。日历上圈出76天,留给这一轮主训练;采购、安装、准备数据、前期实验和后训练,再各自排时间。

这笔时间账里,训练步骤内部的通信和等待已经包含在每卡1 PFLOP/s里;额外的10%只安排步骤之外的停顿。如果我们直接测了一整周实际推进多少token,就可以用整周平均速度计算,避免把同一段等待扣两遍。

BF16:用16位存一个数的格式,训练用它来节省存储和计算资源。

FLOP:一次浮点运算,用来计量计算工作量。

FLOP/s:每秒完成的浮点运算次数,用来计量计算速度。

PFLOP/s:每秒10¹⁵次浮点运算,也就是一千万亿次。

理论峰值:硬件规格中列出的最高计算速度。

有效速度:用模型的主要计算工作量除以实际训练时间,得到的平均计算速度。

不同数量的卡,怎样改变训练周期

76天值得等吗?先把数量栏往两边改几次。模型、材料和每张卡的有效速度都保持不动,结果是下面这张表:

GPU数量八卡服务器数量主训练窗口
2,560320台约150.7天
4,096512台约94.2天
5,120640台约75.4天
8,1921,024台约47.1天
10,2401,280台约37.7天

表里每一行都用同一套算法:500B稠密模型、10T token、每卡有效速度1 PFLOP/s,以及90%的训练时间占比。对照着看,5,120张卡的取舍才清楚起来:相比2,560张,主训练窗口缩短约一半;再加到10,240张,还能继续缩短,但服务器和配套资源也要再扩大一倍。我把数量暂定为640台主机,主训练排76天。这样能先把采购与场地计划往前推,扩容带来的时间收益也留在旁边,方便继续比较。

不过,多出来的机器还得彼此配合。卡越多,通信与等待可能越重,每张卡的有效速度也会跟着变化。我把不同规模的实测列入验收:确认加上去的机器究竟换回了多少时间。

为了看清这个风险,又改了一次速度栏。仍然是5,120张卡,每卡只有0.6 PFLOP/s时,约为75.352 ÷ 0.6 ≈ 125.6天;达到1.4时,约为75.352 ÷ 1.4 ≈ 53.8天。如果将10T增加到20T,工作量翻倍,原速度下约为150.7天。

这两次改数也明确了测试的重点:用目标500B模型、预定文本长度和训练设置测速度,同时检查显存、扩容、保存与恢复。76天排期能否成立,最后就看这些结果。

集群:一起工作的多台服务器。

主训练窗口:留给这次大规模学习的日历时间,包含训练及保存、评估和恢复的停顿。采购、安装和数据准备另排时间。

这轮先准备5,120张,主训练服务器约2.93亿美元

数量和工期终于连在一起,我回到第一页的采购表:5,120 ÷ 8 = 640台八卡B200主训练服务器。

2026年10月27日,Exxact的AMD处理器、1,536GB主存配置基础价为443,278美元。我们再选入8张ConnectX-7训练网卡,每张1,815美元,配置器读回的整机价格为457,798美元。八张B200和这八张网卡都已计入,后面不再重复加价。

640 × $457,798 = $292,990,720

2.93亿美元出现在小计栏里。训练要连跑76天,坏机器还需要替换,于是又按3.125%的维修余量,加上20台同配置备用机,总采购变成660台:

660 × $457,798 = $302,146,680

完整服务器采购约3.02亿美元,其中活跃训练5,120张GPU,备用160张,合计5,280张。备用机在故障时替换原训练位置,不把它们算进本篇的训练速度。

现在,640台主训练服务器、20台备用机、500B、10T和76天,终于落在同一张表里。速度或数据方案变化,沿着公式往回改,卡数、工期和资金就能一起更新。

可3.02亿美元买到的只是服务器。把它们搬进哪里,怎样连起来,谁来让它们昼夜运转?采购单下面还空着很长一截。下一篇,要把这段空白补起来。

整机主存:服务器CPU使用的内存。这里的1,536GB指的就是它。

显存:GPU自己的内存。这里的显存已经包含在八张B200的配置里。

新文章,直接发到你的邮箱。

AI、工程与实验,每月 1–2 封。

无垃圾邮件,随时取消。