Skip to content

Repository files navigation

LLM 微调与后训练入门项目

这是一个面向初学者的 LLM 学习仓库,所有核心教学内容都以 Jupyter Notebook(.ipynb)形式组织。

项目采用双路线设计:

  • 基础线:帮助你从环境配置、预训练模型使用、SFT、LoRA、量化、部署一路走通
  • 进阶线:帮助你从奖励建模、偏好数据到 PPO / DPO / ORPO / KTO / GRPO 等后训练对齐算法建立系统理解

每个重点 notebook 都尽量保持同一教学节奏:

背景与目标 -> 手动推导 -> 纯 PyTorch toy 计算 -> 调包小 demo -> 结果对照 -> 常见坑 -> 小结 / 练习

设计目标

  • 默认目标硬件:单卡 RTX 508016GB 显存
  • 默认目标:仓库中的 notebook 都可以在这个硬件上以“小规模教学配置”运行
  • 代码资产仍以 .ipynb 为主,不把主教学逻辑迁移成 .py 包结构
  • 对复杂算法先讲“为什么”,再讲“怎么调包跑出来”

Course Roadmap

适合谁

  • 想系统入门大模型工程实践的同学
  • 希望用 Notebook 边学边跑的同学
  • 已经会一点 Transformers / PEFT,想继续补后训练对齐主线的同学
  • 想把“手动理解原理”和“工程上手 demo”放在一个仓库里对照学习的同学

3 分钟选学指南

如果你是第一次点进这个仓库,不一定需要按 01 -> 15 全部顺序跑。可以先按自己的目标选路径:

你的目标 建议先看 为什么这样安排
第一次系统学 LLM 01 -> 02 -> 02b -> 03 先把环境、表示原理、预训练闭环和最基础的下游训练链路建立起来。
只有 1 小时,想先建立全局图 01 -> 02 -> 07 这样最快能看到“预训练模型怎么用”和“后训练全景图”。
只关心微调实战 01 -> 03 -> 04 -> 05 这条线最适合先建立 SFT、LoRA、量化的工程直觉。
只关心 RLHF / 对齐 01 -> 04 -> 07 -> 08 -> 09 -> 11 -> 12 先把 LoRA 和偏好数据准备好,再进入奖励建模和在线 / 离线对齐。
只想理解前沿,不急着复现 07 -> 12 -> 13 -> 14 -> 15 + docs/frontier_algorithm_tracker.md 先掌握后训练主线,再看推理蒸馏、多模态、在线 RL 系统化扩展。
只有 CPU 或显存明显小于 16GB 01 的环境检测与显存估算、02 的手动部分、05 的手动量化、07 的算法地图 先把原理吃透,再择机迁移到有 GPU 的环境跑 demo。

项目结构

llm-finetuning-notebooks/
├── notebooks/
│   ├── 01_environment_setup.ipynb
│   ├── 02_pretrained_model_usage.ipynb
│   ├── 02b_causal_language_model_pretraining.ipynb
│   ├── 03_full_finetuning.ipynb
│   ├── 04_parameter_efficient_finetuning.ipynb
│   ├── 05_quantization_techniques.ipynb
│   ├── 06_deployment_inference.ipynb
│   ├── 07_post_training_overview.ipynb
│   ├── 08_reward_modeling.ipynb
│   ├── 09_dpo_orpo_alignment.ipynb
│   ├── 10_kto_alignment.ipynb
│   ├── 11_ppo_alignment.ipynb
│   ├── 12_grpo_alignment.ipynb
│   ├── 13_reasoning_distillation_and_open_r1.ipynb
│   ├── 14_multimodal_vlm_and_omni_overview.ipynb
│   └── 15_online_rl_variants_and_systems.ipynb
├── data/
│   ├── raw/
│   ├── processed/
│   └── README.md
├── assets/
│   └── figures/
├── requirements.txt
├── environment.yml
├── LICENSE
├── README.md
└── .gitignore

安装环境

仓库现在只维护一套统一环境,覆盖基础微调、LoRA/量化、部署 demo,以及 trl 相关的后训练对齐 notebook。

方式 1:venv + pip

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

方式 2:conda

conda env create -f environment.yml
conda activate llm

学习路径

路线 A:基础线

  1. 01_environment_setup.ipynb
  2. 02_pretrained_model_usage.ipynb
  3. 02b_causal_language_model_pretraining.ipynb
  4. 03_full_finetuning.ipynb
  5. 04_parameter_efficient_finetuning.ipynb
  6. 05_quantization_techniques.ipynb
  7. 06_deployment_inference.ipynb

路线 B:从基础微调到后训练对齐

  1. 01_environment_setup.ipynb
  2. 02_pretrained_model_usage.ipynb
  3. 03_full_finetuning.ipynb
  4. 04_parameter_efficient_finetuning.ipynb
  5. 07_post_training_overview.ipynb
  6. 08_reward_modeling.ipynb
  7. 09_dpo_orpo_alignment.ipynb
  8. 10_kto_alignment.ipynb
  9. 11_ppo_alignment.ipynb
  10. 12_grpo_alignment.ipynb

如果您已经理解了 SFT / PEFT,可以直接从 07_post_training_overview.ipynb 开始看。

每个 Notebook 在讲什么

建议先至少完成基础线中的 0104,再进入进阶线。

  1. 07_post_training_overview.ipynb
  2. 08_reward_modeling.ipynb
  3. 09_dpo_orpo_alignment.ipynb
  4. 10_kto_alignment.ipynb
  5. 11_ppo_alignment.ipynb
  6. 12_grpo_alignment.ipynb

路线 C:可选前沿扩展

如果你已经理解了 07-12 的后训练主线,可以继续看这本可选扩展 notebook:

  1. 13_reasoning_distillation_and_open_r1.ipynb
  2. 14_multimodal_vlm_and_omni_overview.ipynb
  3. 15_online_rl_variants_and_systems.ipynb

一眼看全路线

如果你更喜欢先看一张静态图,再决定从哪里开始,可以先看上面的路线图。它主要帮助你快速区分:

  • 哪些 notebook 属于基础工程主线
  • 哪些 notebook 属于后训练对齐主线
  • 哪些内容更适合作为前沿趋势扩展阅读
flowchart LR
    A["01 环境配置"] --> B["02 预训练模型使用"]
    B --> C["03 全参数微调"]
    C --> D["04 LoRA / PEFT"]
    B --> E["05 量化"]
    B --> F["06 部署与推理"]
    D --> G["07 后训练全景"]
    G --> H["08 奖励建模"]
    H --> I["09 DPO / ORPO"]
    H --> J["10 KTO"]
    H --> K["11 PPO"]
    H --> L["12 GRPO"]
    L --> M["13 推理蒸馏与 open-r1"]
    M --> N["14 多模态 VLM 与 Omni"]
    L --> O["15 在线 RL 变体与系统工程"]
Loading

可以把它粗略理解成三层:

  • 01-06:先把“模型怎么加载、怎么微调、怎么压缩、怎么部署”走通
  • 07-12:再把“人类偏好如何变成训练目标”建立成一条完整后训练主线
  • 13-15:最后再把视野扩到推理蒸馏、多模态和更前沿的在线 RL 系统工程

学完后你会真正看到什么

这个仓库刻意不把目标写成“直接复现 SOTA”,而是让你在单卡 RTX 5080 16GB 上看到一批足够直观、足够有教学价值的结果。

学习路线 你能亲手看到的结果 为什么这很重要
01-02 基础入门 环境检测报告、tokenization 结果、embedding 形状变化、toy attention 权重 这会让你不再只把模型当黑盒,而是真的知道输入是怎么变成隐藏表示的。
03 全参数微调 IMDb 小子集上的 loss 变化、logits 与预测类别变化 这是“训练真的在发生”的第一现场,能帮你把交叉熵、梯度更新和模型行为连起来。
04 LoRA / PEFT 可训练参数比例显著下降、LoRA 与全参微调的资源差异对照 这会让你直观看到“为什么大家都在用 PEFT”,而不只是背一个缩写。
05 量化 量化前后显存占用差异、输出质量与误差的基本对照 你会开始理解“为什么小显存也能跑模型”,以及这背后的代价是什么。
06 推理部署 greedy / top-k / top-p / temperature 输出差异、本地 API / Gradio demo 这一步会把“训练完的模型”真正变成一个能交互的应用原型。
08-10 离线对齐 chosen / rejected 分数差、Reward loss 变化、DPO / ORPO / KTO 不同监督方式带来的输出偏好变化 你会看到“人类偏好”怎样一步步变成模型可以学习的训练信号。
11-12 在线对齐 reward、advantage、ratio、KL、group reward 的 toy 计算与短训练反馈 这会帮你建立 PPO / GRPO 不是神秘黑魔法,而是可拆开的优化过程的直觉。
13-15 前沿扩展 open-r1 工作流地图、CLIP 图文匹配结果、在线 RL 变体与系统框架地图 这能帮你把“眼前的小 demo”连接到今天开源社区真正还在继续演化的方向。

如果你准备把这个仓库分享给别人,最值得展示的通常不是“跑了多少步”,而是这些肉眼可见的结果:

  • 从 token 到 attention 的中间张量变化
  • 微调前后预测或生成风格的变化
  • LoRA / 量化带来的资源节省
  • 偏好对齐后 reward 或输出倾向的变化
  • 多模态或在线 RL 扩展给出的新视角

这些结果都故意设计成“小规模也能看出趋势”,这是这个仓库和重型 benchmark 复现仓库最不一样的地方。

如果你准备把这个仓库公开给别人看,或者后面想把它整理成更好看的 GitHub 首页,可以继续看:

这个小指南会帮你快速决定:

  • 哪几本 notebook 最值得截图
  • 哪几类结果最适合放首页
  • 如果 README 里只能放 4 张图,应该优先选哪 4

如果你已经准备真的开始整理首页图位,而不只是想法层面规划,还可以继续看:

这里面已经补好了:

  • 推荐截图文件名
  • 推荐图注文案
  • 可以直接贴回 README 的 Markdown 模板

第一批示例图预览

下面这 4 张图已经作为第一批真实展示卡片落地,全部来自 notebook 里最轻量、最适合公开展示的手动部分。

原理拆解 单卡友好训练
Token and attention toy result LoRA parameter ratio
02 用 toy tokenization 和 attention 把输入如何变成中间表示拆开来看。 04 用 LoRA 参数对比说明为什么 PEFT 对单卡实验这么重要。
对齐直觉 多模态扩展
Alignment score or reward toy result CLIP zero-shot match
08 把 chosen / rejected 分数差和 pairwise loss 变成肉眼可见的训练信号。 14 先用 patch / embedding / similarity 建立多模态直觉,再连接到 VLM / Omni。

这组图的定位不是“benchmark 结果截图”,而是“帮助第一次访问者一眼看懂这个仓库到底教什么、能跑出什么、为什么适合单卡 16GB 环境”。

展示导航

如果你现在不是想完整读 README,而是想先挑一组结果快速看,这里可以直接按目的进入:

如果你还想补“训练变化”或“量化资源变化”这类更工程向的展示卡片,当前展示目录里也已经补上了。为了不让首页变成一长串文件名,这里按“训练 / 对齐 / 扩展”分成三组来看会更清楚:

展示分组 适合先看什么 对应卡片 它主要回答什么问题
训练与资源 想先确认“模型真的在学”,以及“单卡为什么还能跑” imdb_finetune_loss.pngquantization_memory_compare.png 微调有没有真的发生、量化到底省了什么资源。
后训练对齐 想先把 08-12 的主线关系看懂 offline_alignment_family_map.pngonline_rl_ppo_grpo_compare.pngreasoning_distillation_open_r1_map.png 离线对齐怎么分家、PPO -> GRPO 直觉上怎么变、推理蒸馏为什么会自然接在后训练后面。
前沿扩展 想先建立“多模态”和“系统工程”方向的全局图 multimodal_evolution_map.pngonline_rl_systems_map.png CLIP -> VLM -> Omni 为什么是一条连续路线,以及 TRL / OpenRLHF / verl / open-r1 分别更适合拿来理解什么。

如果你后面要发帖、做项目首页,或者单独向别人介绍这个仓库,最省事的做法通常不是把这 7 张图全部平铺出来,而是先选你这次最想强调的一组:

  • 想强调“单卡也能学到真实训练直觉”,优先选“训练与资源”
  • 想强调“这个仓库把 RLHF / 对齐讲成了完整主线”,优先选“后训练对齐”
  • 想强调“这个仓库不只停在基础,还连到了今天的多模态和系统工程”,优先选“前沿扩展”

按时间预算开始

如果你只是第一次来到这个仓库,不一定要立刻按 01 -> 15 全部跑完。更省力的做法通常是先按时间预算选入口:

你现在有多少时间 最推荐的入口 你会先建立什么直觉
10 分钟 看上面的路线图、4 张核心预览图,再看“训练与资源”两张卡 先知道这个仓库教什么、为什么不是纯调包、为什么能围绕单卡 16GB 展开。
30 分钟 在上一步基础上,再看“后训练对齐”三张卡,并翻一下 docs/frontier_algorithm_tracker.md 里的“经典算法时间线” 快速建立 SFT -> Reward Modeling -> DPO / PPO / GRPO 这条后训练主线的大图。
2 小时 轻跑 02 的手动部分、03 的 IMDb 小子集关键单元、08 的 pairwise loss、11 的 PPO toy 计算、14 的 CLIP demo 不只是看展示图,而是真的亲手走一遍“预训练使用 -> 微调 -> 对齐 -> 多模态扩展”的小闭环。

如果你对在线 RL 的系统工程更好奇,可以在这条 2 小时路径最后补看 15_online_rl_variants_and_systems.ipynb 的系统地图部分。

如果你准备完整执行 notebook,而不是只做第一次浏览,再回到下面的索引表,按前置要求逐步走会更稳。

第一次真正动手:优先跑哪 3 本

如果你已经不只是想“看看这个仓库讲什么”,而是准备真正开始跑,最省力的做法通常不是从 01 一口气跑到 15,而是先完成一个最小闭环。

你的目标 最推荐先跑的 3 为什么这样更适合第一次动手
第一次完成一个最基础的训练闭环 01 -> 02 -> 03 这组会把“环境可用、模型会吃输入、训练真的发生”三件最关键的事先建立起来。
已经懂一点微调,想第一次碰对齐 07 -> 08 -> 09 先看全景图,再亲手算 reward / pairwise loss,最后再看 DPO / ORPO 怎样把偏好数据变成训练目标。
已经理解基础与对齐,想快速建立前沿感 13 -> 14 -> 15 这组能把你从推理蒸馏、轻量多模态 demo,一路带到在线 RL 系统工程地图。

如果你拿不准自己现在属于哪一类,一个很稳的默认选择是:

  1. 先跑 01 -> 02 -> 03
  2. 跑通以后再补 07 -> 08 -> 09
  3. 最后按兴趣进入 13 -> 14 -> 15

这样安排的好处是,你几乎每一阶段都会看到肉眼可见的结果变化,而不是在很长一段时间里只看到环境配置或一堆抽象名词。

跑完以后,怎样算真的跑通

第一次动手时,最容易卡住的不是“有没有按钮可以点”,而是不知道“现在这样到底算没算成功”。你可以先用下面这张表做最小自检:

路径 最小跑通信号 如果没看到,先优先检查什么
01 -> 02 -> 03 01 能正常输出环境检测结果;02 能看到 token / embedding / attention 的中间结果;03 的 IMDb 小子集 loss 或预测结果出现变化 先检查 kernel 是否切到正确环境、transformers 是否装对、训练部分是否把 batch size 设得过大。
07 -> 08 -> 09 07 能说清 prompt / chosen / rejected 的数据形式;08 能算出 pairwise loss 或看到 reward 分数差;09DPOTrainer / ORPOTrainer 至少能完成一次前向或极短训练 先检查 advanced 环境是否启用、偏好数据字段名是否对应、LoRA 与 tokenizer 设置是否一致。
13 -> 14 -> 15 13 能看到 teacher / student 分布差异或 KL toy 结果;14 的 CLIP demo 能把更匹配的文本排到前面;15 的 trainer 能力检查或系统地图部分能顺利跑完 先检查模型下载是否完整、图像依赖是否安装、是否误把重型训练部分当成默认必须跑完的内容。

如果你当前机器状态一般,或者你只是第一次验证环境,建议先遵守两个顺序:

  1. 先跑每本 notebook 的“手动推导 / toy 计算”部分,再决定要不要继续跑调包 demo。
  2. 一旦遇到显存吃紧,优先先降 batch sizemax_lengthmax_steps,不要第一时间怀疑整条路线有问题。

单卡 RTX 5080 16GB 首次运行建议

这个仓库默认就是围绕单卡 16GB 设计的,但“能跑通”和“第一次就把每个重型单元全跑完”不是一回事。第一次上手时,更稳的做法是先按下面这个顺序来:

路径 第一次建议先跑什么 第一次建议先跳过什么 更稳的默认做法
01 -> 02 -> 03 01 全部环境检测、02 全部手动部分、03 的 IMDb 小子集与极短训练 03 里任何会明显拉长训练时间的完整对照实验 先确认 loss 会动、预测会变,再决定要不要加步数。
07 -> 08 -> 09 07 的数据格式和算法地图、08 的 pairwise loss、09 的单样本目标函数与最短 trainer smoke demo 08-09 里所有“想看更明显生成变化”而额外加长的训练轮数 先把 chosen / rejected、reward、DPO / ORPO 关系跑通,不要一上来追输出质量。
13 -> 14 -> 15 13 的 KL toy 计算、14 的 CLIP demo、15 的系统地图和 trainer 能力检查 任何默认不是“最小 smoke demo”的扩展训练或长输出比较 先把“蒸馏 / 多模态 / 在线 RL 系统图”理解清楚,再决定是否继续加实验量。

如果你想把第一次运行的失败概率再降一点,可以直接把这几个参数当成默认优先级:

  1. 先减 batch size
  2. 再减 max_length 或生成长度
  3. 再减 max_steps
  4. 最后才考虑换更小模型或暂时只跑手动部分

对这个仓库来说,这个顺序很重要,因为我们优先想保住的是“教学闭环还在”,而不是第一轮就把每个包封装 demo 跑到最完整。

默认参数起点:第一次不要比这更激进

如果你准备自己手动改 notebook 参数,而不是完全照当前默认值运行,第一次建议不要一上来就把配置放大。更稳的起点可以直接参考下面这张表:

路径 当前 notebook 里的保守量级 第一次建议先别超过什么 为什么这样更稳
01 -> 02 -> 03 03 里 tokenizer max_length=128max_steps=30per_device_train_batch_size=8 如果你是第一次跑,先不要把 max_length 提到 256+,也不要把步数翻倍 这条线的目标是先确认 loss 会动、预测会变,而不是追第一轮就更高精度。
07 -> 08 -> 09 08max_steps=5batch_size=209DPO/ORPOmax_steps=3batch_size=1 第一次先不要加长训练步数,也不要把 batch 往上提 这条线最重要的是把偏好数据、reward、DPO / ORPO 关系跑通,不是先追生成质量。
11 -> 12 11PPOTrainer 默认只构建、不直接训练;12GRPOmax_steps=3batch_size=1num_generations=4max_prompt_length=128max_completion_length=32 第一次先不要直接打开更长 PPO 训练,也不要把 num_generations 和 completion length 一起放大 在线 RL 很容易同时吃掉 rollout、reward、生成长度三部分资源,第一轮先保住 smoke demo 最重要。
13 -> 14 -> 15 13 先用 2 条 prompt 做 teacher / student 蒸馏;14 用合成图片 + 轻量 CLIP15 主要是系统地图和 trainer 能力检查 第一次先不要自己扩成更多 prompt、更长文本或更重的多模态模型 这一组的目标是先建立前沿直觉,不是把大模型工作流完整搬到单卡上。

如果你真的需要手动改参数,可以优先按这个顺序调:

  1. 先把 batch size 往下调
  2. 再把 max_steps 压短
  3. 再把 max_length / max_completion_length 压短
  4. 只有前面还不够时,才换更小模型或先只跑手动部分

这和很多人直觉不一样,但对这个仓库更合适,因为我们优先想保住的是“这条教学链能不能完整跑通”,而不是“第一轮能不能把所有资源都吃满”。

第一次跑完后,最值得保留什么结果

如果你已经成功跑通一条路径,下一步最值得做的通常不是立刻加大训练量,而是先把最能说明“我真的学到了什么”的结果保留下来。

路径 第一次最值得保留的结果 为什么优先留这个
01 -> 02 -> 03 01 的 GPU / CUDA 检测、02 的 token / attention 中间结果、03 的 loss 或预测变化 这三类结果能把“环境可用 -> 模型会吃输入 -> 训练真的发生”完整串起来。
07 -> 08 -> 09 08 的 chosen / rejected 分数差、09 的 DPO / ORPO 极短训练日志或生成倾向变化 这最能体现“偏好数据真的变成了训练信号”,也是进阶线最容易讲明白的一组证据。
11 -> 12 reward、advantage、ratio、group reward 的 toy 表格或关键打印结果 在线 RL 的价值不一定先体现在长训练结果上,先把这些中间量留住反而更有教学价值。
13 -> 14 -> 15 13 的 KL distillation 数值、14 的 CLIP 匹配排序、15 的系统地图或框架分工表 这组结果最适合证明“仓库不只停在基础,还继续连到了蒸馏、多模态和在线 RL 系统工程”。

如果你后面准备发 GitHub 首页、项目介绍页或分享帖,这一节保留下来的结果,基本就是最自然的第一批素材。

第一次公开分享:最小 4 图套餐

如果你第一次想把这个仓库发给别人看,不需要一上来就把所有结果都摊开。更稳也更清楚的做法,通常是先用 4 张图讲完最核心的四件事:

1 2 3 4
路线图:assets/figures/course_roadmap.svg 原理拆解:pretrained_attention_toy.png 单卡训练 / 对齐:lora_parameter_ratio.pngalignment_score_or_reward.png 前沿扩展:clip_zero_shot_match.png

这样选的好处是:

  • 1 张先回答“这个仓库整体教什么”
  • 2 张回答“这不是纯调包教程”
  • 3 张回答“单卡训练和对齐到底能看到什么变化”
  • 4 张回答“这个仓库还会继续把你带到多模态与前沿方向”

如果你这次更想强调某一条线,也可以这样替换:

  • 想强调“训练真的发生了”:把第 3 张换成 imdb_finetune_loss.png
  • 想强调“资源友好”:把第 3 张换成 quantization_memory_compare.png
  • 想强调“后训练对齐是主角”:把第 3 张换成 offline_alignment_family_map.pngonline_rl_ppo_grpo_compare.png

如果你这次是发给不同背景的人看,一个很省事的做法是:前后两张尽量不动,只按受众换第 3 张。

你主要发给谁看 3 张更推荐换成什么 这样更容易让对方立刻看懂什么
工程 / 训练同学 imdb_finetune_loss.pngquantization_memory_compare.png 训练确实发生了,而且资源约束是可见、可控的。
后训练 / 对齐方向同学 offline_alignment_family_map.pngonline_rl_ppo_grpo_compare.png 这个仓库不只讲基础微调,还把离线对齐和在线 RL 主线串起来了。
只学过基础 LLM 的同学 lora_parameter_ratio.png LoRA 最容易建立“单卡也能训,而且不是纯理论”的第一直觉。

对大多数第一次公开分享来说,更稳的默认骨架仍然是:

  • 1 张讲结构:course_roadmap.svg
  • 2 张讲原理:pretrained_attention_toy.png
  • 3 张按受众切换
  • 4 张保留 clip_zero_shot_match.png,把故事自然延伸到多模态与前沿方向

如果你第一次发帖时还不想自己想图注,可以直接用这四句:

  • course_roadmap.svg:这张图先把仓库的基础线、进阶线和前沿扩展入口一次讲清楚。
  • pretrained_attention_toy.png:这个仓库不只调包,也会手动拆开 token、embedding 和 attention 给你看。
  • lora_parameter_ratio.pngalignment_score_or_reward.png:单卡环境下,你能直观看到训练资源差异,或者看到偏好信号怎样变成训练目标。
  • clip_zero_shot_match.png:学到后面,这个仓库还会自然把你带到多模态与更前沿的方向。

第一次公开分享时,优先把故事讲清楚,比一次塞进更多图更重要。

想继续跟进前沿?

如果你已经跑完基础线或进阶线,想知道“这些算法在真实开源世界里又往哪里发展了”,可以继续看:

这个文档会持续区分两类内容:

  • 经典算法主线:哪些方法是你应该先真正吃透的基础
  • 当前前沿增量:哪些新算法、新框架值得继续跟进,但未必适合立刻塞进单卡教学主线

Notebook 索引表

编号 主题 手动部分 调包部分 预计运行时间 显存目标 前置要求
01 环境配置 手动估算参数、dtype、activation 的显存占用 安装并验证 torch / transformers / peft 10-15 分钟 CPU / 单卡 16GB
02 预训练模型使用 手动 tokenization、embedding lookup、toy self-attention AutoTokenizer / AutoModel / pipeline 15-25 分钟 单卡 16GB 01
02b Causal LM 预训练 shifted cross-entropy、perplexity、单步优化 Trainer + Wikitext-2 小子集 + tiny GPT-style model 30-50 分钟 单卡 16GB 01-02
03 全参数微调 手动 cross-entropy、logits、梯度更新一步 Trainer + IMDb 小子集 25-45 分钟 单卡 16GB 01-02
04 LoRA / PEFT 手动推导 W + ΔWΔW = BA peft + LoRA 分类微调 25-45 分钟 单卡 16GB 01-03
05 量化 手动 8-bit 量化、zero-point、scale、误差 bitsandbytes 8-bit / 4-bit demo 20-35 分钟 单卡 16GB 01-02
06 部署与推理 手动比较 greedy / top-k / top-p / temperature FastAPI + Gradio + distilgpt2 20-30 分钟 单卡 16GB 01-02
07 后训练全景 手动梳理偏好数据格式与算法关系 TRL trainer 映射表 15-25 分钟 CPU / 单卡 16GB 01-04
08 奖励建模 手动计算 Bradley-Terry / pairwise ranking loss RewardTrainer 小型 smoke demo 25-40 分钟 单卡 16GB 07
09 DPO / ORPO 手动拆解单样本目标函数 DPOTrainer / ORPOTrainer 小型 demo 30-50 分钟 单卡 16GB 07-08
10 KTO 手动理解 desirable / undesirable 监督 KTOTrainer 小型 demo 25-40 分钟 单卡 16GB 07-08
11 PPO 手动计算 reward、advantage、ratio、clip、KL PPOTrainer 小型 demo 35-60 分钟 单卡 16GB 07-08
12 GRPO 手动计算 group reward 和 group-normalized advantage GRPOTrainer 小型 demo 35-60 分钟 单卡 16GB 07-08
13 推理蒸馏与 open-r1 手动理解 KL distillation、teacher/student 分布迁移 小 teacher / student 蒸馏 smoke demo 25-45 分钟 单卡 16GB 07-12
14 多模态 VLM 与 Omni 手动理解图像 patch、embedding、图文相似度 轻量 CLIP zero-shot 图文匹配 demo 20-40 分钟 单卡 16GB 02, 07, 13
15 在线 RL 变体与系统工程 手动理解 PPO / RLOO / GRPO / GSPO-token 的 baseline 与 ratio 直觉 TRL trainer 能力检查 + OpenRLHF / verl / open-r1 系统地图 25-45 分钟 单卡 16GB 11-14

基础线说明

01_environment_setup.ipynb

  • 检查 CPU、内存、GPU、CUDA
  • 验证基础依赖是否安装成功
  • 手动估算参数量与显存占用的关系

02_pretrained_model_usage.ipynb

  • 用最小例子理解 token、embedding、attention
  • 再用 Hugging Face 包直接加载真实模型看结果
  • 如果你想把“表示原理”继续连到“预训练目标、loss 与训练循环”,请继续看 02b_causal_language_model_pretraining.ipynb

02b_causal_language_model_pretraining.ipynb

  • openai-community/gpt2 tokenizer + wikitext-2-raw-v1 理解 Causal LM 训练样本如何形成
  • 手动拆解 shifted cross-entropy、ignore_index=-100、perplexity 和单步 optimizer update
  • 再用 Trainer 跑一个 tiny GPT-2 style from-scratch 小规模 smoke pretraining

03_full_finetuning.ipynb

  • 保留 IMDb 作为分类任务
  • 先手动理解 cross-entropy 和一次梯度更新
  • 再用 Trainer 做小规模全参数微调

04_parameter_efficient_finetuning.ipynb

  • 先手动理解 LoRA 为什么能减少可训练参数
  • 再用 peft 跑一个小型 LoRA 微调 demo
  • 结尾补 “AdaLoRA / DoRA / IA3” 的前沿 PEFT 卡片

05_quantization_techniques.ipynb

  • 手动理解量化、反量化、误差来源
  • 再用 bitsandbytes 跑 8-bit / 4-bit 加载和简单生成

06_deployment_inference.ipynb

  • 先手动比较几种常见 decoding 策略
  • 再用 FastAPIGradio 组织一个轻量推理服务

进阶线说明

07_post_training_overview.ipynb

  • 建立 SFT、Reward Modeling、DPO、ORPO、KTO、PPO、GRPO 的整体地图
  • 用极小样本解释三类常见训练数据格式:
    • prompt / chosen / rejected
    • prompt / completion / desirable
    • prompt / completion / reward

08_reward_modeling.ipynb

  • 手动计算偏好概率和 Bradley-Terry 风格损失
  • 再用 RewardTrainer 跑一个最小奖励建模 demo

09_dpo_orpo_alignment.ipynb

  • 对照解释 DPO 和 ORPO 的目标函数差异
  • 使用相同的小型偏好数据集做调包对比

10_kto_alignment.ipynb

  • 解释 KTO 和 pairwise preference 的不同监督形式
  • 展示 KTOTrainer 的最小可运行形式

11_ppo_alignment.ipynb

  • 先在离散 toy policy 上手动算 reward、advantage、clip、KL
  • 再用小型模型和简单 reward function 展示 PPOTrainer

12_grpo_alignment.ipynb

  • 解释组内相对奖励、为什么不需要 value head
  • 对比 GRPOTrainer 和 PPO 的直观差异

13_reasoning_distillation_and_open_r1.ipynb

  • 手动拆解 teacher / student 的分布蒸馏直觉
  • gpt2 -> distilgpt2 做极小蒸馏 smoke demo
  • open-r1 看成“数据 + 蒸馏 + RL + 评测”的公开工作流

14_multimodal_vlm_and_omni_overview.ipynb

  • 手动理解图像 patch、patch embedding 和图文相似度
  • 用轻量 CLIP demo 看 zero-shot 图文匹配
  • CLIP (2021) 继续连接到 InternVL-UQwen3-Omni 这类统一多模态 / omni 路线

15_online_rl_variants_and_systems.ipynb

  • 手动比较 PPO / RLOO / GRPO / GSPO-token 在 baseline、advantage、ratio 上的直觉差异
  • 用最小 API 检查 TRL 里的相关 trainer 能力边界
  • OpenRLHFverlopen-r1 放进一张“算法 + 系统工程”地图

运行约束

  • 项目默认目标硬件是单卡 RTX 508016GB 显存
  • 所有调包 demo 都以“小规模教学配置”为默认设计目标
  • 进阶对齐部分优先使用小模型、LoRA、短输出、极小数据集或极少训练步数
  • 如果你的显存小于 16GB
    • 优先只跑手动推导部分
    • 适当减小 batch size
    • 缩短 max_new_tokens、训练步数和样本数

数据与输出目录

  • data/raw/data/processed/ 用于缓存和中间结果
  • 训练输出、量化输出和对齐实验结果默认不上传 GitHub
  • 你可以把 notebook 里生成的结果目录视为实验产物,而不是仓库源码的一部分

如何参与贡献

如果你想一起把这个仓库做得更清楚、更系统、更适合初学者公开学习,可以先看:

如果你是第一次参与这个项目,不用一上来就改大块 notebook。更稳的起步方式通常是先选下面三类“小而值”的改动:

你想帮什么忙 最适合的第一步 建议先用哪个模板 为什么适合第一次参与
让讲解更清楚 挑一个 notebook 或 README 段落,补一句更容易懂的解释,或调整一小段章节顺序 Notebook improvement 风险小,而且最容易直接帮助初学者。
让默认配置更稳 报告或建议某个 demo 的 batch sizemax_stepsmax_length 更保守的起点 Notebook improvementBug report 很贴合单卡 RTX 5080 16GB 目标,也最容易验证。
帮仓库继续跟上前沿 补一条官方文档、官方仓库或论文链接,并说明它更适合“教学实践”还是“阅读跟进” Frontier update 不会打乱主线,但能持续提升仓库完整度。

第一次贡献时,通常不建议直接从下面这些开始:

  • 一次性新增多本 notebook
  • 重写基础线 01-06 或进阶线 07-12 的整体结构
  • 把默认环境改得更重,或默认要求多卡 / 更大显存
  • 只补很多新名词,但没有说明它为什么值得初学者学

里面写清楚了:

  • 这个仓库最欢迎哪几类贡献
  • notebook 改动时要遵守哪些 16GB 单卡约束
  • 提交前怎样检查 .ipynb 的 JSON / AST 结构

如果你是在 GitHub 上参与,也可以直接使用仓库内置的:

  • issue templates
  • PR template
  • notebook structure check workflow

如果你是第一次提 issue,也不用写得很长。最短先写清这 4 件事,通常就已经很有帮助:

  1. 你在哪个文件或哪本 notebook 遇到了问题
  2. 你做到哪一步、哪一格、或用了什么默认参数
  3. 你实际看到了什么现象或报错
  4. 你原本以为应该看到什么

如果问题和单卡 RTX 5080 16GB 运行边界有关,最好再顺手补一句:

  • batch size
  • max_steps
  • max_lengthmax_completion_length
  • 是否量化 / 是否 LoRA / 是否只跑手动部分

这样别人通常不用先来回追问很多轮,就能更快帮你判断:这是环境问题、配置太激进、文档不清楚,还是 notebook 本身需要改。

如果你不想自己组织措辞,也可以直接去 CONTRIBUTING.md 里复制“第一次提 issue”的最小示例,再按自己的情况改几行。

如果你已经准备提 PR,也可以先用同一个文档里的“第一次提 PR 最短怎么写”和可复制示例。对这个仓库来说,第一次 PR 最重要的通常不是写得长,而是先说清:改了什么、为什么改、怎么验证。

常见问题

为什么要同时保留“手动推导”和“调包结果”?

因为很多初学者的问题不是“不会写代码”,而是“不知道这个 loss 到底在优化什么”。先手动拆开,再看 trainer 接口,会更容易形成稳定直觉。

为什么进阶线单独拆依赖?

因为 trl、较新的 transformerspeftaccelerate 组合变化更快。如果把它们直接塞回基础线,反而容易让 0106 的轻量体验变脆弱。

为什么有些 demo 只跑极小步数?

因为项目目标是“帮助理解”,不是“在仓库里直接做大规模训练”。只要能看到 loss 变化、偏好概率变化或输出风格变化,教学目的就达到了。

许可证

本项目使用 MIT License,详见 LICENSE

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages