很多人第一次接触算力预算时会卡住:同样是跑一张卡,为什么训练要排队几周、推理却要按每秒多少钱算;同一块显卡训练时显存爆掉,推理时却能塞下更大的模型。这篇不堆公式,只把两个阶段的目标、吃资源的部位、花钱的方式摆在一起对照,再给一份「你现在到底在做哪件事」的判断清单和排查顺序。想拿具体数字,按文里给的站内路径去核对当时的行情即可。
刚接触算力预算的人常会卡在同一个地方:明明都是跑同一张卡,为什么训练要排队等上几周、按整段卡时结算,推理却是按每秒或每百万 token 来报价;更奇怪的是,同一个模型训练时显存爆掉,换成推理居然能塞进去,甚至还能再开几路并发。这不是错觉,也不是服务商在乱报价,而是训练和推理本来就是两件性质不同的活。
这篇不堆公式,只把两个阶段的目标、吃资源的部位、花钱的方式摆在一起对照,再给一份「你现在到底在做哪件事」的判断清单和排查顺序。具体单价、各家卡的报价、模型规模对应的显存数字,文中一律不给死数,需要的时候按文里标注的站内路径去核对当时的行情即可。
先分清目标:一个在改参数,一个在用参数
训练和推理最根本的差别,是模型本身会不会因为你这一次运行而改变。训练跑完一轮,权重是被改写过的,模型比之前更接近目标;推理跑完一次,权重纹丝不动,只是把输入映射成了输出。这一个字的差别,决定了后面所有资源、成本、优化方向的走向。
- 训练的目标是让权重变好:前向算完还要反向传播、算梯度、更新参数,每一轮都在改模型本身
- 推理的目标是让权重干活:只做前向计算,参数冻结不动,输入什么就吐什么
- 所以训练关心收敛没收敛、泛化好不好,推理关心延迟、吞吐、稳定性和单次成本
- 衡量口径也不同:训练看损失曲线和验证集表现,推理看首字延迟、每秒输出和错误率
算力花在哪:训练是长时间满载,推理是持续轻载
训练一般是要连续跑很久的一段活,中途掉卡、断点、节点故障都直接影响进度,所以对集群稳定性和卡间通信带宽要求很高,宁可慢一点也要稳。推理则是长期在线的活,单次请求算得很快,但一天可能来几万次,真正的压力不在算得慢,而在并发上来之后排不排队、顶不顶得住。
| 维度 | 训练 | 推理 |
|---|---|---|
| 运行时长 | 连续数小时到数周 | 秒级到分钟级,长期在线 |
| 瓶颈位置 | 反向传播、梯度同步、通信带宽 | 显存带宽、KV 缓存、批处理调度 |
| 你在盯什么 | 跑完没有、损失降没降 | 每秒出多少字、并发高了卡不卡 |
| 失败影响 | 中断即浪费整段进度 | 单次失败重试即可,影响面小 |
一个实用的判断方法:如果你每天打开监控看的是「跑完没有、本轮损失多少」,那你做的是训练;如果你看的是「每秒能出多少字、五个人同时用会不会卡」,那你做的是推理。搞错这一步,后面配卡、选实例、算预算全部会歪。
成本结构不一样:一笔是重投入,一笔是细水长流
训练的钱集中在前期,是一次性的重投入:卡时、集群规模、数据准备、反复试错的轮次,钱花出去换的是一次「训练完成」的结果。推理的钱则摊在每一次调用和每一天的在线时长上,单次看上去很便宜,量堆起来总额往往超出预期。两笔账的算法逻辑完全不同。
- 训练账
- 总卡时乘以租赁单价,再乘一个失败重跑系数,系数按你集群稳定性和任务难度估
- 推理账
- 日请求量乘以单次平均 token 数乘以单价,再叠加常驻实例的空闲成本
- 隐藏项
- 训练的存储、数据搬运、重跑损耗;推理的峰值扩容、冷启动、缓存占用的显存
具体单价和换算方式不要凭记忆背,各家卡的租赁价、各家 API 的每 token 报价一直在动。训练侧的成本测算口径可以到 /compute/training-cost 核对,推理侧的按 token 折算和对比到 /tools/model-cost-calculator 按当时的数字算一遍,比自己拍脑袋准得多。
显存吃法不同:训练吃的是状态,推理吃的是缓存和权重
很多人第一次发现「同一个模型推理能跑、训练就爆显存」,就是没搞清显存里装的东西根本不是一回事。训练时显存里同时装着权重、梯度、优化器状态和一大堆中间激活值,几样加起来往往比权重本身大出好几倍;推理时显存主要装权重和 KV 缓存,权重是死的,缓存则是随上下文长度和并发数往上膨胀。
- 训练侧:权重、梯度、优化器状态、激活值四份同时占,缺一份就跑不动
- 推理侧:权重加上 KV 缓存,上下文越长、并发越高,缓存部分越吃显存
- 所以一张卡能推理的模型,未必能拿来训练;反过来也不成立
- 量化能显著省推理的显存,但对训练帮助有限,别指望用低精度把训练塞进小卡
要不要量化、量化到哪一档、上下文最长放到多少,别凭感觉降档,按 /models/deploy 里的测算口径先算一遍目标显存,再决定实例规格。降档降过头,推理质量掉下来是看不出来的,只会在业务侧表现为回答变差。
对照表:你现在手上这件事属于哪一阶段
分不清训练还是推理,通常是因为任务本身就处在一个中间地带。下面这张对照表按「你在做的事情」来分,不按名词分,对着找一行基本就能定位。定位错了,后面配卡、选框架、算预算全都是无效功。
| 你在做的事 | 属于哪一阶段 | 配资源时重点看 |
|---|---|---|
| 改数据集、调学习率、跑多个轮次、看损失曲线 | 训练 | 集群稳定性、卡间带宽、显存余量 |
| 接 API、压测 QPS、调批大小、盯首字延迟 | 推理 | 并发能力、KV 缓存、扩容弹性 |
| 拿现成权重只跑自己的业务数据 | 推理 | 别按训练峰值配卡,按并发和上下文配 |
| 拿现成权重再用自己的数据继续练 | 微调,介于两者之间 | 按 /stacks/fine-tuning 的口径单独算,别套纯推理 |
第三行是最容易花冤枉钱的场景:很多人以为「跑自己的数据」就是训练,于是按训练规模买了一堆卡,结果日常只是在做前向推理,卡的利用率长期很低。第四行则是另一个极端,把微调当纯推理省钱,最后练出来的效果对不上,返工重来反而更贵。
配资源时的检查顺序:先定阶段,再算规模
- 第一步,定阶段训练、微调还是纯推理,先明确一件事。这一步错了后面全错,别跳过。
- 第二步,定模型规模和精度原始权重多大、要不要量化、上下文要放到多长,按 /compute/sizing 过一遍,得出显存底线。
- 第三步,定并发或轮次推理看同时在线人数和平均上下文长度;训练看 batch 大小和总步数,两边估算方式不通用。
- 第四步,留余量再下单推理留出峰值缓存和扩容空间,训练留出重跑和中断的容错空间,不要按理论最小值买。
这个顺序的关键在于不能反:先买卡再想跑什么,是最常见的浪费,也是后面所有成本失控的源头。如果实在拿不准自己的负载属于哪一类,可以先用 /tools/speed-test 之类的小规模压测跑一遍,看真实的延迟和资源占用落在哪个区间,再回来定规格。
优化方向不同:别拿推理的招去救训练
两个阶段的优化目标压根不一样,用错了地方通常只能省下零头,真正的大头还留在原地。推理优化关心的是单次延迟和并发承载,训练优化关心的是吞吐、稳定性和重跑次数。把推理那套手段套到训练上,多半是白费功夫。
| 优化方向 | 训练侧常用 | 推理侧常用 |
|---|---|---|
| 核心目标 | 提高吞吐、减少重跑 | 降低单次延迟、提高并发 |
| 常用手段 | 混合精度、梯度累积、并行策略、断点续训 | 批处理、KV 缓存复用、投机解码、多卡切分 |
| 效果看得见的地方 | 集群利用率、任务完成率 | 首字延迟、每秒输出、单位成本 |
| 别乱用 | 拿量化硬省训练显存 | 拿重跑容错思路堆推理实例 |
判断要不要优化,看两件事:现在的成本里,卡时/实例费占大头还是周边占大头;现在的瓶颈是算得慢还是排队长。两个都指向同一个方向时再动手,否则优化半天,账单结构一点没变。
新手最容易踩的四个坑
这四个坑几乎是入门从业者按顺序踩过去的,提前知道能省不少返工。它们的共同点是:都是把训练和推理的某一边特征,错误地套到了另一边身上。
- 把推理当训练配卡:按训练峰值买卡,日常利用率很低,钱白花
- 把训练当推理省钱:想用低精度省显存去练模型,练出来的效果对不上
- 只算卡钱不算周边:存储、带宽、电费、故障重跑,训练侧占比不小
- 以为同一套环境两边通用:框架、镜像、并行方式差别不小,迁移成本要提前算进去
排查顺序建议从上往下走:先确认阶段有没有搞错,再看显存和精度假设成不成立,最后才去抠单价和优化。顺序反了,容易在单价上抠半天,回头发现是整个阶段定位错了。想横向比一比各家算力和中转站的实时情况,可以到 /price-watch 看追踪记录,再到 /rankings 看当前的整体排序,不过这些都只作参考,最终还是要落回自己的任务类型上判断。
下一步把自己手头这个任务按上面的检查顺序过一遍,确认属于训练、微调还是纯推理,再按对应的口径算一遍预算,比直接看报价单靠谱得多。→常见问题
同一块显卡,为什么训练能跑的模型比推理小得多?
训练时显存里除了权重,还要放梯度、优化器状态和中间激活值,通常是权重的数倍;推理只要放权重和 KV 缓存。所以同卡同模型,训练侧显存压力明显更大。具体倍数随模型结构和精度变化,按站内部署测算页的口径算一遍最稳。
推理是不是永远比训练便宜?
单次看是的,长期不一定。推理单价低但调用次数可能极多,累计成本能反超一次训练。判断方法是把日请求量、单次 token 数和单价乘起来看月度总额,再和训练的一次性投入比,别只比单位价格。
我拿现成模型跑自己的数据,这算训练吗?
不算,这是推理。只要参数没被更新,就是推理。如果你的数据要继续训练权重,那叫微调,显存和算力需求介于训练和纯推理之间,配资源时要单独按微调口径估,不能照搬推理的配置。
量化能同时帮到训练和推理吗?
主要帮推理。量化能把权重压小、显存占用低、吞吐高,对在线服务收益明显。训练侧对数值精度敏感得多,随便降精度容易让模型学不动或效果变差。真要省训练显存,方向是并行策略和梯度累积,不是单纯压位数。
先学哪一边比较好上手?
先学推理。推理只要能加载模型、发出请求、看延迟和显存就够起步,环境要求低、反馈快。等你能说清吞吐和并发怎么算,再去碰训练,理解梯度、轮次和显存状态时的阻力会小很多。