跳转至

调优决策树

调优不是微调的同义词。FDE 应按成本和可逆性从外到内处理问题。

推荐顺序

需求和验收标准
  -> 输入与输出 schema
  -> 提示词和示例
  -> 上下文与 RAG
  -> 工具和工作流
  -> 模型选择与路由
  -> SFT / LoRA / QLoRA
  -> 偏好优化 DPO
  -> 可验证奖励的 GRPO/RL

如果问题是缺少最新知识、权限过滤或业务数据,微调通常不是答案。如果问题是稳定格式、术语、风格、工具行为或特定决策模式,而且高质量样本足够,微调才值得进入候选。

先分类失败

失败 先改什么 不要先做什么
用户目标含糊 需求、交互和澄清逻辑 换更大模型
缺事实或资料 数据接入、RAG、工具 用 SFT 背诵动态知识
检索到了但回答漏点 上下文组织、引用与生成提示 继续扩大 TopK
固定格式不稳 JSON schema、受约束解码、示例 收集几万条再微调
术语或风格不一致 明确规则、few-shot、SFT 只调 temperature
工具选择错误 工具描述、路由样本、评测 给 Agent 更高权限
延迟或成本高 token、路由、缓存、量化 盲目训练小模型

提示词调优

稳定提示词通常包含:

  1. 角色和任务,不写虚泛人格。
  2. 输入数据的边界与可信度。
  3. 明确步骤,只保留会改变结果的约束。
  4. 输出 schema 和失败表达。
  5. 2 到 5 个高价值示例,覆盖边界而非重复正常案例。

每个版本都有 ID,并在同一评测集上比较。不要一边改模型、一边改检索、一边改提示词。

SFT

Supervised Fine-Tuning 用目标输入和理想输出训练模型。适合稳定行为、领域表达、工具格式和重复工作模式。

数据优先级:正确性 > 覆盖 > 一致性 > 数量。先做数百到数千条高质量样本的小实验,检查学习曲线和保留集,再决定扩充。

数据检查

  • train/validation/test 按用户、文档、时间或任务来源隔离,避免近重复泄露。
  • 保留困难、拒答、信息不足和错误工具案例。
  • 统一 chat template、角色、结束 token 和工具 schema。
  • 删除模板污染、泄露答案、互相矛盾和不可追溯的合成样本。
  • 记录数据许可证、来源、PII 和删除机制。

LoRA 与 QLoRA

LoRA 论文冻结基础权重,把更新表示为低秩矩阵,减少可训练参数和训练显存。Hugging Face PEFT提供了主流实现。

QLoRA 把冻结基础模型量化后再训练 LoRA adapter,适合消费级 GPU。它降低门槛,但不消除激活、上下文和批量造成的显存压力。

实用起点

参数 起点 调整信号
learning_rate 1e-5 到 2e-4,依模型/数据而定 loss 不降或快速过拟合
lora_r 8、16、32 任务复杂且欠拟合时增大
lora_alpha 常与 rank 同级或 2 倍 与学习率共同评测
lora_dropout 0 到 0.1 小数据过拟合时增加
batch_size 每卡 1 起步 用梯度累积维持有效 batch
序列长度 先覆盖真实 P90 不为标称上下文浪费激活显存

这些不是最佳参数,只是搜索起点。目标模块、模型架构、Tokenizer 和数据分布都会改变结果。

DPO 与 GRPO

  • DPO 使用 chosen/rejected 偏好对,适合改进风格、排序和偏好行为,流程比经典 RLHF 简单。
  • GRPO/RL 适合存在可验证奖励的推理、代码或 Agent 任务。奖励设计错误会训练出钻空子的行为。

TRL 官方文档支持 SFT、DPO、GRPO 和 Reward Modeling。学习时先用小模型和小数据跑通完整评测闭环,再扩展到昂贵训练。

一次可信训练实验

  1. 固定基础模型、数据版本和测试集。
  2. 保存未训练基线输出。
  3. 先跑短程 smoke test,确认格式、loss、显存和 checkpoint。
  4. 只搜索少量高影响参数。
  5. 比较基础模型、adapter、合并模型和量化后模型。
  6. 检查目标任务、通用能力、安全和长尾退化。
  7. 记录随机种子、代码、依赖、硬件、耗时与成本。

常见错误

  • 训练集就是测试集,得到虚假的提升。
  • 用更多低质合成数据稀释少量高质样本。
  • 只看训练 loss,不看业务通过率和严重错误。
  • LoRA 合并或量化后没有重新评测。
  • 用微调修复会频繁变化的产品知识。
  • 模型学会输出格式,却没有学会何时拒答。

可选工具:LLaMA-Factory适合用统一配置尝试 LoRA、QLoRA、SFT、DPO 等方法;生产前仍需理解它生成的模型、模板和训练参数。

调优方法选择表

你观察到的问题 优先实验 需要的数据 退出条件
指令含糊导致回答漂移 重写任务和 rubric 20 条失败样本即可起步 人工仍无法一致判断正确性
固定结构偶尔解析失败 schema/约束解码 正常与边界结构样本 解析率达到门禁
缺少动态事实 RAG 或工具 权威数据源与证据标注 关键资料仍不在语料库
领域表达不稳定 few-shot,再评估 SFT 高质量输入/理想输出对 提示已够稳定或 SFT 显著胜出
工具选择错误 工具描述、路由、负例 正确/错误工具轨迹 权限风险仍不可接受
风格偏好 提示、SFT 或 DPO 一致标准的偏好对 偏好提升但事实性下降
可验证推理失败 更强模型或 RL 类方法 可执行 verifier 奖励被钻空子或通用能力退化

最小 LoRA 实验配置

下面是记录结构,不是跨模型通用最佳值:

base_model: <exact-revision>
dataset: domain-sft-v3
chat_template: <name-and-version>
method: qlora
quantization: nf4
target_modules: [q_proj, k_proj, v_proj, o_proj]
lora:
  r: 16
  alpha: 32
  dropout: 0.05
training:
  learning_rate: 0.0001
  epochs: 2
  micro_batch_size: 1
  gradient_accumulation_steps: 16
  max_sequence_length: 4096
  seed: 42
evaluation:
  baseline_run: eval-base-v3
  heldout_set: domain-test-v3

模型架构可能使用不同模块名。训练前打印实际可训练参数,确认没有误解冻基础模型,也没有因模块名不匹配而训练零个参数。

数据质量抽检

从每个来源和任务类型各抽至少 20 条,逐项检查:

  • 输入是否包含完成任务所需信息,输出是否真的可由输入推出。
  • 多位标注者对关键结论是否一致;分歧是否反映规则缺失。
  • 拒答和信息不足样本是否存在,而不是所有问题都有完美答案。
  • 合成样本是否只是同一模板换实体,造成虚假规模。
  • train/test 是否存在近重复、同一文档片段或时间穿越。
  • 输出风格规则是否掩盖事实错误和工具错误。

实验台账

Run 唯一改动 训练成本 目标通过率 通用保留集 严重错误 推理成本 决策
base 无 0
r016 rank 16
data-v4 数据清洗 v4

结果至少比较四种制品:基础模型、未合并 adapter、合并后的模型、最终部署量化模型。量化后质量或性能变化属于发布制品的一部分,不能用训练阶段结果代替。

本章实践

从一个 50 条失败集开始,先用提示和 schema 修复,再选择其中无法修复且模式稳定的问题制作 200 条 SFT 数据。比较两条路线的质量增益、实现时间、推理成本和回滚难度。最终结论允许是“不微调”。

调优门禁:没有未见测试集、基础模型基线和失败样本链接,不启动昂贵训练。训练 loss 下降只证明优化器在学习数据,不证明业务结果变好。