本文为Ai大模型训练教程系列文章,详解训练大模型需要多少显存与多少钱:从参数相关显存(12 bytes/param)与ZeRO分摊,到序列长度带来的激活开销,再用6×P×Tokens估算训练FLOPs、时长与GPU费用,并给出7B/13B/70B示例与LoRA/QLoRA降本建议。
训练一套大模型要多少显存与多少钱:按参数量与序列长度估算成本
在做“Ai大模型训练教程”系列的实战落地时,最容易被问到的问题不是“用什么框架”,而是更现实的:训练一套大模型到底要多少显存、要花多少钱?
大模型训练成本的核心由三件事决定:
- 参数量 P(模型有多大)
- 序列长度 L(上下文有多长)
- 训练策略与硬件(全量微调/LoRA、ZeRO、张量并行、GPU 型号与单价等)
本文给出一套可复用的估算方法:从“显存怎么拆账”到“算出大概需要多少张卡、训练多久、最终多少钱”。你可以把它当作预算评审、算力采购、项目排期的计算模板。
1. 先明确:你要估算的是哪种“训练”?
不同训练方式的显存与成本差距极大,先把场景说清楚:
- 预训练(Pretrain):从零在海量语料上训练,成本最高。
- 继续预训练(Continue pretrain):在既有模型上补充领域语料,成本中等偏高。
- 指令微调(SFT,全量微调):对全参数更新,显存压力大。
- 参数高效微调(LoRA/QLoRA):只更新少量参数,显存与成本大幅下降。
本文的估算主要围绕“Transformer 类大模型的全量训练/全量微调”,并在后面给出 LoRA/QLoRA 的降本对比。
2. 显存由哪些部分组成:一张卡上到底装了什么
训练时单卡显存通常由四大块构成:
- 模型参数(Parameters):权重本身
- 梯度(Gradients):反向传播产生的梯度
- 优化器状态(Optimizer states):例如 Adam 的一阶/二阶动量
- 激活值(Activations):前向过程中中间结果,为反向用
在工程估算中,最常用的经验拆分是:
FP16/BF16 全量训练 + Adam:
- 参数:2 bytes/param
- 梯度:2 bytes/param
- Adam 状态:通常 8 bytes/param(m、v 各 4 bytes,若为 FP32)
合计约:
参数相关显存 ≈ 12 bytes × P
其中 P 是参数个数(例如 7B = 7×10^9)。
激活值则与 batch、序列长度、层数、隐藏维度等相关,是另一笔大账。
3. 用“按参数量”的方式估算:最粗但最好用
3.1 不考虑激活与并行:参数相关显存下限
如果你只想快速知道“这个模型理论上得多大显存才训练得动”,先看参数相关显存:
- 7B:12×7e9 bytes ≈ 84e9 bytes ≈ 78.2 GiB
- 13B:≈ 145 GiB
- 30B:≈ 335 GiB
- 70B:≈ 782 GiB
这还没算激活、框架开销、通信 buffer、KV cache(训练一般不算 KV cache 的推理形态,但仍有注意力相关缓存/临时张量)。因此实际需要更高。
结论:
- 7B 全量训练,单卡 80GB 也可能吃紧,通常需要多卡 + ZeRO/并行。
- 13B/30B/70B 全量训练,基本不可能靠“单机单卡/少卡”硬扛。
3.2 引入 ZeRO:参数相关显存可以被“分摊”
以 DeepSpeed ZeRO 为例(简化理解):
- ZeRO-1:分摊优化器状态(最重的一块)
- ZeRO-2:再分摊梯度
- ZeRO-3:连参数也分摊(但通信更频繁)
如果你有 N 张卡,参数相关显存大致可被分到 1/N(不同 stage 不同)。用最乐观的 ZeRO-3 粗估:
参数相关显存/卡 ≈ (12 bytes × P) / N
例如 70B,在 8 卡上:约 782/8 ≈ 97.8 GiB/卡(仍可能吃紧);在 16 卡:≈ 48.9 GiB/卡(才开始有空间留给激活)。
这解释了为什么 70B 全量训练常见配置是 16×80GB 甚至更高。
4. 序列长度 L 如何影响显存:激活与注意力是大头
参数相关显存与 L 无关,但激活显存强相关。
4.1 激活显存的直觉公式
在训练 Transformer 时,激活大致随以下因素线性或超线性增长:
- batch size(更准确是 micro-batch)
- 序列长度 L
- 层数
- 隐藏维度
注意力部分还会出现与 L 相关的中间矩阵(例如 attention scores),在未优化时可接近 O(L^2) 级别的临时开销。
工程上常用的结论:
- L 从 2048 提到 4096:激活显存往往接近 翻倍,甚至更高(因注意力实现与 checkpoint 策略不同)。
- L 从 4096 提到 8192:很多配置会从“能训”直接变成“爆显存”,除非采用 FlashAttention、激活重计算、序列并行等。
4.2 三个必须用的手段(不然长上下文训练很难落地)
- FlashAttention / xFormers:降低注意力的显存与带宽开销
- Activation Checkpointing(重计算):用算力换显存,激活显存显著下降
- Gradient Accumulation(梯度累积):用更多 step 换更小的 micro-batch
如果你的目标是 8k/16k 上下文,基本需要把这三件事当作标配。
5. 从“显存”到“需要几张卡”:一个可执行的估算流程
下面给出一个你可以直接照抄到项目预算表里的流程。
5.1 输入变量(建议写进表格)
- 参数量:P(例如 7B/13B/70B)
- 精度:BF16/FP16(权重与梯度 2 bytes/param)
- 优化器:AdamW(常见状态 FP32)
- ZeRO stage:0/1/2/3
- 序列长度:L
- 目标 global batch tokens:T_global(例如每 step 总 token 数)
- GPU 显存:V_gpu(例如 80GB)
5.2 先算参数相关显存(决定“能不能放下”)
1) 计算参数相关总显存:
- M_param_total ≈ 12 × P bytes
2) 按 ZeRO 分摊,得到每卡:
- M_param_per_gpu ≈ M_param_total / N(用 ZeRO-3 粗估)
3) 留出激活与框架余量:
- 实践中建议让参数相关显存不超过显存的 50%~70%,否则激活稍微一大就 OOM。
由此反推 N 的下限。
5.3 再估激活显存(决定“序列长度与 micro-batch”)
激活显存很难用一个通用常数精确表达,但可以用“基线测量 + 按 L 线性放大”的实用法:
1) 选一个基线配置(例如 L=2048,micro-batch=1),用实际跑一下得到峰值显存。
2) 固定模型与并行策略,调整 L:
- 粗略:激活显存 ≈ 与 L 成正比
- 若注意力实现不佳:可能接近 L^2 的局部峰值
因此预算时可以用保守系数:
- L 翻倍 → 激活显存按 2.2~2.8 倍 预留(更安全)
5.4 最后确定:N、micro-batch、梯度累积步数
目标是满足:
- 峰值显存 < V_gpu
- global batch tokens 达到你期望的训练稳定性
一个常用做法:
- 先把 micro-batch 调到“单卡能跑的最大值”
- 不够的 global batch 用梯度累积补
6. 多少钱:用“总训练 FLOPs”估算训练时长与费用
显存解决了“能不能训”,费用取决于“要训多久”。训练时长又由吞吐(tokens/s)决定。
6.1 预训练计算量的近似公式
业界常用的粗估:
训练 FLOPs ≈ 6 × P × Tokens
- P:参数量
- Tokens:训练 token 总数
- 系数 6 来自前向+反向以及矩阵乘的近似统计(不同实现会浮动)
6.2 从 FLOPs 到时间:需要知道集群有效算力
令:
- GPU 峰值算力(BF16/FP16):例如 A100 80GB 约 312 TFLOPS(不同资料会略有差异,且实际达不到峰值)
- 有效利用率 η:一般 0.3~0.6(看并行、通信、IO、实现水平)
- GPU 数:N
则有效吞吐 FLOPs/s:
F_effective ≈ N × F_peak × η
训练时间:
Time(s) ≈ (6 × P × Tokens) / F_effective
6.3 从时间到钱:按 GPU 小时计费
若你的 GPU 单价为 C(元/卡·小时),则:
Cost ≈ Time(h) × N × C
注意这还没含:存储、网络、工程人力、失败重跑、实验次数等“真实成本”。预算时建议再乘 1.2~2.0 的风险系数。
7. 三个示例:把公式落到数字(可直接改参数套用)
下面用“估算模板”的方式给出示例。由于不同硬件/框架差异很大,示例的目的不是给精确报价,而是教你如何算。
7.1 示例 A:7B 模型,SFT 全量微调,L=2048
假设:
- P=7e9
- Tokens=30B(例如高质量指令数据多轮训练,量级示意)
- N=8 张 80GB(A100 类)
- η=0.4
- C=25 元/卡·小时(示意价,按你实际替换)
1) 参数相关显存:
- 总计约 12×7e9=84e9 bytes≈78.2 GiB
- 若 ZeRO-3,8 卡分摊:≈ 9.8 GiB/卡(参数相关部分)
- 留给激活空间充足 → 2048 序列通常可跑较大 micro-batch
2) 训练时间:
- FLOPs≈6×7e9×30e9=1.26e21
- 单卡峰值算力假设 312e12 FLOPs/s
- 有效集群:8×312e12×0.4≈9.98e14
- Time≈1.26e21/9.98e14≈1.26e6 s≈350 h
3) 费用:
- Cost≈350h×8×25≈70,000 元
- 若算上重跑与实验迭代,预算可按 10~15 万更稳妥
你会发现:在 token 量不离谱的情况下,7B 全量微调在 8×80GB 上是“可控成本”。
7.2 示例 B:13B 模型,继续预训练,L=4096
变化点:参数增大 + 序列更长(激活更贵),通常需要更强并行与更小 micro-batch。
假设:
- P=13e9
- Tokens=200B(领域继续预训练量级示意)
- N=16×80GB
- η=0.35(更大模型通信更多,利用率略低)
- C=25 元/卡·小时
1) 参数相关显存:
- 总计≈12×13e9 bytes≈145 GiB
- 16 卡 ZeRO-3 分摊≈9.1 GiB/卡
- 看似很轻,但 4096 序列激活 会成为主要压力,需要 FlashAttention + checkpointing。
2) 训练时间:
- FLOPs≈6×13e9×200e9=1.56e22
- 有效集群:16×312e12×0.35≈1.75e15
- Time≈1.56e22/1.75e15≈8.91e6 s≈2475 h(约 103 天)
3) 费用:
- Cost≈2475h×16×25≈990,000 元
- 加上风险系数,百万级是很常见的预算量级
这解释了为什么很多团队不会轻易做大规模继续预训练:token 一上来,时间与费用直接爆炸。
7.3 示例 C:70B 模型,全量训练,L=2048(预算级别感受)
假设:
- P=70e9
- Tokens=1T(1e12,预训练常见量级示意)
- N=256 张 80GB(规模化训练)
- η=0.35
- C=25 元/卡·小时
1) 参数相关显存:
- 总计≈12×70e9 bytes≈782 GiB
- 256 卡分摊≈3.05 GiB/卡(参数相关部分)
- 但 70B 通常还需要张量并行/流水并行,激活、通信 buffer、并行切分都会显著增加复杂度。
2) 训练时间:
- FLOPs≈6×70e9×1e12=4.2e23
- 有效集群:256×312e12×0.35≈2.80e16
- Time≈4.2e23/2.80e16≈1.5e7 s≈4167 h(约 174 天)
3) 费用:
- Cost≈4167h×256×25≈26,668,800 元
这个数量级告诉你:大模型预训练烧钱不是传说,哪怕单卡小时单价不高,规模与周期会把成本推到千万级。
8. 想省钱:优先从“减少需要更新的参数”下手
在业务落地中,很多任务并不需要从头预训练或全参 SFT。更实用的降本路径:
8.1 LoRA:显存主要省在优化器状态
LoRA 只训练少量低秩矩阵:
- 你不需要为全部参数保留 Adam 状态
- 梯度与优化器状态主要集中在 LoRA 参数上
因此显存从“12 bytes × P”变成“12 bytes × P_trainable + 2 bytes × P_frozen(仅权重)+ 激活”。
结果是:
- 7B/13B 在单机多卡甚至少卡上更容易跑
- 成本往往能降到全量微调的 1/3 甚至 1/10(取决于 batch、L、实验次数)
8.2 QLoRA:进一步把冻结权重量化
QLoRA 常把冻结权重压到 4bit 存储,进一步降低显存占用,让“长序列 + 中等 batch”更容易实现。
注意:量化会带来一些实现复杂度与潜在精度波动,但对预算敏感的团队是最常见的选择。
9. 你可以直接照做的“估算清单”
在立项或写预算申请时,建议按以下清单逐项填写:
- 目标模型:P=?结构(Llama 类/自研)
- 训练类型:预训练 / 继续预训练 / SFT / LoRA
- 序列长度 L:2048/4096/8192/...
- Tokens 总量:数据规模与 epoch 计划,给出 Tokens 估算
- 并行策略:ZeRO stage、TP/PP、是否 checkpointing、是否 FlashAttention
- GPU 选择与数量 N:显存(40/80GB)、网络(IB/NVLink)
- 效率假设 η:保守填 0.35~0.45;没有把握就更保守
- 单价 C:内部成本或云计费
- 风险系数:至少 1.2(含调参、失败重跑、数据清洗返工)
按本文公式,你就能得到一个“说得清、经得起追问”的预算结果。
10. 常见坑:显存够了但还是训练不起/费用失控
- 只算参数不算激活:长序列训练最容易踩坑。
- 忽略通信与并行开销:ZeRO-3、TP/PP 会吃掉一部分吞吐,η 不能拍脑袋填 0.7。
- Tokens 估算偏离实际:数据重复、过滤后缩水、或者为了效果加训多轮,都会让 token 数暴涨。
- 实验次数未计入:真正花钱的是“多次尝试”。把“训练一次”当成预算会严重低估。
小结
- 显存估算先抓大头:全量训练 Adam 近似 12 bytes/param(再考虑 ZeRO 分摊与激活)。
- 序列长度 L主要通过激活与注意力开销影响显存,L 翻倍往往显存接近翻倍甚至更高。
- 费用估算用近似:训练 FLOPs ≈ 6×P×Tokens,再结合集群有效算力与 GPU 单价得到总成本。
- 若目标是业务落地,优先考虑 LoRA/QLoRA,往往能把预算从“不可谈”降到“可执行”。
在本系列“Ai大模型训练教程”的后续文章中,我们会继续把这些估算落到具体工程:如何选择 ZeRO/并行组合、如何测量 η、如何用基准实验快速反推可行的 batch 与 L,并给出可复制的训练配置模板。
Prev:预训练、SFT、RLHF、DPO分别是什么:适用场景与训练代价对比