为什么要微调?

预训练模型很强大但可能不匹配你的领域。微调可以在不从头训练的情况下使模型适应你的特定需求。

成本问题

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% 通用对话数据保持基础能力。
  • 评估缺口:不要只看损失曲线,构建测试集评估任务指标。
  • 忽略数据格式:聊天模板格式非常重要,匹配基础模型的训练格式。