阶段三:Fine-tuning 实战

第 6-7 周 | 核心目标:Humanizer 专属改写模型(降成本)

⚠️ v5 变更:加云 GPU 训练方案(MacBook 训练 7B 模型太慢)

💡 前移理由:学完 Agent/RAG 后已有"改写质量"的判断力,此时做训练数据筛选最精准。微调完成后用 Ollama(本地推理)部署。

Step 0:硬件方案确认

MacBook Pro(ARM)可以跑推理(Ollama),但训练 7B 模型会很慢(LoRA 可能需要十几小时)。

推荐方案:云 GPU 训练

| 方案 | GPU | 价格 | 训练 500 条 LoRA 预估时间 | |------|-----|------|--------------------------| | AutoDL(国内) | A100 40G | ~¥3-5/h | 30-60 分钟 | | Google Colab Pro | T4/A100 | ~$10/月 | 1-2 小时 | | 本地 MacBook M 系 | MPS | ¥0 | 5-15 小时 |

建议:用 AutoDL(国内网络友好,按小时计费),训练完导出模型文件,下载到本地用 Ollama 部署推理。

流程

  1. 本地准备训练数据(JSONL 格式)
  2. 上传到 AutoDL
  3. 用 LLaMA-Factory / Unsloth 训练 LoRA
  4. 导出合并后的模型(GGUF 格式)
  5. 下载到本地,Ollama 加载推理

Step 1:本阶段资料

| 资料类型 | 具体资料 | 用途 | |----------|---------|------| | 课程 | 吴恩达 Generative AI with Large Language Models | 微调理论 | | 工具 | LLaMA-Factory 官方文档 | 最易用的微调平台 | | 工具 | Unsloth 官方教程 | 速度最快的微调库 | | 文档 | HuggingFace PEFT 文档 | 底层库 |


Step 2:本阶段心智模型

心智模型 1:RAG vs Fine-tuning 选择模型

  • 核心思想:RAG 解决"知识更新"(信息经常变),Fine-tuning 解决"风格/格式"(固定的模式)。两者互补不是竞争
  • 关键变量:知识更新频率、输出格式要求、推理成本
  • 应用场景:RAG 用于知识库问答,Fine-tuning 用于风格化输出、Humanizer 改写风格学习
  • 局限性:Fine-tuning 学到的知识是静态的,更新需要重新训练
  • 相关资料:LLaMA-Factory 文档

心智模型 2:PEFT 效率模型

  • 核心思想:LoRA/QLoRA 只训练低秩适配器,不需要更新全部参数
  • 关键变量:rank(通常 8-64)、alpha(通常 2×rank)、target modules(attention + FFN)
  • 应用场景:消费级显卡微调、特定格式学习、让小模型学会改写风格
  • 局限性:PEFT 效果不如全量微调,但对大多数应用层任务够用
  • 相关资料:Unsloth 教程、HuggingFace PEFT 文档

Step 3:本阶段分歧点

分歧 1:什么时候该 RAG 什么时候该 Fine-tuning?

  • A 方(RAG 优先):RAG 更灵活,知识更新不需要重新训练
  • B 方(Fine-tuning 优先):Fine-tuning 推理成本低,小模型能替代大模型 API
  • 实践倾向:Humanizer 的改写风格是固定的,不需要实时知识更新,Fine-tuning 是正确选择——学成后可以用本地小模型替代大模型 API,大幅降低成本
  • 为什么重要:选错方案会导致维护成本飙升

分歧 2:LoRA vs QLoRA?

  • A 方(LoRA 派):QLoRA 量化会损失精度,能用 LoRA 就用 LoRA
  • B 方(QLoRA 派):QLoRA 省 50%+ 显存,精度损失可以忽略
  • 实践倾向:Qwen2.5-7B 用 LoRA 跑得动就不上 QLoRA,如果换成 14B 再考虑 QLoRA
  • 为什么重要:显存决定了你能微调多大的模型

Step 4:实操项目(Humanizer 专属改写模型)

项目目标:准备 500-1000 条高质量改写训练数据,对 Qwen2.5-7B 做 LoRA 微调,让模型学会 Humanizer 的改写风格,减少对大模型 API 的依赖,降低推理成本。

  • [ ] 从 Humanizer 日志中筛选高质量改写样本(输入-输出对)
  • [ ] 清洗和标注训练数据(至少 500 条,目标 1000 条)
  • [ ] 设计数据格式(instruction + input + output)
  • [ ] 用 LLaMA-Factory 或 Unsloth 对 Qwen2.5-7B 做 LoRA 微调
  • [ ] 训练监控:记录 loss 曲线、检测过拟合
  • [ ] 用 Ollama 加载微调后的模型做推理测试
  • [ ] 构建 A/B 测试框架:微调模型 vs 当前 API 改写
  • [ ] 人工评分 + 自动评估(复用阶段 1 的改写质量评估方法)
  • [ ] 量化成本对比:微调模型推理成本 vs 当前 API 调用成本
  • [ ] 实现降级策略:微调模型推理失败时自动切回 API
  • [ ] 进阶:用 DPO 做偏好优化(如果有用户反馈数据)

Step 4.5:💬 AI 教练对话(做任务时用)

Prompt 1:数据准备(决定微调目标时)

我要微调 Qwen2.5-7B 学习 Humanizer 的改写风格。
请帮我分析:
1. 训练数据从哪来?Humanizer 日志里的改写样本可以直接用吗?需要怎么清洗?
2. 训练数据的质量标准是什么?500 条够吗?
3. 数据格式怎么设计?(instruction / input / output)

Prompt 2:训练问题(训练出问题时)

训练 loss 不下降 / 过拟合 / 显存爆了。
请帮我诊断:
1. 最可能的原因是什么?
2. 学习率、batch size、rank 分别怎么调?
3. 什么情况下应该换 QLoRA?
不要直接给命令,引导我排查。

Prompt 3:A/B 测试设计(完成微调后)

我微调完了改写模型。现在要对比微调模型和当前 API 的效果。
请帮我分析:
1. A/B 测试应该覆盖哪些维度?(改写质量、风格一致性、速度、成本)
2. 人工评分和自动评估各有什么优劣?
3. 什么样的评估结果可以让我放心切换到微调模型?

Prompt 4:模型提取(完成项目后)

我刚完成了 Humanizer 专属改写模型。
请帮我归纳:
1. RAG 和 Fine-tuning 的核心区别是什么?
2. 什么时候应该用 DPO 而不是 SFT?
3. Fine-tuning 后,推理成本实际降了多少?
让我先总结,你再补充。

Step 5:关 AI 自测

关闭所有资料和 AI,纯靠记忆回答。

  1. RAG 和 Fine-tuning 的核心区别是什么?Humanizer 改写为什么选 Fine-tuning?
  2. LoRA 的 rank 参数决定了什么?rank 太小会怎样?太大呢?
  3. 为什么 500 条高质量数据往往比 5000 条噪声数据好?
  4. 如果微调模型的改写质量比 API 低 5%,但成本降了 80%,你会切换吗?为什么?

评分:每题 25 分,≥80 分通过。


Step 6:费曼输出 + 信心校准

一句话版本:用 1 句话说清楚"Fine-tuning 解决什么问题"。 三分钟版本:给产品经理解释为什么 Humanizer 要用自己的改写模型而不是一直调 API。

信心自评:___/10 分 我最可能在什么地方翻车?


工程化要求

  • [ ] 训练日志和指标记录(loss 曲线、训练时长、GPU 使用率)
  • [ ] A/B 测试框架(微调模型 vs API,覆盖质量/速度/成本三维度)
  • [ ] 模型版本管理(每次微调的模型文件、训练参数、评估结果归档)
  • [ ] 降级策略(微调模型推理失败时自动切回 API,对用户无感)
  • [ ] Ollama 部署(微调模型加载到 Ollama,支持本地推理)

验证指标

| 指标 | 目标值 | 测量方式 | |------|--------|----------| | 改写质量对比 | 与 API 相当(差距 < 5%) | 人工评分 + 自动评估 | | API 成本下降 | > 50% | token 消耗对比 | | 推理延迟 | < 3s/次(7B 模型本地推理) | Ollama 基准测试 | | 降级切换成功率 | 100%(对用户无感) | 模拟故障测试 | | 训练数据量 | ≥ 500 条高质量样本 | 数据统计 |