CS336 作业说明与学习路线
课程:Stanford CS336 Language Modeling from Scratch(Spring 2026) 年份要分清(课程每年都在变 ✗):课程年份 = 2026(官方主页写 Spring 2026,往年还有 Spring 2025 / Spring 2024)✓; 视频年份 = 与电子书各讲页首标注的一致 ✓(公开播放列表是往年录像 ✗,只作参考 ✓); 作业年份 = 2026(题面 PDF 文件名带
spring2026✓,另有一份 2025 的 A5 安全对齐补充 ✓)。 这份文档解决一个具体问题:第一次上 Stanford 的课,连作业入口都找不到。 它给出:官方入口、5 个作业的全景、作业与讲次/电子书的对应、环境与算力准备、以及官方的合作与 AI 政策。 生成:2026-10-15 · 续修:2026-10-16(接入assignments/模块 ✓)· 配套读物:上级目录的讲次电子书(../001-概览与分词/book.html等)一题一页(中文版 + 英文版 ✓)
每份作业都有一页自己的页面 ✓:中文版是官方题面的逐页中译(编号 = PDF 页码 ✓,方便对号 ✓), 英文版是官方原文照排 ✓;右上角一键切换 ✓。本项目不提供答案 ✗(官方 AI 政策也禁止用它直接解题 ✓)。
# 作业 中文版 英文版 官方题面(本地原件) A1 Basics A1.html A1.en.html _local/A1/cs336_assignment1_basics.pdfA2 Systems A2.html A2.en.html _local/A2/cs336_assignment2_systems.pdfA3 Scaling A3.html A3.en.html _local/A3/cs336_assignment3_scaling.pdfA4 Data A4.html A4.en.html _local/A4/cs336_assignment4_data.pdfA5 Alignment and Reasoning RL A5.html A5.en.html _local/A5/cs336_spring2026_assignment5_alignment.pdf⚠️ CS336 的题面是几十页的 PDF ✗(A1 47 页、A2 48 页、A5 39 页 ✓)—— 翻译是分批做的 ✓,每批译完都会逐页核对“有没有漏页” ✓(少了就拒绝写盘 ✗)。 页数这么长的题面,建议按需读:先看那一页的目录,再跳到你正在做的那一节 ✓。
0. 先读这一段:关于「用 AI 学」
我(读者)的立场:我用 AI,不代表我要让 AI 替我写作业、替我完成作业思路。 AI 只用于三件事:① 解释我看不懂的概念;② 帮我定位作业入口与官方资料; ③ 给出学习路线指引(例如「这一步该看哪讲、该读哪份讲义」)。 具体的代码、推到一半的公式、该自己想的解法,仍然自己做。
这与 CS336 官方政策并不冲突,反而一致。课程主页原文(Honor Code → AI tools):
Prompting LLMs such as ChatGPT is permitted for low-level programming questions or high-level conceptual questions about language models, but using it directly to solve the problem is prohibited. We strongly encourage you to disable AI autocomplete (e.g., Cursor Tab, GitHub Copilot) in your IDE when completing assignments — non-AI autocomplete (autocompleting function names) is totally fine.
翻译与操作含义:
- ✅ 允许:问「
torch.einsum怎么用」「为什么缩放定律里是 6ND」「RMSNorm 和 LayerNorm 差在哪」这类底层编程问题或高层概念问题。 - ❌ 不允许:把作业题面直接丢给 AI 让它产出可提交的解法;让 AI 帮你设计实现思路并照抄。
- ⚠️ 强烈建议:写作业时关掉 AI 自动补全(Cursor Tab、Copilot)。官方说得很直白:自动补全会让你更难深入理解内容。
- 官方完整 AI 政策(Google Doc):https://docs.google.com/document/d/1SZAlExB1qAc9izHt54gwunNpjKE6wXb8Y7yA_e-baK8
- 斯坦福 Honor Code:https://ed.stanford.edu/academics/masters-handbook/honor-code
一句话:卡住先自己想;想了 20 分钟还卡,再去问「概念」而不是要「答案」。 这和课程想教你的「从零构建」是同一件事。
1. 三个官方入口(先收藏)
| 用途 | 链接 |
|---|---|
| 课程主页(日程、作业链接、讲义、政策都在这里) | https://stanford-cs336.github.io/ |
| GitHub 组织(5 个作业仓库都在这里) | https://github.com/stanford-cs336 |
| YouTube 播放列表(全部课程录像,含客座讲座) | https://www.youtube.com/playlist?list=PLoROMvodv4rMqXOcazWaTUHhq-yembLCV |
自学者最容易卡住的一点:CS336 没有给自学者用的在线提交系统(Gradescope 只对注册学生开放)。 对自学者而言,作业就是公开的 GitHub 仓库:fork / clone 下来,用仓库自带的 pytest 测试当验收。 「作业入口」= 课程主页 Schedule 表里每一行末尾的 [code](仓库)和 [preview](PDF 题面)。
2. 作业全景表
时间以官网 Schedule 为准(官方标注为 tentative / 暂定)。「对应讲次」是按内容组织的,不是硬性规定。
| # | 作业 | 发布 | 截止 | 一句话内容 | 主要对应讲次 | 算力 |
|---|---|---|---|---|---|---|
| A1 | Basics | Mar 30(L1) | Apr 15(L6) | 实现 tokenizer、Transformer 架构、优化器,训练一个最小语言模型 | L1–L6 | 训练需 1×GPU |
| A2 | Systems | Apr 15 | Apr 29(L10) | profiling/benchmark、自己写 Triton 版 FlashAttention2、显存的分布式训练 | L5–L8 | 基准测试需 1×GPU |
| A3 | Scaling | Apr 29 | May 6(L12) | 初始化与权重/激活动力学;拟合缩放定律并外推 | L9、L11 | 训练 API(云端) |
| A4 | Data | May 6 | May 20(L16) | 把 Common Crawl 原始转储做成预训练数据,做过滤与去重 | L13、L14 | 训练需 GPU |
| A5 | Alignment & Reasoning RL | May 20 | Jun 3(L19) | SFT + 强化学习,让模型学会做数学推理;选做 Part 2 | L15–L17 | GPU |
| — | A5 Optional Part 2 | 同 A5 | 同 A5 | 安全对齐方法(如 DPO) | L15–L17 | GPU |
作业仓库与题面(直接可点)
3. 每个作业要做什么(简述)
详细题面一定以 PDF handout 为准,这里只帮你先建立地图,知道它和哪几讲对应。
A1 · Basics —— 把「语言模型」整套地基搭出来
课程描述原文:Implement all of the components (tokenizer, model architecture, optimizer) necessary to train a standard Transformer language model. Train a minimal language model.
大块内容(按教学顺序):
- Tokenizer:BPE 训练与编解码(对讲 L1「分词」)。
- Transformer 架构:embedding、RMSNorm、位置编码(RoPE)、attention、前馈、残差;用
einops把张量维度写清楚(对 L2、L3)。 - 优化器与训练循环:AdamW、余弦学习率、梯度裁剪;交叉熵损失(对 L2 的资源核算)。
- 训练一个最小语言模型:在 TinyStories / OpenWebText 子集上真训练(对整门课的「资源核算」心态)。
作业仓库的使用方式(很重要,第一次做尤其容易懵):
- 仓库是脚手架:大部分函数体是
raise NotImplementedError。 tests/adapters.py是你的实现与官方测试之间的适配层——你在这里把官方测试要调用的接口接到你的实现上。- 验收:
uv run pytest。一开始全部失败是正常的,你实现一点、过一点。
A2 · Systems —— 让模型跑得又快又省
课程描述原文:Profile and benchmark … optimize Attention with your own Triton implementation of FlashAttention2. Build a memory-efficient, distributed version …
- Profiling / benchmarking:用工具量清楚时间花在哪、显存花在哪(对 L2 的资源核算、L5 的 GPU/TPU)。
- Triton + FlashAttention2:自己写 kernel,理解为什么
O(N²)的 attention 可以不显式存注意力矩阵(对 L6「Kernels, Triton」)。 - 分布式/省显存训练:数据并行、张量并行、ZeRO、激活重计算(对 L7、L8「Parallelism」)。
A3 · Scaling —— 理解初始化、动力学与缩放定律
课程描述原文:Study and understand model initializations and weight + activation dynamics. … Query a training API to fit a scaling law to project model scaling.
- 初始化与动力学:为什么残差分支要缩放、激活/梯度范数怎么随层数变化(对 L3 的 hyperparameters、L9/L11 的缩放定律)。
- 缩放定律拟合:用云端训练 API 跑几组小规模实验,拟合 loss 与参数量/数据的幂律,再外推(这正是 L2 开头 Percy 讲的 Marin 项目做的事)。
- 这一讲的关键词:isoFLOP 曲线、Chinchilla 最优、预注册预测。
A4 · Data —— 决定语言模型上限的其实是数据
课程描述原文:Convert raw Common Crawl dumps into usable pretraining data. Perform filtering and deduplication to improve model performance.
- 从 Common Crawl(WET/WARC) 原始转储出发:抽取正文、语言识别。
- 过滤:质量/有害内容/规则过滤(对 L13「数据来源」)。
- 去重:精确去重、MinHash/LSH 近似去重(对 L14「过滤、去重、混合、合成数据」)。
- 用去重前后各训一个小模型,比较 loss —— 体会「数据质量 → 模型质量」。
A5 · Alignment & Reasoning RL —— 从「会接话」到「会推理」
课程描述原文:Apply supervised finetuning and reinforcement learning to train LMs to reason when solving math problems. Optional Part 2: implement and apply safety alignment methods such as DPO.
- SFT(监督微调):在指令/推理数据上微调(对 L15「Mid/Post-training (SFT/RLHF)」)。
- RLVR(带可验证奖励的强化学习):数学题有标准答案 → 用它当奖励,跑 GRPO/PPO 类算法(对 L16)。
- 选做 Part 2:DPO 等安全对齐方法(对 L17 的 alignment)。
- 这条线是当前 LLM 最前沿也最热的一段,建议先把 A1/A2 打牢再碰。
4. 环境与算力准备
4.1 软件:官方用 uv,不要自己 pip 装
作业仓库的 README(以 A1 为例)说:所有环境用 uv 管理。
# 安装 uv(推荐官方脚本,或 pip install uv)
# 然后在作业仓库根目录:
uv run pytest <你的测试>
uv run python <你的脚本>
uv run 会自动解析并激活环境,不用你手动建 venv / 装依赖。
4.2 数据(A1 用得到)
A1 官方 README 提供了数据下载命令(TinyStories + OpenWebText 子采样):
mkdir -p data
cd data
wget https://huggingface.co/datasets/roneneldan/TinyStories/resolve/main/TinyStoriesV2-GPT4-train.txt
wget https://huggingface.co/datasets/roneneldan/TinyStories/resolve/main/TinyStoriesV2-GPT4-valid.txt
wget https://huggingface.co/datasets/stanford-cs336/owt-sample/resolve/main/owt_train.txt.gz
gunzip owt_train.txt.gz
wget https://huggingface.co/datasets/stanford-cs336/owt-sample/resolve/main/owt_valid.txt.gz
gunzip owt_valid.txt.gz
cd ..
国内网络下载 HuggingFace 可能需要代理或镜像(本机走 Windows 系统代理)。数据文件不小,先确认磁盘空间。
4.3 GPU:自学者用云
课程主页给了自学者云 GPU 的选项(2026-03-28 公开价格,单张 B200):
| 提供商 | 价格 | 备注 |
|---|---|---|
| Modal(课程赞助) | $6.25/小时 | 每月 $30 免费额度;只按实际计算计费(无空闲资源);本地开发 ↔ 大规模 GPU 实验切换方便 |
| Lambda Labs | $6.69/小时 | |
| RunPod | $4.99/小时 | 最便宜 |
| Nebius | $5.50/小时(抢占式 $3.05) | 抢占式最省 |
| Together | $7.49/小时 | 最少 8 卡,长期合约更便宜 |
官方建议(务必照做,能省很多钱):
先在 CPU 上把实现的「正确性」调通,再用 GPU(按作业建议的卡数)去跑训练(A1/A4/A5)或基准测试(A2)。
也就是说:A1 的大部分(tokenizer、架构、前向/反向的正确性测试)都可以在 CPU 上完成,只有最后的「真训练一个 LM」才需要 GPU。
4.4 先修要求(官方原文)
- Python 熟练(本课脚手架极少,写的代码量比别的课多一个数量级);
- 深度学习 + 系统优化经验(PyTorch 熟练、知道内存层次结构);
- 微积分、线性代数(MATH 51 / CME 100 水平);
- 概率统计基础(CS 109 水平);
- 机器学习基础(CS221/CS229/CS230/CS224N 任一)。
这是一门 5 学分、实现极重的课。官方原话:please allocate enough time for it.
5. 建议的学习路线
目标(你的话):了解 LLM 的底层原理。那就按「讲次 → 电子书 → 作业」三条线并行走,一次只推进一小块。
| 阶段 | 讲次(电子书) | 作业 | 里程碑 |
|---|---|---|---|
| 0. 环境 | — | — | 装 uv;fork A1;uv run pytest 能看到「预期内的失败」 |
| 1. 分词 | L1 概览与分词 | A1.1 Tokenizer | 自己训出 BPE,encode→decode 往返一致 |
| 2. 张量与核算 | L2 PyTorch 与资源核算 | 配合 A1;练「信封背面」估算 | 能手算一段计算的 FLOPs/显存 |
| 3. 架构 | L3 架构与超参数 · L4 注意力替代与 MoE | A1.2 Transformer | 写出 RMSNorm/RoPE/attention,过单测 |
| 4. 训练 | L5 GPU/TPU · L6 内核与 Triton | A1.3 优化器与训练 → 交 A1;开 A2 | 在 TinyStories 上真训出一个会写小故事的小模型 |
| 5. 系统 | L7/L8 并行 | A2 Systems | 写出 Triton FlashAttention2;跑通数据并行 |
| 6. 缩放 | L9/L11 缩放定律 | A3 Scaling | 拟合幂律并外推 |
| 7. 推理与评测 | L10 推理 · L12 评测 | 巩固 A3 | 理解 KV cache、采样、benchmark |
| 8. 数据 | L13/L14 数据 | A4 Data | Common Crawl → 去重 → 训练对比 |
| 9. 对齐 | L15/L16/L17 后训练与对齐 | A5 Alignment | SFT + RLVR 让模型会做数学题 |
每一讲我都会配一本中文电子书(见下一节的进度表),做作业卡住时先回电子书对应章节。
6. 官方 Honor Code 全文(附中文)
原文(课程主页):
Collaboration: Study groups are allowed, but students must understand and complete their own assignments, and hand in one assignment per student. If you worked in a group, please put the names of the members of your study group at the top of your assignment.
AI tools: Prompting LLMs such as ChatGPT is permitted for low-level programming questions or high-level conceptual questions about language models, but using it directly to solve the problem is prohibited. We strongly encourage you to disable AI autocomplete … See the AI policy (inspired by this [gist]).
Existing code: Implementations for many of the things you will implement…
中文要点:
- 可以组队学习,但必须自己理解并完成,一人交一份;组队了就在作业开头写组员名字。
- 可以用 LLM 问底层编程/高层概念问题,但不能让它直接解题;强烈建议关掉 AI 自动补全。
- 对「已有代码」的使用有明确限制(抄现成实现同样违规)——题面 PDF 里有细则。
给自学者的现实提醒:你不是注册学生、没有 Gradescope,所以没有人会给你的作业打分。 自律的方式就是:把 pytest 全绿当作及格线,把「能给别人讲明白」当作优秀线。
7. 常见困惑 FAQ
Q1:我到底在哪里提交作业?
A:注册学生用 Gradescope(不在本仓库任务范围)。自学者没有提交入口——你的「提交」是:
fork 作业仓库 → 实现 → uv run pytest 全过 → 推到自己的 GitHub。
Q2:作业仓库是哪个分支/哪一版?
A:课程主页 [code] 指向的就是作业仓库 main。每年题面会有微调(比如 A5 PDF 文件名带 spring2026),以你当年 Schedule 里的链接为准。
Q3:我没有 GPU 怎么办? A:① 先确认这道题是不是必须 GPU(A1 大部分不用,A2 的基准测试要,A3/A4/A5 训练要); ② 用 Modal(有 $30/月免费额度)等云服务,先在 CPU 调正确性再上 GPU。
Q4:电子书和视频、作业是什么关系? A:电子书是视频的中文书面临摹,帮你在不看视频时也能复习;作业是动手验证。三者对应关系见第 5 节表格。
Q5:卡住了应该问 AI 什么? A:问概念(「KV cache 为什么能省计算」)和定位(「A2 的 FlashAttention 对应讲义哪一页」),不要问答案(「帮我写出 Triton kernel」)。这既是政策要求,也是唯一能真正学会的方式。
8. 电子书补全进度
17 讲 + 客座讲座全部完成(2026-10-15)。 「图」= 书内图片引用数。
| 讲 | 标题 | 视频 ID | 电子书(图) |
|---|---|---|---|
| 01 | 概览与分词 | JuoVZkPBiKk |
✅ 40 图 + 导览/疑点(2026-10-15 补) |
| 02 | PyTorch 与资源核算 | kuYAsz7zspQ |
✅ 38 图 + 导览/疑点(2026-10-15 补) |
| 03 | 架构与超参数 | lVynu4bo1rY |
✅ 18 图(12 官方幻灯片) |
| 04 | 注意力替代方案与混合专家 | cKSwj_qZ8Jg |
✅ 21 图(17 官方幻灯片) |
| 05 | GPU 与 TPU | izZba4UA7iY |
✅ 5 图 |
| 06 | 内核与 Triton | xnDHaNUvHBg |
✅ 15 图 |
| 07 | 并行 | SzpOcwdIL0Y |
✅ 6 图 |
| 08 | 并行(续) | 6-cXp-aOmdg |
✅ 73 图(全量官方幻灯片) |
| 09 | 缩放定律 | Q15rhEWZPQ4 |
✅ 57 图(全量官方幻灯片) |
| 10 | 推理 | EfM546A79aM |
✅ 9 图 |
| 11 | 缩放定律(续) | vTfEyOyzV9E |
✅ 60 图(12 inline + 全量幻灯片) |
| 12 | 评测 | JpAxdTWQJxM |
✅ 11 图 |
| 13 | 数据(来源与数据集) | -qm0ln33G24 |
✅ 6 图 |
| 14 | 数据(过滤、去重、混合与合成) | 5sxHosTLPF8 |
✅ 14 图 |
| 15 | 中训练与后训练(SFT/RLHF) | 2oH6PWPrYFo |
✅ 65 图(全量幻灯片) |
| 16 | 后训练——RLVR | dIFAi87Ws4E |
✅ 63 图(全量幻灯片) |
| 17 | 对齐与多模态 | 26FtD08ZpOU |
✅ 14 图 |
| 客座 | Guest Lecture: Dan Fu | 9EEm4iMAF5s |
✅ 11 图 |
每讲书首保留:视频链接、课程主页、官方讲义(PDF 或可执行讲义);有官方 PDF 的讲次(03/04/05/08/09/11/15/16)已把幻灯片收录进书内。 说明:01/02 已在 2026-10-15 补齐「导览 / 已知疑点」并加
book-schema: v2标记;正文与原有 40/38 张图均保留、未重写,只补两节(另修正 02 里 4 处非法mm:ss时间戳)。
9. 官方讲次材料索引
| 讲 | 官方材料 |
|---|---|
| 01 | lecture_01.py(可执行讲义) |
| 02 | lecture_02.py / trace(on-site) |
| 03 | lecture_03.pdf |
| 04 | lecture_04.pdf |
| 05 | lecture_05.pdf |
| 06 | lecture_06.py |
| 07 | lecture_07.py · Lecture 7 - Parallelism basics.pdf |
| 08 | lecture_08.pdf |
| 09 | lecture_09.pdf |
| 10 | lecture_10.py |
| 11 | lecture_11.pdf |
| 12 | lecture_12.py |
| 13 | lecture_13.py |
| 14 | lecture_14.py |
| 15 | lecture_15.pdf |
| 16 | lecture_16.pdf |
| 17 | lecture_17.py |
说明:CS336 的「讲义」有两种形态——
.py是可执行讲义 (把代码、输出、讲解合在一起,用课件系统按trace逐块播放)。 后一种是这门课的特色,也是它「从零构建」理念的体现。
10. 怎么把材料弄到本地(两种情形)
情形 A:你自己在做(已经下载到本地)
官方题面 PDF 放在 _local/(只服务本地:_ 前缀 → 书架、导出、全部 walker 天然看不见):
assignments/_local/A1/cs336_assignment1_basics.pdf (0.9 MB,47 页)
assignments/_local/A2/cs336_assignment2_systems.pdf (1.4 MB,48 页)
assignments/_local/A3/cs336_assignment3_scaling.pdf (0.2 MB,8 页)
assignments/_local/A4/cs336_assignment4_data.pdf (0.3 MB,16 页)
assignments/_local/A5/cs336_spring2026_assignment5_alignment.pdf(0.7 MB,39 页)
starter code 不在这里,也不该在这里 ✗ —— 它就是那些 GitHub 仓库本身 ✓,
git clone 一份最新的比下载一份快照好 ✓(而且题面年年微调 ✗):
git clone https://github.com/stanford-cs336/assignment1-basics.git
cd assignment1-basics && uv run pytest # 一开始红一片是**正常**的 ✓
数据集也只给链接不下载 ✗(D50:数据集太大、而且版本会变 ✓)—— A1 要的 TinyStories / OpenWebText 子采样命令在上面「4.2 数据」一节 ✓。
生成/更新本地题面:
python src/vb.py assignments "output/Stanford-CS336" --fetch # 下**全部**题面
python src/vb.py assignments "output/Stanford-CS336" --fetch --dry-run # 只列要下什么、多大
⚠️ 默认下全部,不跳过任何文件 ✓ —— 这一条是刻意的 ✓。 少下一个文件而不吭声,比明确报错危险得多:做题出问题时你会先怀疑自己 ✗, 而不是怀疑材料没下全。所以:没下成的一律大声列出来,且退出码非 0 ✓。 (要刻意跳过大的,才用
--max-mb N✓ —— 那是显式选择,也是显式警告 ✓。)
情形 B:朋友拿到的是分享版(没有 _local/)
公开版按白名单导出("书架能引用到的文件"✓),所以作业材料不在里面 ✗ —— 朋友需要自己下。给 TA 一段能直接粘给 coding-agent 的提示词:
请帮我把 Stanford CS336 (Spring 2026) 的 5 份作业材料准备到本地。
一、官方题面 PDF(下到 ./cs336-assignments/A1..A5/ 并按 A1..A5 命名):
- https://raw.githubusercontent.com/stanford-cs336/assignment1-basics/main/cs336_assignment1_basics.pdf
- https://raw.githubusercontent.com/stanford-cs336/assignment2-systems/main/cs336_assignment2_systems.pdf
- https://raw.githubusercontent.com/stanford-cs336/assignment3-scaling/main/cs336_assignment3_scaling.pdf
- https://raw.githubusercontent.com/stanford-cs336/assignment4-data/main/cs336_assignment4_data.pdf
- https://raw.githubusercontent.com/stanford-cs336/assignment5-alignment/main/cs336_spring2026_assignment5_alignment.pdf
二、starter code(git clone 最新的,不要下快照):
git clone https://github.com/stanford-cs336/assignment1-basics.git
(A2..A5 同理,仓库名见 https://github.com/stanford-cs336)
三、每个仓库 clone 完,请:
1. 把仓库 README 里「怎么装环境(uv)、怎么跑测试」两节翻译成中文告诉我;
2. 跑一次 `uv run pytest`,告诉我**预期会失败**的地方长什么样(我要确认环境是通的)。
如果某个链接下载失败(404 / 需要登录),**不要猜别的地址**,直接把文件名和错误告诉我。
把「CS336 / 上面的文件名 / 仓库名」换成你要做的课程即可 ✓。 这一段的意义:初学者的困难往往不是"不会做作业",而是"找不到材料" ✗ —— 所以这里给的不是安慰,是一条能执行的路 ✓。