两年前在家里微调 70B 参数模型还是科幻情节。2026 年,有了 QLoRA、FlashAttention-3、出货 48GB VRAM 的消费级 GPU,这是个周末就做得完的项目 —— 只要你有耐心搞懂各个零件。
这篇是端到端实务。需要什么硬件、数据格式、实际能跑的超参数值,以及如果你不被警告会吃掉周末的失败模式。
目标:拿 Llama 3.3 70B Instruct,用 LoRA 适配到你的领域(法律、医疗、客服、什么都好)。最后会拿到一个小 adapter 文件(~200MB),推理时挂回 base model 上。
硬件:实际需要什么
2026 年 QLoRA 70B 的诚实最低需求:
- GPU: 1× NVIDIA RTX 5090(32GB)或 1× RTX 6000 Pro Blackwell(96GB)。5090 只能跑 QLoRA 而且很紧。6000 Pro 是舒服选项,full LoRA 跟长序列都跑得动。
- 内存: 系统 RAM 至少 64GB。128GB 在 data loading 时顺很多。
- 硬盘: base model checkpoint、数据集、中间 checkpoint 加起来要 250GB 空闲,强烈建议 NVMe。
- OS: Linux(Ubuntu 24.04 最佳)。WSL2 能用但性能掉 10-20%。Windows 原生 —— 别试。
没硬件:RunPod 租 A100 80GB 约 $1.50/hr,H100 约 $2.50/hr。70B 微调在 H100 上一般跑 4-12 小时,总成本 $10-30。
数据集:格式跟大小
第一次微调最常犯的错:数据不够,或格式错。
格式。 2026 标准是 JSONL,每行一个 messages 数组,OpenAI 风格:
{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
一行一个 example。Axolotl 跟 Unsloth 直接吃这个格式。
大小。 经验法则:
- 100 个 example:够教模型「风格」(输出格式、语气),不够教新知识。
- 1,000 个:够做窄任务适配(分类、抽取、结构化输出)。
- 10,000 个:真领域专业,模型在真测试题上明显不同。
- 100,000+ 个:边际效益对策展成本越来越差。
第一个项目,1,000-3,000 个高质量 example 永远赢 50,000 个普通的。
质量比数量重要。 1,000 个人工策展的好答案,教模型的东西远多于 50,000 个 LLM 生成、看起来都微妙地一样的 example。
2026 工具链
四个东西:
- Unsloth(独立开发者推荐)。比 vanilla transformers 快两倍、VRAM 更低、LoRA 文档齐全。2026 年的首选食谱。
- Axolotl(认真工作推荐)。配置更弹性、支持更多架构、适合 production 团队。
- PEFT(HuggingFace)。底下两个用的 LoRA / QLoRA 实作都靠它。
- bitsandbytes。QLoRA 用的 4-bit 量化。
本文用 Unsloth。
重要的超参数
70B LoRA 实际能跑的值:
- LoRA rank(r): 窄任务用 16,广域适配用 32 或 64。越高 = 容量越大、VRAM 越多、训练越慢。从 16 开始。
- LoRA alpha: rank 的 2 倍。r=16 就 alpha=32。控制 LoRA 更新的缩放。
- 目标模块:
q_proj、k_proj、v_proj、o_proj、gate_proj、up_proj、down_proj(所有 linear 层)。2024 年的指南只训 attention,2025+ 研究显示 MLP 也训会明显提升。 - Learning rate: LoRA 用 2e-4,QLoRA 用 1e-4。loss 爆掉就减半,loss 一直平就加倍试一次。
- Batch size: 每张 GPU 1,gradient_accumulation_steps 设 8-16。等效 batch size 8-16 是甜蜜点。
- Epochs: 1-3。小数据集跑太多 epoch = overfit。盯 eval loss,不掉了就停。
- Max seq length: 从 2048 开始,越长 VRAM 越多。数据需要才加。
- Warmup steps: 总步数 5-10%,避免一开始 loss 爆冲。
跑起来长什么样
2,000 个 example 的 Llama 3.3 70B QLoRA 微调,单张 H100:
- VRAM 峰值:约 62GB。
- 每 epoch 时间:约 80 分钟。
- 总墙钟时间(3 epoch + checkpoint):约 5 小时。
- 最终 adapter 大小:250MB。
- Train loss 起点 1.4,终点 0.6;Eval loss 终点 0.7。
Loss 数字是参考 —— 真正重要的是模型在你真实测试 prompt 上的行为有没有变。
怎么知道真的有用
不要相信 loss 曲线。准备一份 30-50 个没拿去训练的 hold-out 测试集,把 base model 跟微调后的模型输出并排比较。如果在你的真实领域上微调版本没有「肉眼可见」变好,问题就是数据集,不是训练。
要看的东西:
- 有没有一致地照你的输出格式?
- 有没有正确使用你领域的词汇?
- 有没有忘了怎么做别的事(catastrophic forgetting)?如果连基本数学都不会了,代表数据太窄。
- 跑通用 benchmark(HellaSwag、MMLU 抽样 200 题)before / after 比一下,抓 regression。
Catastrophic forgetting 跟怎么避免
LoRA 部分缓解了这个 —— base 权重没被动 —— 但推理时 adapter 合并后,跟你微调集差异大的任务还是可能 regression。
缓解:
- 混入通用数据。 训练数据 10-20% 应该是通用 instruction-following 数据(Tulu、OpenAssistant 抽样),保留广域能力。
- 降低 rank。 rank 越高 = 适配越激进 = forgetting 风险越大。窄任务 r=16 比 r=64 安全。
- 不要过训。 盯 eval loss,不掉了就停。
什么时候不该微调
大部分「我应该微调这个」的直觉都是错的。先试这些:
- 更好的 prompt。 大部分窄任务的提升来自 system prompt 里的 few-shot example,通常免费。
- RAG。 如果问题是「模型不知道我的数据」,95% 的时候 RAG 才是答案。微调不可靠地教事实,它教行为。
- 更大的前沿模型。 如果 Claude 4.7 Opus 或 GPT-5 已经能做你要的事,成本效益通常赢自架微调 70B。
微调时机:(a) 你需要 prompt 强制不了的一致输出格式,(b) 隐私 / 合规理由要把权重留在本地,(c) prompt 在你特定任务上撞质量天花板而且你有数据能突破。
上线部署
adapter 训好之后两条路:
- 把 adapter 合并进 base 权重。 单一合并模型,部署最简单。失去切换 adapter 的能力。
- adapter 分开放,推理时载入。 vLLM 跟 TGI 等框架支持这个,可以放一个 base model,每次请求换 adapter。
2026 年要 serving,vLLM + 合并模型是 production 级选择。Self-host vLLM 有专文。
下一步
- Unsloth GitHub 范例目录。
- QLoRA: Efficient Finetuning of Quantized LLMs(Dettmers et al, 2023)。
- DoRA: Weight-Decomposed Low-Rank Adaptation —— 2024 LoRA 后继,质量略好。
- 查这些词:catastrophic forgetting、parameter-efficient fine-tuning、LoRA vs DoRA、axolotl config 范例。