更新日期:2026-06-23
Part 总数:5 Notebook 总数:31
- 本节要点
-
- Token 和 Tokenizer
-
- 字符级 Tokenizer
-
- 词级 Tokenizer
-
- 子词级 Tokenizer
- 小结
- 作业
-
- BPE 快速体验
-
- 对比 GPT-2 的真实 Tokenizer
-
- 工业级 BPE 的关键设计
-
- 训练真实 Tokenizer
- 小结
- 作业
- 附录:一步步还原 BPE 原理
-
- 从编号到向量
-
- Embedding 查表
-
- 工业界的 Embedding 训练实践
- 小结
- 作业
- 参考资料
-
- 为什么需要位置信息
-
- 正弦位置编码
-
- 组装:Token Embedding + Position Encoding
- 附录:Embedding 的缩放惯例
- 附录:Batch 维度
- 小结
- 作业
- 参考资料
- 附录:正弦位置编码的外推能力
- 本节要点
-
- Attention 的直觉
-
- Scaled Dot-Product Attention
-
- 因果遮蔽
-
- 多头注意力
-
- FFN:看完上下文之后怎么加工信息
-
- Transformer Block 的组装
- 小结
- 附录:RNN 与 Transformer 对比
- 作业
- 参考资料
- 从零实现 MiniGPT
- nanoGPT:从教学版到工程实现
- 小结
- 作业
- 参考资料
-
- 原始 Transformer:Encoder + Decoder
-
- Encoder 与 Decoder
-
- BERT 的输入表示
-
- MLM 预训练
-
- MLM 训练演示
-
- BERT 的微调范式
-
- 真实 BERT 加载演示
-
- BERT 与 GPT 对比
- 小结
- 作业
- Decoder-Only 架构
- 教学版 Transformer Block
- 组件升级
- 旋转位置编码 RoPE
- 现代 LLaMA-style Block
- 多头注意力
- 三代 Block 演进
- 小结
- 作业
- 仓库文件地图:一张表看懂 HuggingFace 仓库
- config.json:把结构参数变成 PyTorch 模块
- tokenizer_config.json:控制文本怎么被翻译成数字
- generation_config.json:控制模型怎么说话
- 三张表串起来:一个请求的完整旅程
- 小结
- 作业
- 参考资料
-
- 普通 Transformer 的 FFN 层
-
- MoE 的核心思想
-
- MoE 的参数 vs 计算量
-
- MoE 的训练难题:负载均衡
-
- MoE 的推理难题:所有专家都要加载
-
- 著名的 MoE 模型
-
- 为什么 MoE 有效:参数和计算的分离
-
- MoE 的进阶话题
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
-
- 先建立直觉:Trainer 到底帮你省了什么?
-
- 一条文本样本如何变成训练样本?
-
- Chat Template 为什么会影响 loss?
-
- 手算 Cross-Entropy:loss 到底怎么算?
-
- 一个 batch 进入模型后发生了什么?
-
- 模型 forward:为什么 labels 可以直接传给 model?
-
- 实现一个迷你 Trainer:工业库的核心骨架
-
- 把迷你 Trainer 映射到 Hugging Face Transformers
-
- 把同一条链路映射到 ModelScope ms-swift
-
- 工业训练 loop 的完整流程图
-
- 一个容易混淆的问题:模型内部 shift 还是数据里 shift?
-
- 作业
- 小结(checklist)
- 上半场:缩放定律
-
- 幂律分布
-
- Kaplan 缩放定律(OpenAI, 2020)— 「优先增大模型」
-
- Chinchilla 缩放定律(DeepMind, 2022)— 「模型和数据同样重要」
-
- 后 Chinchilla 时代:过度训练反而更好
-
- µP:最大更新参数化
- 下半场:资源估算
-
- FLOPs 估算
-
- 显存估算
-
- 缩放定律三次范式转变总结
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
-
- 单卡的极限:再算一遍显存账单
-
- 数据并行(DDP)
-
- ZeRO:把冗余切到多卡
-
- FSDP:PyTorch 原生的 ZeRO-3
-
- DeepSpeed:配置驱动的 ZeRO
-
- Accelerate:统一封装
-
- 三层关系总结
- 小结
- 作业
- 参考资料
-
- 数据 Pipeline 总览
-
- 文本提取:从 HTML 里提取正文
-
- 质量过滤
-
- 去重
-
- 数据混合
-
- 完整 Pipeline 实战:为一个 1B 模型准备数据
-
- 数据质量 > 数量
-
- 工业案例和工具地图
-
- 从 Tokenize 到训练流
-
- 后训练数据:从真实标注到合成数据
- 小结
- 作业
-
- 全量微调的成本
-
- 低秩权重更新
-
- LoRA 的前向传播
-
- LoraLinear 实现
-
- LoRA 的验证
-
- 接入 MiniGPT:给 Attention 装 LoRA
-
- 训练演示:用 LoRA 做 SFT
-
- 推理时合并权重
-
- 实践要点总结
-
- QLoRA
-
- 模型合并
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
- 本节要点
-
- 为什么需要 Function Call
-
- Function Call 的完整流程
-
- 多工具场景
-
- 训练一个支持 Function Call 的模型
-
- 错误处理与失败模式
-
- 现代实践:从 Function Call 到标准化工具调用
- 小结
- 作业
-
- 为什么需要对齐
-
- 对齐全景图
-
- Stage 1:SFT
-
- Stage 2:Reward Model
-
- Stage 3:PPO
-
- DPO
-
- RLHF vs DPO 对比
-
- LLaMA 2 的完整对齐流程
-
- 对齐的局限性与适用场景
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
-
- KV Cache 的代价:手算一笔账
-
- MHA / GQA / MQA:减少 KV 头数的传统思路
-
- MLA 的核心思想:latent 压缩
-
- 从零实现简化 MLA
-
- KV Cache 实测对比
-
- RoPE 与 MLA 的冲突
-
- MLA 在 DeepSeek-V2 / V3 / Kimi K2 的工程收益
- 小结
- 作业
-
- 推理和训练的根本区别
-
- 训练一个能看到效果的模型
-
- Greedy Decoding
-
- Temperature:控制随机性
-
- 采样截断:Top-k 和 Top-p
-
- Beam Search
-
- Repetition Penalty
-
- 对话模板与 System Prompt
-
- 完整生成 Pipeline
- 小结
- 作业
- 参考资料
-
- 推理慢的根源
-
- KV Cache
-
- KV Cache 的内存开销
-
- MHA、MQA、GQA:少存一点 K/V
-
- 模型量化:用更少的位存储权重
-
- GGUF 格式详解
-
- PagedAttention (vLLM)
-
- FlashAttention
-
- 推理的两阶段:Prefill vs Decode
-
- Continuous Batching
-
- 加速手段总结
- 小结
- 作业
- 参考资料
-
- 对称量化的回顾与局限
-
- 非对称量化:引入 zero point
-
- 量化粒度:per-tensor / per-channel / per-group
-
- Activation 量化的难点:outlier channels
-
- GPTQ 的直觉:用二阶信息补偿误差
-
- AWQ 的直觉:保护重要通道
-
- 主流量化方案对比
- 小结
- 作业
- 参考资料
-
- 自回归生成的串行瓶颈
-
- 投机解码的完整流程
-
- 接受与拒绝的判定
-
- 多次实验:实际接受率
-
- 实现 Draft 和 Target 模型
-
- 投机解码的完整实现
-
- 加速比分析
-
- 加速比可视化
-
- 投机解码的变体
-
- 适用场景分析
- 小结
- 作业
- 参考资料
-
- 服务指标:吞吐、延迟、并发
-
- KV Cache 碎片问题
-
- PagedAttention:把 OS 分页搬到 KV Cache
-
- Continuous batching:动态拼 batch
-
- Prefix caching:相同前缀的 KV Cache 复用
-
- Prefill / Decode 分离
-
- 主流推理引擎横评
- 小结
- 作业
-
- 什么是外推
-
- 位置编码回顾
-
- 三种位置编码的外推能力
-
- RoPE:用旋转编码相对位置
-
- 从二维推广到 d 维
-
- 直接外推为什么失败
-
- 核心思想:控制角度范围
-
- 方法一:Position Interpolation
-
- 方法二:NTK-aware
-
- 方法三:YaRN
-
- 三大方法一句话总结
-
- 长上下文的验证方法
-
- 工程真相:长上下文不只是算法问题
-
- 实战:4K 扩展到 32K
-
- 实战:ModelScope + NTK 扩展
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
-
- LLM 的推理缺陷
-
- Chain-of-Thought(CoT)
-
- 从 CoT 到 Thinking 模型
-
- Thinking 模型的训练方法
-
- 训练自己的 Thinking 模型
-
- Thinking 模型的「啊哈时刻」
-
- Thinking 模型的局限性
-
- 主流 Thinking 模型对比
-
- 实操:启动与切换 Thinking 模式
-
- 实战:训练 Thinking 模型
-
- 另一条路:不训练模型,只在推理时多花算力
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
-
- LLM 为什么不能直接读图片?
-
- Patchify:先把图片切成小块
-
- Patch Embedding:再把小块变成向量
-
- 视觉 token 怎么和文本 token 融合?
-
- 还差一个 Projector:把视觉空间翻译到语言空间
-
- 三种主流 VLM 架构
-
- 图片为什么很“贵”?
-
- 训练 VLM:为什么要冻结?
-
- 工程细节:特殊 token、位置编码、多分辨率
-
- 极简 VLM 实现
- 小结
- 作业
-
-
$O(N^2)$ 瓶颈:手算 attention 计算量
-
-
- 路线 A:Linear Attention(换计算顺序)
-
- 路线 B:Sparse Attention(保留 softmax,少算对)
-
- 两条路线的横向对比
-
- Hybrid 架构:linear + softmax 混合
- 小结
- 作业
-
- 评测全景
-
- 核心评测框架 & Repo 推荐
-
- OpenAI-Compatible API 评测实战
-
- LLM-as-Judge:用 强模型当裁判
-
- 评测结果的汇总与对比
-
- AlpacaEval 实战
-
- 专项评测
-
- LLM-as-Judge 的偏差与一致性
-
- 评测指标体系
-
- 常见坑与最佳实践
-
- 实战速查
- 小结
- 作业
-
- 蒸馏的本质
-
- 方法一:Logit 蒸馏(最经典)
-
- 方法二:数据蒸馏(最容易落地)
-
- 方法三:特征蒸馏(进阶)
-
- 实战:蒸馏 7B 模型
-
- 蒸馏与 OPD 对比
-
- 蒸馏的常见问题
- 小结
- 作业
- 模型输出分布
- SFT:向外部数据分布模仿
- RL:在自身行为中筛选高价值方向
- OPD:在自身轨迹上接受教师纠偏
- 三者核心区别
-
- 知识蒸馏回顾
-
- 四种训练方式对比
-
- 问题根源:Exposure Bias(暴露偏差)
-
- OPD 的解决方案:在自己的轨迹上学习
-
- 数学本质:Forward KL vs Reverse KL
-
- OPSD:不需要外部 Teacher 的 OPD
-
- 三种信号粒度:老师告诉你多少信息
-
- 当只能用 sampled-token:KL 估计器
-
- 完整 OPD 训练流程(串起来)
-
- OPD 为什么现在才火
-
- 论文速览(截至 2026-05)
-
- 论文全景:怎么分类看 OPD
-
- 分类维度:从两个角度理解 OPD 生态
-
- OPD 的工业落地
-
- 从训练到上线:模型格式与部署工具
- 小结
- 作业> 可以让 AI 帮忙解释思路,但不建议直接让 AI "做完这道题"。
-
- 为什么不直接用 HuggingFace transformers
-
- PagedAttention 与 RadixAttention:两种 KV Cache 管理思路
-
- 准备模型:Qwen2.5-0.6B
-
- vLLM 离线推理:LLM 类
-
- vLLM 启动 OpenAI 兼容服务
-
- 用 SGLang 部署同一个模型
-
- vLLM 与 SGLang 选型
-
- 部署自训练模型:核心障碍
-
- 路径 A:通过 transformers 注册
-
- 路径 B:在 vLLM 内部直接注册
-
- 自定义词表
-
- 端到端:把 MiniGPT 部署起来
- 小结
- 作业