最近不少做算法岗的朋友都在准备大模型方向的面试,我翻了下手头的面试复盘记录,出现频率相当高的一道题就是:pretrain阶段和test阶段的scaling law资源分配策略,区别到底是什么。这道题看起来是在问scaling law,但很多人只背下了"参数越大、数据越多、损失越低"这条口诀,真被问到"资源到底怎么分"就卡住了,要么把训练阶段的结论硬套到推理阶段,要么只谈一个阶段完全忘了另一个。这篇文章就把这道题的完整框架拆开讲清楚——训练时算力如何在参数量和数据量之间分配,测试/推理时算力又如何受延迟、吞吐和带宽约束,两者背后的目标函数有什么本质差异,以及面试官真正想听到的答题层次。
先说结论:训练阶段的资源分配是一个科学曲线拟合问题,核心度量是最终loss;测试/推理阶段的资源分配是一个服务经济学问题,核心度量是单位请求的成本、延迟和吞吐。目标函数不同,瓶颈不同,最优策略自然完全不同。
1. 这道题在考什么:训练和测试的算力分配根本不是同一个问题
1.1 为什么它经常出现在大模型岗位面试里
面试官出这道题,表面上是考scaling law的公式记忆,实际上是在考察三个更深的东西。
第一,候选人是否理解scaling law的适用边界。scaling law描述的是"给定训练算力预算,模型损失如何随规模增长而下降",它对训练阶段有效,但当你进入测试或推理阶段,决定资源分配的不再是这条损失曲线,而是另一套规律。能主动指出这个边界的人,说明不是只会背结论。
第二,候选人是否分得清"资源"在不同阶段指代什么。训练阶段的资源主要是总算力FLOPs、GPU数量和训练时长,决策变量是模型参数量N和训练数据量D;测试/推理阶段的资源是显存容量、显存带宽、批处理大小和延迟预算,你没法像训练那样用"把N翻倍"来换取更低的错误率,因为你还要面对线上流量和成本。
第三,候选人有没有成本意识。大模型从研发到上线的完整生命周期里,训练成本高但阶段化,推理成本低但持续发生。一个模型如果训练阶段做到了理论上的"算力最优",但推理阶段因为模型太大导致单次请求成本居高不下,整体账未必划算。面试官想从答案里看到这种全局权衡。
1.2 面试官埋的三个坑
这道题能拉开差距,通常是因为它有三个明显的坑。
第一个坑:把"更大模型"直接等同于"更好系统"。训练阶段你可能追求一个损失更低的模型,但到了测试/推理阶段,模型质量只是约束条件之一,延迟、成本、吞吐量同样重要,而且往往是硬约束。
第二个坑:混淆"模型评估"和"在线推理"。测试阶段如果只是离线评估,资源分配问题相对简单——跑一批测试集拿指标就行,成本有限。但面试题里的test阶段通常指的是训练完成后进入部署和服务阶段,这时每个token都要重新计算,资源消耗变成"按请求次数计费",问题性质就变了。
第三个坑:只谈"资源"不谈"策略"。很多候选人能说出训练需要多少FLOPs、推理需要多少显存,但说不清楚在有限预算下"我该把多一点算力花在哪里"。题目里明确写了"资源分配策略",说明面试官要的是决策逻辑,不只是静态的数字。
想通这三点,就能理解为什么一道关于scaling law的题,最后考察的其实是系统级的设计思维。接下来我们先把训练阶段这套逻辑搞清楚。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 训练阶段的scaling law:算力预算在参数和数据之间的最优分配
2.1 损失下降的幂律特征与预算守恒
训练阶段的scaling law核心是三个变量之间的关系:模型参数量N、训练数据token数D、总算力C。业界有一个非常实用的近似等式,一直被用来做训练成本估算:
C ≈ 6 × N × D
这个6从哪来的?一次完整训练包含前向和反向两个阶段:前向每个参数约2次浮点运算,反向因为要算梯度和更新参数,约4次浮点运算,加起来每token每参数约6次FLOPs。所以给定模型规模N,想训D个token,总计算量基本是6ND。这个公式的意义在于,它把资源分配问题变成了一个守恒问题——算力预算C是固定的,你多分一点给N,D就必然少一些,反之亦然。
在这个守恒式下,scaling law揭示了一个关键观察:模型的最终损失L与N、D之间是幂律关系,即L随N或D增加按幂次递减,但边际收益越来越小。换句话说,算力预算不变时,不存在"既能扩大模型又能增加数据"的自由午餐,永远要在两者之间做选择。
2.2 最优配比:模型参数量和数据量要一起长大
那问题就来了:给定固定预算C,参数和数据到底按什么比例分配才算最优?
比较早期的观点偏重"模型优先":在数据量看起来足够大的情况下,多花算力扩大参数量,损失下降更快,所以N的增长指数比D大。这种思路下,同样预算下你会倾向于把N推得很大,数据就着用。
但后续更系统的实证研究推翻了这个偏重,指出了关键的盲区——当时很多模型的实际训练数据量远小于"计算最优所需的数据量"。如果只扩参数不扩数据,模型很快会在同一个epoch里反复看过量重复数据,损失曲线尾部明显变平,相当于大量算力烧在低价值上。同一预算下,参数和数据按近似相同的速率一起增长,才是更稳的最优分配。
我用一个具体比例说明。假设总预算C固定,把算力全花在扩参数上,让N翻倍、D不变,与让N和D各增加约40%相比,后者往往能拿到更低的最终损失。原因在于损失函数的敏感度对N和D是接近均衡的——补足数据的短板,比继续堆高一个已经不那么稀缺的参数维度更划算。用一句话概括:模型和数据是"共同增长"的关系,哪边瘸腿,损失就卡在哪条幂律曲线的平台期。
2.3 配比失衡时会发生什么
把配比失衡导致的现象记住,面试中能体现你真的做过训练,而不只是看了公式。
如果数据不足(D偏小),典型表现是训练后期loss曲线走平,验证集loss和训练集loss之间的gap很快拉开,这时候再怎么加算力都不起作用,因为模型已经把有限数据的规律吸收完了。
如果参数不足(N偏小),典型表现是模型容量不够,即使数据再多,loss也会卡在一个偏高的水平降不下去,训练曲线从头到尾都缺乏"陡峭下降"的节奏。
所以训练阶段的资源分配策略,可以归纳为一个决策流程:
- 根据总预算C,用C≈6ND确定可行的N-D组合边界;
- 按"参数与数据等速扩展"的基准选择初始配比;
- 小规模消融实验验证:固定C的情况下,分别略偏向N和略偏向D,看哪个方向loss降得更多;
- 批量大小、学习率调度等超参数再随N和D同步调整。
这套逻辑对训练阶段基本够用了。但一旦模型训练完进入测试和服务,资源分配的底层逻辑就换了另一套,下面细说。
3. 测试阶段的资源分配:从"最小化损失"切换到"服务经济账"
3.1 先厘清概念:这里说的test到底是什么
面试里提到test阶段,很多候选人下意识理解成"跑一遍测试集看准确率",于是觉得资源分配没什么好聊的。这是对题目理解不到位的地方。
在真实业务里,"test阶段"通常包含两条线:一条是离线评估,拿一批标注数据跑指标,成本可控、一次性;另一条是上线后的推理服务,每个用户请求都要实时生成token,这部分的资源消耗是持续的、按流量线性增长的。面试官在这道题里说的资源分配,重心显然在后一条线上,因为离线评估谈不上"策略",在线推理才需要精心设计资源分配方案。
所以下面的讨论都默认"test阶段=推理部署阶段",核心目标是:在满足延迟和吞吐要求的前提下,让单次请求的成本尽量低。
3.2 token级成本分析:为什么推理是"带宽饥饿"型任务
推理阶段和训练阶段最大的差异,在于它的资源瓶颈不是"总算力",而是显存带宽。我们来算一笔账就能看清楚。
假设你有一个70B参数量的模型,权重用fp16存储,一次完整前向需要读取约140GB的权重数据。生成一个token,原则上只需要做一次矩阵向量乘,浮点运算量大约是2N,也就是约140G FLOPs。
现在把这两个数放在一起,算一个关键指标——算术强度(Arithmetic Intensity):
算术强度 = 浮点运算量 / 数据搬运量 ≈ 140G FLOPs / 140GB ≈ 1 FLOP/Byte
而主流加速卡的理论峰值通常在几十到上百FLOP/Byte的量级。这意味着推理生成token时,加速卡的计算单元大部分时间在等数据从显存搬过来,整个流程被数据搬运速度卡住。你加再多的计算核心也没用,瓶颈在带宽。
这就是为什么推理阶段的资源分配策略,第一条原则是想方设法减少权重搬运量——量化(把fp16压到int8或int4)、模型剪枝、蒸馏出小模型,本质上都是在削减那个140GB的数字。跟训练阶段"增加算力就能加速"完全是两回事。
3.3 有限显存下的分配策略:权重、KV缓存和批量之间的博弈
真正进入线上服务时,显存分配是更现实的问题。一块主流训练卡的显存通常就80GB量级,70B模型fp16权重已经放不下,必须量化或张量并行切分。但权重不是唯一占显存的,还有两样东西会动态增长:KV缓存和激活值。
KV缓存按序列长度和并发请求数线性增长,公式大约是每层每token两个矩阵各存一份。用70B模型举例,假设40个层、每层隐藏维度约8000,那么每个token的KV缓存大约需要2MB左右,一个2000token的请求就要吃掉约4GB。并发请求一多,KV缓存的显存占用很快超过权重。这就是为什么推理系统里经常看到"动态批处理"和"KV缓存复用"这两个优化方向——它们争夺的其实是同一块显存资源。
延迟约束会把问题变得更复杂。推理服务通常有服务质量约定,比如首token延迟和每个token的生成间隔都有上限。为了摊薄权重读取成本,你希望batch尽量大,让多个请求共享同一次权重搬运;但batch越大,KV缓存占用越高,延迟也会上升。资源分配策略就是在这个三角约束里找平衡点:
- 请求量低时,优先保证延迟,batch宁可小;
- 请求量高时,把batch推到延迟容忍的上限,尽量摊薄成本;
- 遇到超长上下文,果断用KV缓存压缩或局部注意力,省下显存换更大的batch;
- 模型权重能量化就量化,省出的显存全部投给KV缓存或batch容量。
有个生活化的类比:训练阶段像组织一次大型排练,人员成本按"总排练天数"算,你可以反复打磨动作直到整体最优;推理阶段像每天开一场演出,每场都要全员到场按流程演一遍,门票时间还卡死不能超时,所以你天天琢磨怎么减员、怎么让一场服务更多观众。这个类比在面试里用出来,能让面试官迅速确认你是真的理解了两种阶段的不同。
4. 四个维度拆开对比:目标、瓶颈、曲线形状和决策变量
训练和推理的资源分配差异,可以用下面这张表一次看清。这张表在面试时可以直接作为答题骨架。
| 对比维度 | 训练阶段 | 测试/推理阶段 |
|---|---|---|
| 核心目标 | 最小化最终损失 | 延迟达标前提下最大化吞吐、最小化单位成本 |
| 决策变量 | 模型参数量N、训练数据量D | 模型规模、量化等级、batch大小、KV缓存策略 |
| 主要瓶颈 | 总算力FLOPs、训练墙钟时间 | 显存带宽、显存容量、延迟预算 |
| 资源消耗模式 | 阶段突发,投入集中 | 持续发生,随流量线性增长 |
| 收益曲线 | 平滑幂律下降,边际递减 | 质量提升常表现为阶梯式跳变 |
| 扩展节奏 | 参数与数据同步加,追求计算最优 | 模型够用就好,把算力花在服务和优化上 |
| 失败代价 | 训练失败可重跑,最多浪费算力 | 单次请求超时直接流失用户 |
4.1 目标函数不同:评估损失与单位请求利润
训练阶段的优化目标是"把loss压得越低越好"。这是一个纯粹的模型质量指标,你可以为了提高0.1的指标多烧几百万算力,因为评估的是模型能力上限。
推理阶段的优化目标则是"单位请求成本与整体吞吐"。模型质量变成了一个约束条件而不是目标函数:你不能无限地提升质量,因为每提升一点,通常都对应权重变大或计算变多,单次请求的成本和延迟就会上升。很多团队最后选用什么规模的模型,不是由"哪个模型分最高"决定的,而是由"哪个模型在预算内分最高"决定的。
4.2 瓶颈资源不同:训练看总算力,推理看带宽显存
这一点前面已经详细算了账。训练是计算密集型的,加卡、加算力,训练时间基本能线性压下来;推理是数据搬运密集型的,瓶颈在权重读取和KV缓存容量,单纯的算力提升帮助很有限,这也是为什么量化、投机采样这类"减少读取量"的技术在推理阶段如此重要。
4.3 收益曲线形态不同:平滑外推与阶梯跳变
训练阶段,损失随规模增长的变化是一条相当平滑的幂律曲线,你可以根据小规模实验的结果外推大模型的表现,这也是scaling law在训练阶段最有价值的应用——用小算力预算预估大算力结果。
推理阶段的质量收益往往不是平滑的。在某些任务上,小模型表现平平,但规模跨过一个阈值后突然出现明显提升;在另一些任务上,模型再大也没有用,反而是多次采样、投票、验证这类"推理时多花算力"的方法带来突破。这意味着推理阶段的资源分配不能依赖简单的"规模越大越好"公式,你必须针对具体任务找那个"性价比拐点"。
4.4 决策粒度不同:一次决策与持续在线决策
训练阶段的资源分配是一次性的:开跑前决定N和D,整个训练周期内基本不变,最多调整学习率。推理阶段的资源分配是持续性的:流量高峰要动态提高batch、低谷期要缩减资源,新版本的量化模型灰度上线要逐步切换,甚至每个请求都要根据输入长度决定要不要截断或压缩上下文。策略需要随时在线调整,这比训练阶段的规划能力要求高得多。
5. 除了背诵结论,面试还希望听到的延伸话题
5.1 推理阶段的计算扩展:算力也可以花在"解题过程"上
这道题的最新加分项,是主动谈到"推理阶段本身也有scaling law"。
传统思路里,模型训练完,推理阶段的算力消耗是固定的——输入进来,模型跑一遍,输出出去。但现在的趋势是,可以在推理阶段动态分配更多计算量来换取更好的结果。典型例子包括:让模型生成多个候选答案再投票、让模型对自己的推理过程分步验证、在决策空间里做树搜索并回溯。这些做法共同的特点是,模型参数量不变,但单个请求消耗的FLOPs可能翻几倍甚至几十倍。
这就出现了很有意思的再平衡问题:同样一块算力,花在预训练上把模型变大一点,和花在推理时让模型多想一会,哪个对最终质量的提升更明显?答案是因任务而异的。简单任务可能推理时多想一步就够了,复杂推理任务则可能需要大量验证分支。所以现在的资源分配策略已经不是"训练阶段分好就完事",而是要在预训练算力和推理时算力之间做动态权衡。能在面试里主动提出这一层,基本就能跟其他只会背公式的候选人拉开明显差距。
5.2 训练算力与推理算力的长期配比
另一个值得准备的延伸方向是总量配比。一个模型从研发到上线,训练成本集中在前期,但推理成本在用户量起来后每天都在发生。有团队做过粗略估算:当线上日请求量达到一定规模,推理累计消耗的算力会在几个月内超过训练成本。这意味着如果只按"训练阶段最优"来选模型,后续服务的资源开销可能会吃掉所有收益。
从这个角度看,训练阶段的模型选型其实也应该"向后看":模型规模的选择要考虑推理服务的成本模型,而不是只看训练loss。有人把这种思路总结为"预算约束从服务端反推训练端",这也是资源分配策略在前后两个阶段最深刻的联动。
5.3 面试追问清单与答题组织策略
最后整理一下面试官在这道题后面大概率会接着问的追问,以及对应的回答思路:
追问1:如果只给你加一倍的推理预算,你会花在哪?
不要直接说"换更大的模型"。先拆预算:优先看延迟是否达标,再看显存瓶颈在哪。如果带宽受限,把预算花在量化和优化batch策略上;如果质量不达标,先试推理时多次采样,再考虑升级模型。重点是给出一套决策顺序。
追问2:线上服务延迟超出预期,你怎么调整资源分配?
标准回答路径:先定位是权重读取慢还是KV缓存占用过高,然后分别对应量化、批处理调整、缓存复用等方案。注意强调"先诊断再优化",不要上来就改模型。
追问3:训练阶段的最优配比结论能直接用到推理阶段吗?
明确说不能。训练阶段追求的是N和D共同增长、loss平滑下降;推理阶段追求的是给定延迟和显存约束下的成本最优,模型规模要"够用就好",还要考虑带宽和KV缓存的非线性影响。
答题组织策略,我建议用"一分三比"结构:先定义清楚两个阶段的边界;再对比目标、瓶颈、收益曲线三个维度;最后讲联动——训练阶段的模型选型如何影响推理阶段成本,以及推理时计算扩展如何反向影响训练预算分配。
6. 一点个人经验
这道题我在帮团队做技术评审和模拟面试时见过太多次,其实很少有候选人能一次答完整。最常见的欠缺是把训练阶段的scaling law讲得很细,对推理阶段只有零散概念;反过来,做推理优化的候选人又讲不清楚训练阶段的算力配比。能把两边串起来、并且落到"目标-瓶颈-策略"这个框架上的人,基本就是高优先级通过。
如果正在准备面试,建议不要死记公式,自己动手算一遍:拿一个几十B参数的模型,分别估算训练阶段的总FLOPs和推理阶段单token的带宽瓶颈,再对比不同配比下训练loss的表现。算过一遍之后,你会真正理解为什么这道题能筛掉很多人——它考的不是知识量,而是能不能站在系统全局分配稀缺资源的判断力。
