这门课的核心不是「会调 API」,而是像操作系统课从零写 OS 一样:自己把 tokenizer、Transformer、训练、数据、评测、对齐全做一遍。读完应能回答:一个现代 LM 的每一分钱算力、每一 GB 显存、每一张网页,最后是怎么变成 next-token 概率的。
边界。 本页是自学讲义,不是 Stanford 官方中文译本,不含作业实现或答案。作业仓库公开,但课的 Honor Code 禁止对着现成代码写;用 LLM 直接代写作业同样禁止。视频课表见 cs336.stanford.edu(当前学期有 YouTube playlist)。
xiaomimi 说明 本页怎么读。不按作业做完这门课。JC 的目标是机制和底层逻辑,不是 A1–A5。第 12 节直接跳过。
底层就一条链:
6ND(参数 × 数据);显存是参数 + 梯度 + Adam 两份状态 + 激活。慢通常不是「数学算不过」,是中间结果在显存里搬来搬去。→ 第 2 节建议读序: 1 → 2 → 3 → 7 → 10 → 11。中间 4–6、8–9 当注释。下文凡带 xiaomimi 说明 的都是我的解读,不是课的原话。没标的段落是课程公开材料的整理。
xiaomimi 说明 这张表是课的作业骨架,用来对齐概念从哪里来。不是要你把 A1–A5 做完。
CS336 把「做一个 LM」拆成五段作业,对应十二条课。先建立顺序,再进细节。
| 作业 | 对应课 | 你要建立的心智模型 |
|---|---|---|
| A1 Basics | L1–L3 | BPE → Transformer → AdamW,能训一个最小 LM |
| A2 Systems | L5–L8 | 算力/带宽/显存哪一层卡住;FlashAttention;分布式 |
| A3 Scaling | L9, L11 | 用 scaling law 预测「加参数还是加数据」 |
| A4 Data | L13–L14 | Common Crawl → 过滤/去重 → 能预训练的文本 |
| A5 Alignment | L15–L16 | SFT → RLHF/DPO → RLVR(可验证奖励) |
先修:Python 要能独立写中等规模工程(课明确说代码量比普通 AI 课高一个数量级)、PyTorch、线性代数、基础概率、一门 ML/DL 课。系统侧要懂 memory hierarchy。
模型不读「字」,读的是整数 ID。Tokenizer 决定:词表多大、一个意思要拆成几段、尾部开销多少。
Byte Pair Encoding 从字节或字符开始,反复把语料里最常见的相邻 pair 合成新 token,直到词表达到目标大小。推理时用同一套 merge 规则贪心切分。
前置切分(pretokenization)通常按空白/标点切开,防止 BPE 把 hello world 合成一个跨词 token。特殊符号(<|endoftext|>、PAD)要预留,不能让 BPE 自己长出来。
记住一句: tokenizer 是压缩器 + 接口合同。训练和推理必须用同一份 vocab 和 merge;换 tokenizer 等于换语言模型。
课的第二讲把「能不能训」变成三本账。不会算这三本,后面的 GPU / 并行全是玄学。
Dense Transformer 训练的经验式(Kaplan / Hoffmann 常用):
训练 FLOPs ≈ 6 N D
N 是参数量,D 是 token 数。前向约 2ND(主要是 matmul),反向约两倍,合计约 6。注意力在长上下文里会额外冒头,短序列时可忽略。
训练时显存不是「参数一份」那么简单:
所以 7B 满血 AdamW 训练,仅优化器状态就可能到数十 GB,这才需要 ZeRO / FSDP。
arithmetic intensity = FLOPs / 字节搬运。强度低 = 带宽墙(memory bound),强度高 = Tensor Core 墙(compute bound)。FlashAttention 的意义就是:别把 N×N 注意力矩阵写回 HBM,把 softmax 留在 SRAM 里做完,强度才上得去。
2025 年课上的标准件,已经不是 2017 年的原版 Attention is All You Need。
| 组件 | 常见选择 | 为什么 |
|---|---|---|
| 归一化 | Pre-Norm(RMSNorm) | 深网络更稳;Post-Norm 难训 |
| 位置 | RoPE | 相对位置,外推比绝对 embedding 好 |
| FFN | SwiGLU | 门控 MLP,同样参数往往更强 |
| 注意力 | GQA / MQA | KV 头变少,推理时 KV cache 变小 |
| 优化器 | AdamW + warmup + cosine/WS D | 解耦 weight decay;大 batch 要调 LR |
形状上:宽 vs 深有权衡。过深而窄,残差和通信更痛;过宽而浅,表达力不够。超参不是搜出来的魔法,是和 batch、LR、token 预算绑在一起的——这就是后面 scaling law 要管的事。
损失就是 next-token 交叉熵。实现上对 logits 做 cross_entropy(pred[:-1], target[1:])。没有这个位移,模型在抄当前 token。
稠密模型每个 token 过全部 FFN。Mixture of Experts 让每个 token 只激活少数 expert,用稀疏计算换更大总参数。
注意力侧:长上下文时平方注意力贵,于是有 GQA、MLA、线性注意力、SSM 等。课强调的不是背名词,而是问:它省的是 FLOPs、HBM 带宽,还是 KV cache?三者不是一回事。
GPU 分层:寄存器 / SRAM(快、小)→ HBM(慢、大)。一次 HBM round-trip 的代价,往往大于在 SRAM 里多算几次。
Roofline:把 kernel 标到「带宽上限 vs 算力上限」两条线上,立刻知道该优化搬运还是优化 FLOPs。
标准注意力会物化 S = QK^T 再 softmax,这块 O(N²) 的中间结果进出 HBM。FlashAttention:
Triton 这门课用来让你亲手写这种 fused kernel:把「数学上的 attention」编译成「HBM 友好的循环」。A2 的核心智力负荷在这儿。
| 方式 | 切什么 | 主要代价 |
|---|---|---|
| Data Parallel / FSDP / ZeRO | 数据;参数/状态分片 | 梯度或参数通信 |
| Tensor Parallel | 单层矩阵按列/行切 | 层内 all-reduce,要高带宽互联 |
| Pipeline Parallel | 按层切到不同卡 | pipeline bubble |
| Context / Sequence Parallel | 序列维切 | 长上下文时救激活显存 |
真实大模型是 3D/4D 混合。记忆口诀:DP 扩样本,TP 扩层宽,PP 扩深度,CP 扩上下文。通信原语(all-reduce、all-gather、reduce-scatter、all-to-all)比「用了 DeepSpeed」更值得懂。
Kaplan 等人:损失随参数、数据、算力近似幂律下降。Hoffmann / Chinchilla 修正:同样算力下,以前的模型往往参数太大、数据太少。计算最优大约是参数和 token 一起涨。
课上会让你拟合 L(N, D) 或 isoFLOP 曲线,用来外推:下一次 10× 算力,应该训多大模型、喂多少 token。A3 甚至用训练 API 去拟合,而不是空想。
实践含义: 「再堆 2 倍参数」可能不如「同样 FLOPs 多看数据」。推理时还有另一条曲线:小模型训得更饱,有时比没训饱的大模型更划算。
KV cache 大小约 2 × layers × kv_heads × dim × seq × batch × dtype。这就是 GQA/MQA、量化 KV、paged attention 存在的理由。投机解码(speculative decoding)用小模型草稿、大模型一次验证多 token,专治 decode 的步数墙。
训练优化的是吞吐(token/s/GPU);产品优化的是首字延迟和每用户成本。两者的 kernel 和并行策略都不同。
困惑度(perplexity = exp(mean NLL))是训练的体温计,不是产品指标。下游还要:
课强调:先定义「好」,再改数据或对齐。否则你只是在过拟合 leaderboard。
A4 路线:WARC/Common Crawl 原始网页 → 抽文本 → 语言识别 → 质量过滤 → 去重 → 配比混合。
数据管道的工程量通常大于模型文件本身。这是这门课相对 CS224N 最大的转向之一。
预训练目标是「网页上什么常见就预测什么」。对齐改的是条件分布:在用户意图下,什么该说、什么该算对。
| 阶段 | 信号 | 特点 |
|---|---|---|
| SFT | 示范回答 | 模仿格式和语气;不会超出示范分布 |
| RLHF | 人好/坏 → 奖励模型 → PPO 一类 | 能优化偏好,但不稳、贵 |
| DPO | 成对偏好,不开奖励模型 | 实现简单,课上作为 safety 选修 |
| RLVR | 可验证奖励(数学对错、代码测试) | 2025 课的重点:推理可被打分 |
RLVR 和聊天偏好不是同一件事:数学可以 unit test,风格不能。A5 主线是用 RL 让模型解数学;safety/DPO 是补充。不要把「会刷 MATH」自动翻译成「对齐完成」。
xiaomimi 说明 只想懂机制就跳过本节。下面是课的作业向路径,不是这条「只读机制」线的必读。
自学者 GPU:课页建议先 CPU 验证正确性,再租 H100/B200 跑训练或 kernel benchmark。调试正确性时烧云 GPU 是冤枉钱。
整理依据:公开课页、作业说明与通用 LM 系统知识。讲义 PDF 未逐页翻译;若与某张 slide 冲突,以课页和作业 handout 为准。