Stanford  /  Spring 2026
CS336

Language Modeling from Scratch

从分词器到 RLVR,把一个现代语言模型的每一层抽象都亲手拆开重建。这里是全 17 讲的中文精读文档。

讲师:Percy Liang · Tatsunori Hashimoto 课程主页 GitHub 课程录像

0. 这门课在讲什么

CS336 的立场很明确:研究者正在与他们所研究的技术脱节。2016 年大家自己实现并训练模型,2018 年变成下载 BERT 微调,今天则是调用 API 写 prompt。抽象层次的上升带来了生产力,但这些抽象是漏的——想做真正底层的研究,就必须把整个技术栈重新撕开。

于是这门课的方法论是 understanding via building:从零实现分词器、Transformer、训练循环、分布式并行、推理引擎、数据流水线和对齐算法。不用 HuggingFace 的现成组件,每一行都自己写。

贯穿全课的一条主线

给定固定的算力预算,怎样训出最好的模型?这是一个效率问题,它把看似分散的 17 讲串成一条链:

$$ \text{模型质量} \;\approx\; f\big(\underbrace{\text{数据}}_{\text{L13–14}} \times \underbrace{\text{算力}}_{\text{L02, L05, L07–08}} \times \underbrace{\text{效率}}_{\text{L03–06, L09–11}}\big) $$

每一讲都在回答"这一环怎样才能不浪费"。

为什么值得完整读一遍

  • 它把账算给你看。70B 模型在 1024 张 H100 上训 15T token 要多久?8 张卡最大能训多大?这些不是估计,而是可以逐项列出的算式。
  • 它讲取舍而不只讲方案。为什么是 pre-norm 而不是 post-norm,为什么 RoPE 赢了,MoE 什么时候不值得用——讲师给的是判断依据。
  • 它是少数覆盖全栈的课。从 CUDA kernel 一直讲到 RLHF 的偏好数据标注协议,中间不跳步。

预备知识

  • 熟练的 Python 与 PyTorch(会写自定义 nn.Module 和训练循环)
  • 线性代数、概率、微积分(能看懂反向传播的链式法则推导)
  • 深度学习基础(知道什么是 Transformer、注意力、交叉熵损失)
  • 不需要:CUDA 经验、分布式训练经验、强化学习基础——这些课程内会从头讲

1. 全部讲义

Unit 1 · 基础:分词、资源核算与架构
Unit 2 · 系统:硬件、算子与并行
LECTURE 05 · Tatsu
GPU 与 TPU

SM / warp / Tensor Core 的硬件层次与 grid / block / thread 的软件层次如何对应;存储带宽金字塔;算术强度与 roofline 模型——为什么矩阵乘法能跑满而 softmax 跑不满,以及融合、分块、重计算这三板斧。

roofline · 算术强度 · shared memory · FlashAttention · systolic array
LECTURE 06 · Percy
算子与 Triton

用一个 GELU 贯穿三级实现:朴素 PyTorch → 内置算子 → torch.compile,把加速来自哪里的访存量逐项算清楚。然后是 Triton 的三个递进例子(softmax 的整行归约、row sum 的分块归约、matmul + ReLU 的 tiling),以及 benchmark 与 profiler 的正确用法。

Triton · 算子融合 · 分块归约 · 算术强度 · occupancy
LECTURE 07 · Percy
并行化(上):集合通信与数据并行

互连拓扑决定并行策略的分层。全部集合通信原语及其通信量公式,ring all-reduce 为什么是 2(p−1)N/p;torch.distributed 实操;DDP 的通信-计算重叠;ZeRO 三阶段逐项对比。

all-reduce · NCCL · DDP · ZeRO / FSDP · 激活重计算
LECTURE 08 · Tatsu
并行化(下):模型并行与组合策略

Megatron 张量并行的列切+行切为什么只需一次 all-reduce;流水线并行的 bubble 公式与 1F1B 调度;序列 / 上下文 / 专家并行;最后把 TP × PP × DP × EP 映射到真实集群拓扑,推演一次千卡训练配置。

Megatron TP · GPipe / 1F1B · Ring Attention · 3D 并行
Unit 3 · 缩放定律与推理
Unit 4 · 数据
Unit 5 · 对齐与后训练
最后两讲

Lecture 18(Daniel Selsam)与 Lecture 19(Dan Fu)是客座讲座,课程未公开讲义材料,因此本站不含这两讲。

2. 建议的学习路径

17 讲不是必须线性读完。按目标选路线:

你的目标路线可跳过
完整实现一个能训练的 LM 01 → 02 → 03 → 04 → 07 05/06 可以先只看结论
搞懂性能优化与分布式 02 → 05 → 06 → 07 → 08 → 10 13–17
做数据工作 01 → 12 → 13 → 14 → 09 05–08
做后训练 / RL 03 → 10 → 12 → 15 → 16 05–08、13–14
只想建立全局图景 01 → 02 → 09 → 12 → 16 其余按需查阅
两个建议
  • Lecture 02 不要跳。后面每一讲的论证都建立在"会算 FLOPs 和显存"之上;不会算账,读 05–11 就只是在背结论。
  • 配合官方作业。本站只覆盖讲义内容,五个作业(basics / systems / scaling / data / alignment)才是这门课真正的重量所在。

3. 关于这份文档

内容整理自 Stanford CS336 (Spring 2026) 的公开讲义材料:Percy 的可执行讲义源码(lecture_*.py)与 Tatsu 的幻灯片(lecture_*.pdf),配图与幻灯片截图来自课程官方仓库。每一讲在忠实覆盖原讲脉络的基础上补充了推导过程、数值例子与实现代码。

原始材料:cs336.stanford.edu · stanford-cs336/lectures。上一届(Spring 2025)的全部录像在 YouTube,内容与本届高度重合,建议对照观看。