AiSSN.com ©

在线Ai关键词排名GEO优化工具,让你的信息出现在Ai的回答中

训练一套大模型要多少显存与多少钱:按参数量与序列长度估算成本
原始问题:

本文为Ai大模型训练教程系列文章,详解训练大模型需要多少显存与多少钱:从参数相关显存(12 bytes/param)与ZeRO分摊,到序列长度带来的激活开销,再用6×P×Tokens估算训练FLOPs、时长与GPU费用,并给出7B/13B/70B示例与LoRA/QLoRA降本建议。

训练一套大模型要多少显存与多少钱:按参数量与序列长度估算成本

在做“Ai大模型训练教程”系列的实战落地时,最容易被问到的问题不是“用什么框架”,而是更现实的:训练一套大模型到底要多少显存、要花多少钱?

大模型训练成本的核心由三件事决定:

  1. 参数量 P(模型有多大)
  2. 序列长度 L(上下文有多长)
  3. 训练策略与硬件(全量微调/LoRA、ZeRO、张量并行、GPU 型号与单价等)

本文给出一套可复用的估算方法:从“显存怎么拆账”到“算出大概需要多少张卡、训练多久、最终多少钱”。你可以把它当作预算评审、算力采购、项目排期的计算模板。


1. 先明确:你要估算的是哪种“训练”?

不同训练方式的显存与成本差距极大,先把场景说清楚:

  • 预训练(Pretrain):从零在海量语料上训练,成本最高。
  • 继续预训练(Continue pretrain):在既有模型上补充领域语料,成本中等偏高。
  • 指令微调(SFT,全量微调):对全参数更新,显存压力大。
  • 参数高效微调(LoRA/QLoRA):只更新少量参数,显存与成本大幅下降。

本文的估算主要围绕“Transformer 类大模型的全量训练/全量微调”,并在后面给出 LoRA/QLoRA 的降本对比。


2. 显存由哪些部分组成:一张卡上到底装了什么

训练时单卡显存通常由四大块构成:

  1. 模型参数(Parameters):权重本身
  2. 梯度(Gradients):反向传播产生的梯度
  3. 优化器状态(Optimizer states):例如 Adam 的一阶/二阶动量
  4. 激活值(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 三个必须用的手段(不然长上下文训练很难落地)

  1. FlashAttention / xFormers:降低注意力的显存与带宽开销
  2. Activation Checkpointing(重计算):用算力换显存,激活显存显著下降
  3. 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. 你可以直接照做的“估算清单”

在立项或写预算申请时,建议按以下清单逐项填写:

  1. 目标模型:P=?结构(Llama 类/自研)
  2. 训练类型:预训练 / 继续预训练 / SFT / LoRA
  3. 序列长度 L:2048/4096/8192/...
  4. Tokens 总量:数据规模与 epoch 计划,给出 Tokens 估算
  5. 并行策略:ZeRO stage、TP/PP、是否 checkpointing、是否 FlashAttention
  6. GPU 选择与数量 N:显存(40/80GB)、网络(IB/NVLink)
  7. 效率假设 η:保守填 0.35~0.45;没有把握就更保守
  8. 单价 C:内部成本或云计费
  9. 风险系数:至少 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,并给出可复制的训练配置模板。

训练一套大模型要多少显存与多少钱:按参数量与序列长度估算成本
https://aissn.com/89.html