# Summary - **课程定位**:Stanford CS336 “Language Models from Scratch” 通过 5 个大作业和 20 余场讲座,手把手带你从数据抓取到训练、对齐、部署完整做一只 Transformer 语言模型。([stanford-cs336.github.io](https://stanford-cs336.github.io/spring2025 "Stanford CS336 | Language Modeling from Scratch")) 测试驱动学习 - **先跑 Unit Test,再跑小数据脚本**,确保每一步都可控。 - 和后端调⽤链排错⼀样,**从输入输出形状开始对齐**,再看数值。 - 任何时间你都可以 `pytest -k <函数名>` 做局部验证。 # Notes | 作业 | 核心产出 | 提前准备 | | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | | **[A1 Basics](A1%20Basics.md)** | 自写 Tokenizer、Transformer、AdamW,训一个 mini‑LM,实现 [[BPE]] 分词器、Transformer 架构、Adam 优化器,并在 TinyStories 和 OpenWebText 上训练模型。只允许使用 PyTorch 原语(不能直接调用 torch. nn. Transformer 或 torch. nn. Linear)。| 熟练 `nn.Module` & `torchtext`; 了解 tokenizer byte‑fallback | | **[A2 Systems](A2%20Systems.md)** | Triton 实现 [[FlashAttention]]2;多机 NCCL Pipeline 分布式数据并行 + 优化器分片。| 建好 NVTX/ Nsight Profiling 流程 | | [A3 Scaling](A3%20Scaling.md) | 调参 + 调用训练 API 拟合 Scaling Law 使用 IsoFLOP 拟合 Scaling Law。为了模拟训练运行的高风险,学生会获得一个训练 API[超参数→损失]和一个固定的计算预算,并且必须选择提交哪些运行来收集数据点。在后台,训练 API 是通过在一系列预先计算的运行之间进行插值来支持的。| 先读 OpenAI 2020 Scaling Law 论文 | | [A4 Data](A4%20Data.md) | 从 Common Crawl 原始档抽取‑去重‑过滤 将 Common Crawl HTML 转换为文本,过滤(质量、有害内容、PII),删除重复数据。这是一项苦差事,却没有得到足够的重视。| 学 `warc` 解析、Bloom Filter 去重 | | [A5 Alignment](A5%20Alignment.md) | SFT + PPO/RLHF 解决数学题;可选 DPO Safety 实现监督微调、专家迭代、GRPO 和变体,在 Qwen 2.5 Math 1.5B 上运行 RL 以提升在 MATH 上的指标。我们也曾考虑过让学生自己实现推理(inference),但决定(可能是明智的)让人们使用 vllm。| 复习 RL 基础、PEFT LoRA/QLoRA | | | | | # 3. 常踩坑 & 加速技巧 1. **GPU 预算**:本地 CPU Debug → 1×A100 40 GB Smoke Test → 云端多 GPU 正式跑;日志里贴 hash 保证复现。 2. **FlashAttention2**:先在 Triton tutorial 上手,确认 kernel 在 16 × 64 tile 尺寸下无 UB,再移植到作业。 3. **Leaderboard 评测**:脚本严格检验 I/O 格式;第一次提交可先交部分功能拿 “编译通过” 分,再逐次补全。 4. **Slack 搜索**:问题 80 % 已被问过;标记 “applicable to remote learners” 贴士,防止与校内环境差异踩坑。 5. **矩阵尺寸血崩**:自写 `model.summary()` 打印参数 & FLOPs,检查 `max_seq_len × d_model` 是否超预期。 --- # 4. 建议的外部学习路线 | 阶段 | 目标 | 资源举例 | | --------------- | ----------------------------------- | ------------------------------------------- | | 预热 (1 周) | 熟悉 Transformer 源码 & Tensor Parallel | _nanoGPT_ / _llama.cpp_ 阅读笔记 | | Kernel (1 周) | Triton + FlashAttention | OpenAI Triton docs、HazyResearch FA2 论文 | | 分布式训练 (1 周) | DDP, ZeRO‑3, FSDP 对比 | [[DeepSpeed]] Tutorials | | 数据管线 (1 周) | Web‑scale 数据清洗 | _The Pile_ paper、Common Crawl Quickstart | | Alignment (1 周) | RLHF/PPO/DPO | _RLHF Cookbook_、Anthropic Constitutional AI | --- ## 一句话总结 > **先补先修 → 快装环境 → 读 lecture/handout → 提前动手 → 社群互助**,按官网节奏完成 5 个作业,你就能真正从 0 到 1 复刻一条 LLM 生产线。祝玩得痛并快乐!