很多人手上只有一张消费级卡,想拿 0.5B 这种小模型练手或做垂类微调,第一反应是「这么小应该随便跑吧」,结果一开训就 OOM。问题不在参数量,而在训练比推理多背了好几份显存。这篇不给你一个死数字,而是给一套按精度、批次、序列长度自己算的方法,再告诉你算完该去哪核对,以及什么情况下这套算法会失效。
不少人手上只有一张消费级卡,想拿 0.5B 这种小模型练手或者做垂类微调,第一反应是「参数这么少,随便跑吧」,结果一开训就 OOM,进度条还没动几次就挂了。问题真不在参数量小,而在训练比推理多背了好几份显存:推理时大部分中间量用完就扔,训练时这些量还得留着算反向传播。
这篇不打算给你一个死数字,那种数字换个序列长度就作废。给你的是一套能自己套的估算顺序,按精度、批次、序列长度把四块显存拆开算,再告诉你算完去哪儿核对当时的价格和机型,最后说明什么情况下这套算法会失灵。
先搞清训练为什么比推理吃显存
推理阶段基本只需要常驻一份权重,加上 KV 缓存和临时张量,用完就释放。训练不一样,同一个参数在显存里至少躺三份:参与前向的权重、反向算出来的梯度、优化器维护的状态量。所以同一参数量下,训练显存常见是推理的数倍,这个倍数是估算的起点。
- 优化器是隐形大户:全量微调时,优化器往往要为每个可训练参数额外保存不止一份状态,混合精度下还得留一份主权重;
- 激活值随批次大小和序列长度往上走,这部分经常才是压死显存的稻草,而不是参数量本身;
- 框架本身还要吃一部分固定开销,显存碎片也会让实际占用比理论值高;
- 所以「0.5B 很小」只说明第一块小,后三块照样能把你顶爆。
0.5B 训练显存的四块拆法与算法
按固定顺序估四块:模型权重、梯度、优化器状态、激活值。前两块直接按精度乘参数量就能目测,别一上来就纠结激活值,先把能算的算清楚,剩下的用手感补。
| 显存块 | 怎么估 | 变动因素 |
|---|---|---|
| 模型权重 | 参数量 × 每参数字节数 | 精度,半精度比全精度省一半 |
| 梯度 | 通常约等于权重那一份 | 是否只训部分参数 |
| 优化器状态 | 参数量 × 优化器倍数 | 全量微调远高于参数高效微调 |
| 激活值 | 按批次、序列长度、层数大致线性 | 最难手算,先取最小值试 |
- 参数高效微调
- 只训一小部分新增参数,原模型冻住,优化器状态量级直接塌下来。
- 梯度检查点
- 前向中间结果不存,反向时重算,用时间换显存。
- 等效批次
- 单卡放不下大批次时,用梯度累积几步凑出同样的更新效果。
显存不够时按这个顺序降
算完发现超了,不要乱调参数。按代价从低到高依次试,前面几步几乎不损失效果,只影响训练速度,硬件是最后才动的一档。
- 降批次配梯度累积把单卡批次压到最小,再用梯度累积把等效批次凑回来,跑几个 step 看显存是否稳定不涨。
- 换参数高效微调切到 LoRA 一类只训少量参数的方法,优化器状态那一块基本消失,是最有效的一刀。
- 开梯度检查点上面还不够再开,显存会明显下来,代价是每步更慢,值不值得看你的时间预算。
- 换卡或租卡前三步都做完还不够,才考虑上更大显存或者按小时租卡,先到站内机型页面看当时的配置和行情。
这套算法什么时候不适用
任何手算公式都有边界,下面几种情况误差会大到不能按经验比例套,最好实测或者直接放宽预算,别拿一个估算结果去卡硬件采购。
- 序列长度拉得很长,或者做的是多模态训练,激活值占比会远超经验比例,手算基本失准;
- 用了 DeepSpeed、FSDP 这类切分方案后,单卡占用取决于切分策略和卡数,不能按单卡公式套;
- 框架版本、算子实现、是否真开混合精度都会改数字,同一份配置换个环境结果可能就不一样;
- 所以估算只用来做第一轮筛选,最终以实际跑起来那几个 step 的显存峰值为准。
想把这个判断落到具体机型上,可以先去站内模型与价格资料库看当时各家 API 的价格和模型资料,再到中转站导航对比可信度和计费方式,最后用速度测试看延迟是否稳定。数字会变,判断顺序不变。
下一步估完显存再决定是自建还是用 API,去模型价格页和机型页面核对当时的数字,比拍脑袋省钱也更稳。→常见问题
0.5B 模型训练,一张 8G 卡够不够?
不能一句话给死。关键看你走全量微调还是 LoRA、批次和序列长度开多大。走 LoRA、小批次短序列,8G 量级有戏;全量微调基本不够。建议按上面四块先粗算一遍,再拿最小配置实跑一轮看真实占用。
为什么我按参数量算完,实际显存还是超了?
最常见的原因是只算了权重和优化器,漏了激活值,而激活值恰恰随批次和序列长度涨得最快。其次是没留框架开销和碎片余量。把批次调到 1、序列长度压到最短再试一轮,就能看出激活值占了多少。
LoRA 微调和全量微调,显存差在哪?
差在梯度和优化器状态这两块。全量微调要为全部参数存梯度和优化器状态;LoRA 只训一小部分低秩参数,这两块跟着一起缩水,权重那份不变。所以模型越小,两者差距的绝对量越小,但比例上依然是量级差。