微调:Hugging Face 文章复现与解释
作业定位
这份作业接在第 11 章的下面两组材料之后完成:
- Hugging Face 文章
- 配套图书:A Hands-On Guide to Fine-Tuning Large Language Models with PyTorch and Hugging Face
目标不是让你“泛泛做一次微调练习”,而是围绕这一篇 Hugging Face 文章,真正看清:
- 一条最小 LLM 微调链路到底由哪些部分组成
- 文章里的工程细节,如何映射到课程讲义和 notebook
- 为什么量化、LoRA、数据格式、chat template、trainer 和保存 adapter 必须连成一个闭环
作业目标
请你基于文章说明、讲义和图书中的对应内容,完成一次 “Hugging Face 文章复现与解释”。
你需要:
- 读懂文章里的微调主线
- 尽可能复现文章中的关键步骤
- 解释每一步背后的工程含义
- 总结你在这条链路里最容易踩坑的三个细节
推荐完成路径
第 0 步:先完成阅读,不要一上来就跑代码
请先读 Hugging Face 文章
你至少要能回答:
- 量化在解决什么问题
- LoRA 在解决什么问题
- 为什么数据格式和 tokenizer 不是“次要问题”
- 为什么训练结束后还必须做推理验证和保存 adapter
第 1 步:围绕文章本身整理复现链路
这份作业只有一条主线:
- 尽量复现 Hugging Face 文章里的微调流程
- 同时用课程讲义帮助你解释每一步到底在做什么
任务要求
Part A:把文章主线整理成你自己的“微调地图”
请用 1 页左右内容,重新整理 Hugging Face 文章的核心链路。
至少要包含下面 6 步:
- 加载量化基础模型
- 配置 LoRA adapter
- 整理数据格式
- 加载 tokenizer 与 chat template
- 用 trainer 跑监督微调
- 生成验证并保存 adapter
对每一步,请回答:
- 这一步在解决什么问题
- 如果省略这一步,会出什么问题
Part B:做文章复现
请尽可能复现文章中的关键步骤。
优先级从高到低建议如下:
- 成功加载量化模型
- 成功配置 LoRA
- 成功整理数据为文章所需格式
- 成功加载 tokenizer 并检查 chat template
- 成功建立
SFTTrainer / SFTConfig
- 如果条件允许,完成训练、生成测试和保存 adapter
如果你无法完整训完,也可以提交“部分复现”,但必须明确说明:
- 你完成到了哪一步
- 卡在了哪一步
- 错误信息是什么
- 你为什么判断问题出在这里
注意:
Part C:解释文章里的每一个关键步骤
这是这份作业最重要的一部分。
请按文章主线解释下面这些环节:
- 为什么先量化
- 为什么量化后还要 LoRA
- 为什么要把数据整理成 conversational format
- 为什么 tokenizer / chat template 直接影响训练结果
- 为什么
max_length、packing、bf16 这些参数会决定训练能不能跑通
- 为什么训练后不能只看 loss,还要做生成验证
- 为什么最后保存的不只是 adapter 权重
Part D:写出 3 个你认为最关键的“注意细节”
请从文章和你的复现过程中,选出你认为最容易踩坑的 3 个细节。
例如:
target_modules 为什么不能靠猜
pad_token 和 eos_token 为什么不能随便共用
max_length 为什么比 learning rate 更容易先把你显存打爆
- 为什么 trainer 跑通了,也不等于推理一定正确
- 为什么只保存 adapter 不够,还要保存 tokenizer 和 special tokens
对每个细节,请回答:
- 它是什么
- 为什么重要
- 如果你以后自己做微调,会怎么检查这一点
建议提交内容
请提交一个压缩包,包含:
- 你的实验记录文档(PDF 或 Markdown)
- 你运行过的 notebook、脚本或命令记录
- 至少
2 张运行截图
- 至少
1 段训练后生成结果,或对应的失败日志
- 如果训练未完成,提供错误信息和排查记录
报告建议结构
1. 材料阅读总结
- Hugging Face 文章的主线是什么
- 图书 / 课程讲义帮助你补清了哪些细节
2. 复现路径
- 你实际复现了文章里的哪些步骤
- 你的实验环境是什么
- 你实际跑了哪些文件
3. 结果与证据
- 哪些步骤跑通了
- 输出了什么结果
- 训练后生成效果如何
4. 对照分析
- 文章怎么讲这一步
- 你实际怎么复现这一步
- 课程讲义帮你补清了什么
5. 关键细节与反思
- 你最重视的 3 个细节是什么
- 如果下次换成更大模型,你最先担心哪里出问题
评分重点
这份作业不按“谁训练得更大、更久”来评分,而更看重下面五点:
- 是否真的读懂了文章和课程材料
- 是否完成了有质量的文章复现或部分复现
- 是否能说清文章每一步背后的工程含义
- 是否真正理解了工程细节,而不是只会抄命令
- 是否能用证据说明你做到了哪一步
你真正要带走什么
如果做完这份作业后只记住一句话,那应该是:
复现一篇微调教程,不是照着敲命令,而是要真正理解:装载、适配、格式化、训练、验证和保存为什么缺一不可。
这一章最重要的能力,也不是记住某个 API 名字,而是开始具备下面这种判断:
- 我现在卡住的是量化、LoRA、数据格式、tokenizer、trainer,还是保存与复用这一层?