为什么要微调?
预训练模型很强大但可能不匹配你的领域。微调可以在不从头训练的情况下使模型适应你的特定需求。
成本问题
70 亿参数模型的全量微调需要约 160GB 显存。即 2-4 张 A100 GPU,每张 $2-3/小时。
参数高效方法
- LoRA:向冻结层添加小型可训练矩阵。可训练参数减少 100 倍。
- QLoRA:将基础模型量化到 4 位,然后应用 LoRA。单个 48GB GPU 即可运行 650 亿模型。
- 前缀调优:仅训练小型前缀向量。最小内存开销。
- 适配器层:在冻结层之间插入小型可训练模块。
实践配置
- 硬件:单张 RTX 4090(24GB)或 A10G(24GB)可处理大多数 QLoRA 任务。
- 云选项:RunPod、Lambda Labs、Vast.ai,$0.3-0.8/小时。
- 框架:Hugging Face PEFT、Unsloth、Axolotl。
分步指南
1. 准备数据集(JSONL 格式,1K-10K 示例)。
2. 选择与任务领域匹配的基础模型。
3. 配置 QLoRA,rank 16-64,alpha 16-32。
4. 训练 1-3 个 epoch,监控验证损失。
5. 合并适配器并在测试数据上评估。
建议
- 先用 1K 高质量示例,再扩展到 10K。
- 即使是补全任务也使用指令跟随格式。
- 始终在训练时未见过的数据上评估。
成本优化策略
- 从 LoRA/QLoRA 开始:全量微调需要大量 GPU 显存。LoRA 将可训练参数减少到 <1%,同时保持 90-95% 的全量微调质量。
- 使用较小的基础模型:微调 Llama 3.1 8B 成本约为 70B 的 1/10。从小模型开始。
- 云 GPU 定价:A100 40GB 约 $1.50/小时,H100 约 $3.00/小时。典型 LoRA 微调需 2-4 小时。
- 数据质量优于数量:1000 个高质量样本通常优于 10000 个普通样本。
常见坑
- 过拟合:监控验证损失,使用早停和 dropout。
- 灾难性遗忘:混入 10-20% 通用对话数据保持基础能力。
- 评估缺口:不要只看损失曲线,构建测试集评估任务指标。
- 忽略数据格式:聊天模板格式非常重要,匹配基础模型的训练格式。