微调一个模型要多少显存和钱?7B/13B/70B 估算表

微调要多少显存,先把钱花在哪说清楚

「微调一个 7B 要几张卡」这个问题没法一句话回答,因为全参、LoRA、QLoRA 三条路的显存差着十倍以上。显存开销拆开就四块:模型权重、梯度、优化器状态、激活值。

按 bf16 训练加 AdamW 算笔账:权重 2 字节每参数,梯度 2 字节,AdamW 的一阶二阶动量是 fp32 的 8 字节,光这三项 12 字节,再叠上 fp32 master weight 和通信 buffer,经验倍数是 16~20 倍参数量。7B 落到 110~140GB,单张 80G 卡装不下,这就是全参的门槛。

LoRA 把梯度和优化器状态砍到只剩适配器那一小块,倍数量级掉到 2.5~3 倍参数量;QLoRA 再把冻结的基座压成 4bit,权重降到 0.5~0.7 字节每参数。但激活值这三条路都得付,序列长度一上去,激活能占到总占用的一半,这也是为什么 4090 跑 7B QLoRA 有人能跑、有人 OOM。

7B / 13B / 70B 显存估算表

模型规模 微调方式 权重+梯度+优化器(估算) 实际起步显存(seq 1024、bs 1~2) 常见卡型组合
7B 全参 84~110GB 160GB 起,长序列更高 2×80G
7B LoRA 15~17GB 24GB 可跑短序列,40GB 更稳 1×4090 / 1×A100
7B QLoRA 5~6GB 12~16GB 1×4090 24G
13B 全参 208~260GB 320GB 起 4×80G
13B LoRA 27~30GB 48GB 1×A6000 48G 或 2×4090
13B QLoRA 8~9GB 24GB 1×4090 24G
70B 全参 1120~1400GB 1.5TB 起 16×80G 起
70B LoRA 145~160GB 240GB 4×80G
70B QLoRA 38~45GB 80GB(seq 1024),160GB 更稳 1×80G 试跑 / 2×80G

表里给的是区间,不是精确值。同一套配置换个框架能差 30%——DeepSpeed ZeRO-3、FSDP、Unsloth 的激活管理策略完全不同。选卡时按区间上限留 20% 余量,尤其要跑 4K 以上长文本的。切分策略和并行配置的话,可以对照 大模型训练 GPU 方案 里的分档建议。

显存不够,按这个顺序往下砍

  1. 开 gradient checkpointing。用重算换显存,激活值大概能砍掉六成,代价是训练速度慢 20%~30%。这是性价比高的一步,先做。
  2. batch size 降到 1,用梯度累积补回等效 batch。梯度累积只多花时间不花显存,掉的是吞吐。
  3. 砍序列长度。512 和 2048 的显存差是数量级的。先统计一遍训练数据的长度分布,按 P95 截断,别为了几条超长样本把整批配置撑爆。
  4. 基座从 bf16 换 4bit(QLoRA)。这一步开始影响效果了,放到后面做。
  5. 全参改 LoRA。拟合能力换显存,属于方案级取舍。
  6. 上多卡切分,ZeRO-3 或 FSDP 把权重、梯度、优化器分片。注意 LoRA 这种算力小的场景通信占比高,2 卡往往只有 1.5 倍加速,全参反而扩展性更好。

顺序的原则很简单:先做不影响模型效果的操作,再做影响效果的。前三条只掉速度,后三条动的是精度和最终效果。

量化换来的不只是显存,还有精度损耗

NF4 基座加 LoRA 在大多数指令微调任务上和 bf16 LoRA 差距不大,但不是所有任务都这样。数学题、代码生成、多步推理这几个方向掉点更明显,中文和小语种的损失普遍比英文大——训练语料里英文占比高的模型,量化误差已经被英文分布「吸收」过一轮了。

还有一个坑值得单独说:QLoRA 训完直接拿 4bit 版本上线推理,离线评测集看着没问题,上线后长输出开始重复、结尾被截断。这不是模型训坏了,是训练精度和推理精度不一致。换成 bf16 合并权重再走推理框架,问题就没了。留出这一步的时间和显存预算,别等到上线才发现。

反过来,量化不适合的场景也很明确:继续做领域增量预训练。token 数上到几个亿、数据分布和目标分布差得远的时候,量化误差会被放大,LoRA 的影响面又盖不住,这种情况老实上全参加多卡。

LoRA 的取舍:省下显存,付出拟合能力

  • 秩 r 一般取 8~64,7B 上可训参数占比 0.1%~0.5%。r 提到 128 收益递减,显存和时间是线性涨的。
  • 适合改行为:风格对齐、指令遵循、输出格式规范、领域术语纠正。不适合灌知识:大量新事实、大幅改变输出分布的活,LoRA 经常学不进去。
  • target_modules 别只挂 q_proj 和 v_proj。把 k、o、up、down、gate 一起挂上通常更稳,代价是显存和步数都往上走。
  • 数据量少于 1000 条时,效果更多取决于数据质量而不是 r 的大小。这时候调参的边际收益很低,不如回去清洗数据。

把显存换算成小时和账单

时间量级参考:单卡 4090 跑 7B QLoRA,1 万条样本、平均长度 512、1 个 epoch,大概 4~8 小时。13B 同条件 10~20 小时。70B QLoRA 在 8×80G 上 1~2 天。这些是数量级,实际取决于序列长度、框架和是否开了 checkpointing。

价格上,24G 卡(4090 一类)大致在每小时几元区间,48G 卡(A6000、L40S)十几元,80G 卡(A100、H800)几十元,具体以实际报价为准,可参考 GPU 租赁价格对比。按上面的时间估算,7B QLoRA 试跑一轮是几十元的量级,13B 是几百元,70B 全参那就是每轮几千往上,还得算上多卡通信损耗和排队时间。

所以我们一般建议:实验阶段按小时租,跑通验证之后再考虑包周包月。真出现多机多卡需求,网络带宽和机房出口质量对训练效率的影响比卡的型号还大,这块在 AI 算力服务 里有对应的组网说明。

实际怎么定配置

先回答一个问题:你要改的是模型的行为还是模型的知识?改行为,LoRA 起步;要灌知识,做好全参和多卡的预算。

然后按表倒推显存,卡在区间线上的机型一律往上一档,别赌。真的不确定,就用 1 张卡先跑 500~1000 条样本,看 loss 曲线和评测集表现,再决定要不要放大规模——绝大多数项目在这一步就能发现数据问题,省下的卡时比调参省出来的多。

把模型规模、训练数据量、平均序列长度、目标 epoch 数发到 bd@319keji.com,我们可以按这张估算表帮你倒推配置和大致预算,也能直接开 GPU 服务器租用 的小时实例让你先跑通一轮。

Leave a Reply

Your email address will not be published. Required fields are marked *