427 字
2 分钟
MiniMind 学习成果总览:从源码阅读到 Pre-training、SFT 与 DPO
| 材料 | 链接/位置 | 说明 |
|---|---|---|
| 项目源码与个人 fork | github.com/biscuit0613/minimind | 源码、训练脚本和学习型注释版本 |
| 模型前向传播笔记 | 从 Token IDs 到训练 Loss | 逐段追踪模型主干和语言模型损失 |
| Attention 笔记 | Attention 的完整张量流 | 逐段解释 Q/K/V、RoPE、GQA、KV Cache |
| 训练实践笔记 | 从预训练到偏好对齐 | 记录环境、参数、日志、权重和问题 |
| LoRA 实践笔记 | LoRA 微调与结果分析 | 记录数据、配置和能力退化现象 |
| 训练权重 | 个人 Hugging Face 链接 | 本人训练的 SFT 与 LoRA 权重 |
学习内容
本项目围绕一个小型 Decoder-only 语言模型,完成了从源码阅读到训练实践的学习闭环:
- 模型结构:配置、Embedding、Decoder Block、Attention、RoPE、GQA、KV Cache 和 LM Head;
- 训练流程:Pre-training、SFT、DPO,以及数据处理和 loss mask;
- 工程实现:混合精度、梯度累积、梯度裁剪、checkpoint、日志和模型加载。
注释代码
个人 fork 中的 *_annotated.py 是关键代码的学习型注释版本,主要补充输入输出形状、对应的数学操作,以及修改代码可能造成的训练行为变化。它们用于展示源码理解,不替代项目原始实现。
实践摘要
我在 A100-80GB 环境下完成了 64M 配置的 Pre-training、SFT、DPO 和 LoRA 实验,并保存了各阶段权重。三阶段训练参数和日志见训练实践笔记,LoRA 配置和结果对比见LoRA 实践笔记。
本次实验主要用于验证训练链路和理解代码机制。受数据规模、训练步数和评测设置限制,loss 下降不能直接等同于模型能力提升。
MiniMind 学习成果总览:从源码阅读到 Pre-training、SFT 与 DPO
https://biscuit0613.github.io/posts/minimind/00-learning-summary/