大模型微调硬件入门
先说结论:个人第一次学习微调,优先选择 7B 模型 + 4bit QLoRA。8~12GB 显存更适合入门;24GB 显存可以进一步尝试 16bit LoRA 或更大的模型。
微调为什么需要显卡
大模型已经通过大量数据学会了通用知识。微调(Fine-tuning) 是在现有模型上继续训练,让它更适合某个任务。例如,用客服问答数据训练通用模型,让它学会特定的回答方式。
可以把大模型理解为已经毕业的学生,微调就是入职后的岗位培训。
| 阶段 | 含义 | 硬件开销 |
|---|---|---|
| 预训练 | 从零训练一个模型 | 最高,通常需要大规模集群 |
| 微调 | 对现有模型进行专项训练 | 居中,个人可以使用 LoRA 或 QLoRA |
| 推理 | 只让模型回答问题,不更新参数 | 最低 |
本文讨论的是微调。能运行一个模型,不代表能微调它,因为训练还要保存许多中间数据。
决定显存的四个因素
1. 模型参数量
参数(Parameter) 是模型学习到的大量数字,可以理解为模型积累的“经验值”。权重(Weight) 是最常见的一类参数,入门阶段可以先把二者看成一回事。
B 是 Billion(十亿)的缩写:
- 7B:约 70 亿参数
- 13B:约 130 亿参数
- 30B:约 300 亿参数
- 70B:约 700 亿参数
参数越多,通常越占显存,训练也越慢。模型更大不代表在所有任务上一定更好。
2. 数值精度
bit(位)表示保存一个数字使用多少信息。位数越高,记录越精细,占用空间也越大:
1 | 32bit > 16bit > 8bit > 4bit > 2bit |
量化(Quantization) 就是用更低的位数保存模型权重,类似压缩图片:文件变小了,但可能损失一些细节。4bit 常用于平衡显存和效果;2bit 更省显存,效果和兼容性风险也更高。
仅计算权重时,可以这样估算:
1 | 权重大小(GB)≈ 参数量(B)× 位数 ÷ 8 |
| 7B 模型精度 | 仅权重约占空间 |
|---|---|
| 16bit | 14GB |
| 8bit | 7GB |
| 4bit | 3.5GB |
这只是权重大小,不是训练所需的全部显存。4bit QLoRA 也不是所有计算都使用 4bit,通常只是用 4bit 保存基础模型权重。
3. 微调方式
| 方式 | 大白话解释 | 显存开销 |
|---|---|---|
| Full | 更新模型的全部参数,相当于重写整本书 | 最高 |
| Freeze | 冻结大部分参数,只修改部分章节 | 较高 |
| LoRA | 不改原模型,额外训练一本“小笔记” | 较低 |
| QLoRA | 先压缩原模型,再训练“小笔记” | 最低 |
LoRA 新增的少量可训练参数称为适配器(Adapter)。训练完成后通常只需保存适配器,使用时再和原模型一起加载。
QLoRA 可以理解为“量化 + LoRA”。个人学习常用 4bit QLoRA,显存充足时可以选择 16bit LoRA。
表格中还会出现两个精度名词:
- AMP:自动混合精度,由训练框架混合使用不同精度,不等于全程使用 32bit。
- BF16 / FP16:两种 16 位数字格式,都比常规 32 位格式更省空间。
GaLore、BAdam 也是降低训练开销的方法,但原理与 LoRA 不同。第一次学习先掌握 LoRA 和 QLoRA 即可。
4. 训练配置
- Token:模型读取文本的基本单位,可以是字、词或词的一部分。
- 上下文长度:一次送入模型的 Token 数量。文本越长,通常越占显存。
- 批次大小(Batch Size):一次处理的样本数量。批次越大,通常越占显存。
- 梯度检查点:少保存部分中间结果,需要时重新计算,用时间换显存。
- 梯度累积:分多次处理小批次,再统一更新参数,用于模拟较大的批次。
- 参数卸载(Offload):把部分数据放到系统内存或硬盘,用速度换显存。
数据集总量主要影响训练时间和磁盘占用;单条数据长度、上下文长度和批次大小更直接影响峰值显存。
为什么训练显存高于权重大小
先分清三个硬件名词:
- 显存(VRAM):显卡自带的高速空间,模型和训练数据主要放在这里。
- 系统内存(RAM):用于加载模型、处理数据和参数卸载,不能直接代替显存。
- 硬盘:用于保存模型、数据集、日志和训练结果,也不能代替显存。
训练时,显存除了保存模型权重,还要保存:
- 激活值:模型计算时产生的中间结果
- 梯度:告诉参数应该如何调整的数据
- 优化器状态:更新参数时需要的历史信息
- 临时计算缓冲区
因此,7B 模型的 4bit 权重约为 3.5GB,实际微调显存会明显高于 3.5GB。
显存需求估算表
先找模型大小所在的列,再找微调方式所在的行,交叉位置就是估算显存。
| 微调方式 | 精度 | 7B | 13B | 30B | 70B |
|---|---|---|---|---|---|
| Full | AMP | 120GB | 240GB | 600GB | 1200GB |
| Full | 16bit | 60GB | 120GB | 300GB | 600GB |
| Freeze | 16bit | 20GB | 40GB | 80GB | 200GB |
| LoRA / GaLore / BAdam | 16bit | 16GB | 32GB | 64GB | 160GB |
| QLoRA | 8bit | 10GB | 20GB | 40GB | 80GB |
| QLoRA | 4bit | 6GB | 12GB | 24GB | 48GB |
| QLoRA | 2bit | 4GB | 8GB | 16GB | 24GB |
这张表用于初步选型,不是绝对最低配置。模型结构、软件版本、上下文长度和批次大小都会改变实际占用。
例如,表中 7B 4bit QLoRA 约需 6GB,但这更接近极限配置。8~12GB 显存更适合稳定学习。13B 也不能直接代表所有 14B 模型,两者的实际占用可能不同。
根据显存选择方案
| GPU 显存 | 推荐学习方案 | 说明 |
|---|---|---|
| 6GB | 7B 4bit QLoRA | 仅适合极限实验,需要短上下文和小批次 |
| 8~12GB | 7B 4bit QLoRA | 适合完成基础微调流程 |
| 16GB | 7B QLoRA | 可以增加上下文长度或批次大小 |
| 24GB | 7B 16bit LoRA;13B 4bit QLoRA | 个人学习中较均衡 |
| 48GB 及以上 | 13B 16bit LoRA;30B 4bit QLoRA | 适合更大的模型和训练配置 |
推荐从高于估算值一档的配置开始,为临时数据留出余量。例如,24GB 显卡学习微调时,7B 4bit QLoRA 最轻松;需要提高精度或模型规模时,再尝试 7B 16bit LoRA 或 13B 4bit QLoRA。
还要注意以下硬件条件:
- CPU:负责读取和预处理数据,通常不是微调的主要瓶颈,预算应优先留给 GPU 和显存。
- 系统内存:7B 入门建议 16GB 起,32GB 更宽松;更大模型建议 32~64GB。
- 磁盘空间:7B 入门建议至少预留 30~50GB,更大模型和多个检查点需要更多空间。
- GPU 兼容性:很多训练工具依赖 NVIDIA 的 CUDA 计算平台。老显卡即使显存够,也可能不兼容或速度过慢。
- GPU 算力:显存决定“能不能装下”,算力影响“训练要等多久”。
- 多卡训练:两张 24GB 显卡不会自动变成一张 48GB 显卡,必须由训练框架正确切分模型和训练状态。
- 电源与散热:本地长时间训练会让显卡持续高负载,装机时要确认电源功率和散热能力。
如果只是学习,可以先使用现有设备或按需租用云 GPU,确认会长期训练后再购买硬件。
爆显存时怎么处理
出现 CUDA out of memory,说明当前配置超过了可用显存。按下面的顺序处理:
- 关闭其他 GPU 程序,用
nvidia-smi查看显存占用。 - 将批次大小降到
1,需要更大有效批次时使用梯度累积。 - 缩短上下文长度,例如从 4096 降到 2048 或 1024。
- 开启梯度检查点。
- 将 16bit LoRA 改为 8bit 或 4bit QLoRA。
- 换用参数量更小的模型。
- 最后再考虑参数卸载或多卡切分。
一次只调整一项配置并记录显存变化,方便判断真正的影响因素。
最后记住五点
B表示参数量,数字越大,通常越吃硬件。bit表示数值精度,位数越低越省空间,但可能损失更多信息。- 训练显存不只有模型权重,还包括激活值、梯度和优化器状态。
- Full 成本最高,LoRA 更均衡,QLoRA 的显存门槛最低。
- 新手优先选择 7B + 4bit QLoRA,先跑通流程,再升级模型和硬件。
