模型后训练与 W&B 实验管理¶
对应课程:Week 8 · Week 9 · Week 10
目标:完成一次小规模 LoRA/SFT,并用 W&B 形成可审计的实验对比。
建议顺序:baseline → LoRA/SFT → W&B tracking → evaluation/ablation
本页是学习入口与实验规范,不复制框架官网中的长篇命令。具体 API 以官方文档为准,学生成果以配置、run、artifact 和评测证据为准。
模块学习卡与完成路径¶
| 字段 | 本页约定 |
|---|---|
| 对应周次 | Week 8–10 |
| 适合谁 | 已有固定数据划分、可复现 baseline 和评测脚本的学生 |
| 预计时间 | 先用约 1 小时完成计划;训练耗时按模型、数据和资源上限确定 |
| 学什么 | LoRA/SFT、W&B runs/artifacts、统一评测、消融和成本记录 |
| 官方来源 | PEFT、TRL、MS-SWIFT、W&B 与所选框架官方文档 |
| 最小动作 | 冻结 baseline、预算和停止条件,完成一次小规模 LoRA/SFT 及训练前后对比 |
| 提交证据 | 计划、配置、环境、runs、artifact metadata、评测结果和错误分析 |
| 完成自查 | 数据隔离正确,协议一致,成本有上限,结论包含失败与限制 |
| 下一步 | Week 10 评测与消融 |
| 路径 | 完成范围 |
|---|---|
| 最小 | 小模型、小数据、短程 LoRA/SFT,完成一次公平的训练前后对比 |
| 标准 | 完成 Week 8–10 的 runs、artifacts、统一评测、消融和错误分析 |
| 进阶 | 增加单变量消融、切片/稳健性评测;只有 reward 与 SFT baseline 稳定后才考虑 GRPO |
执行契约¶
| 项目 | 约定 |
|---|---|
| 前置条件 | 合法数据、固定 train/validation/test、可复现 baseline、评测脚本、资源预算和停止条件 |
| 唯一入口 | 先完成后训练教程的一页实验计划,再选择一种官方框架执行 LoRA/SFT |
| 版本 | 锁定模型 ID/revision、数据版本、代码 commit、框架/package、chat template、seed 与评测版本 |
| 预计耗时 | 计划约 1 小时;训练与评测必须在计划中写明 GPU 小时和总时限 |
| 算力与成本 | 通常需要 GPU;优先免费 Kaggle/Colab、小模型和小切片;训练前写明费用上限,不默认购买资源 |
| 输入 | 固定数据划分、baseline prediction、训练配置和统一评测协议 |
| 预期输出 | post-training-plan.md、training-config.yaml、环境记录、checkpoint/adapter metadata、runs、原始评测和报告 |
| 成功判定 | 训练前后仅改变计划变量,使用相同 test protocol,结果、成本和失败案例均可追溯 |
| 常见失败与恢复 | OOM/超时先缩小规模;结果不可比时恢复冻结协议;指标改善但样例退化时检查切片;GRPO 不稳时退回 SFT baseline |
先判断是否应该微调¶
微调不是默认答案。开始前先写一页实验提案,回答:
- Prompt 或 pipeline 调整为何不能解决问题?
- 训练数据是否合法、足够代表目标任务吗?
- 使用什么固定 test set 判断效果?
- 最小可行模型和算力预算是什么?
- 微调失败时,哪些结果仍有研究价值?
只有问题、数据、baseline 和指标明确后,才进入训练。
Stage 1|建立 baseline¶
在训练前冻结:
model_id与 model revision;- train/validation/test 划分与数据版本;
- prompt/template;
- 主指标和通过阈值;
- 随机种子;
- 资源预算。
用未微调模型运行 test set,并保存逐样例 prediction。训练完成后必须使用同一评测协议比较。
Stage 2|LoRA/PEFT 与 SFT¶
必须理解的参数¶
| 参数 | 学生需要回答的问题 |
|---|---|
r |
adapter 的秩为什么适合当前资源和任务? |
lora_alpha |
与 r 的比例如何影响更新? |
target_modules |
哪些层被训练,依据是什么? |
| learning rate | 为什么选择该值,如何比较? |
| effective batch size | gradient accumulation 后的实际值是多少? |
| epochs / max steps | 是否出现过拟合? |
| precision / quantization | 带来什么资源收益与数值风险? |
官方学习链接¶
- Hugging Face PEFT quicktour(LoRA/adapter 基础)
- PEFT LoRA reference(参数与 QLoRA-style 配置)
- TRL SFT Trainer(SFT 数据与训练接口)
- MS-SWIFT Qwen3.5 Best Practices(Qwen3.5 当前环境、推理和训练方案)
- PyTorch reproducibility(随机性与确定性限制)
框架选择
课程默认只要求掌握一条训练路径。优先选择与目标模型明确兼容、文档当前有效的框架;不要同时学习多个训练框架,也不要把其他模型的配置直接套到 Qwen3.5。
最小训练交付¶
week08/
├── train.py # 或可从头运行的 notebook
├── training-config.yaml
├── dataset-card.md
├── environment.txt
├── logs/
└── training-report.md
training-config.yaml 至少记录模型 revision、数据版本、seed、LoRA 参数、优化器、学习率、batch size、最大步数、精度和输出目录。
Stage 3|接入 Weights & Biases¶
W&B 的作用不是“画一条 loss 曲线”,而是把 config、metrics、运行环境、数据版本和模型产物连接起来。
安全登录¶
- 使用
wandb login、环境变量或平台 Secret; - 不把 API key 写入 notebook、YAML、截图或 Git 历史;
- 使用私有项目时,保留可核对的 run ID,并在例会中只展示脱敏 report 导出。
每个 Run 必须记录¶
| 类别 | 最低字段 |
|---|---|
| Identity | run name、group、tags、Git commit |
| Config | model/data revision、seed、LoRA 与训练参数 |
| Training | train/eval loss、learning rate、global step |
| Task metrics | 与 baseline 相同的主指标 |
| System | duration、GPU、peak memory(能获取时) |
| Notes | 假设、唯一改动、异常与中止原因 |
A/B 对比任务¶
运行至少两个可比较 runs,只改变一个因素。例如:
Run A: learning_rate = 1e-4
Run B: learning_rate = 2e-4
保持不变:model revision、dataset split、seed、LoRA config、steps、evaluation
若无法完全固定随机性,应明确记录并谨慎解释小幅差异。
Artifacts 与 Reports¶
使用 Artifact 保存或引用:
- dataset manifest/version;
- training config;
- adapter metadata 或小型 adapter;
- evaluation results。
最终 W&B Report 至少包含:研究问题、runs 表、训练曲线、主指标、资源成本、失败案例、结论和下一步。
W&B 官方链接¶
- W&B Quickstart(首次记录 run)
- Track experiments(config、metrics 与 runs)
- Hugging Face integration(Transformers/Trainer 集成)
- W&B Artifacts(数据与模型版本)
- W&B Reports(可分享实验报告)
- W&B Sweeps(扩展学习,不是入门必做)
Stage 4|统一评测与消融¶
训练完成后:
- 用冻结的 test set 重跑 baseline 与所有候选 adapters;
- 导出逐样例结果,而非只保存均值;
- 报告总体指标和按文档类型切片指标;
- 对最差案例做人工复核;
- 做一个只改变单个因素的 ablation;
- 同时报告准确性、训练时间和显存成本。
不要使用 W&B 页面中“最好看”的单次 run 直接作为结论。
Week 8–10 自主检查¶
- 有训练前 baseline 和固定 test set;
- 数据来源、许可、划分和版本清楚;
- LoRA/SFT 配置可机器读取;
- 至少两个 W&B runs 只改变一个因素;
- 每个 run 可追溯到 Git commit、config 与结果;
- API key 未进入仓库;
- W&B Report 包含负面结果、限制与资源成本;
- 评测脚本能从原始 prediction 重算指标。
推荐提交结构¶
post-training-project/
├── README.md
├── configs/
│ ├── baseline.yaml
│ ├── run-a.yaml
│ └── run-b.yaml
├── src/
│ ├── train.py
│ └── evaluate.py
├── results/
│ ├── predictions.jsonl
│ └── metrics.csv
├── dataset-card.md
├── wandb-report.md
└── MODEL_CARD.md
进一步探索¶
完成 SFT、W&B 和统一评测后,再考虑 GRPO、sweeps、分布式训练或更大模型。扩展实验仍需遵循相同原则:一次只提出一个明确问题,保留可复现证据,并如实报告成本与失败。