# 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 | 作业 | 关键词 | 你要掌握的核心技能 | 产出物 | | -------------------- | -------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Lab 1 _(Basics)_ | **Transformer** 最小实现 | 搭积木:Embedding、Self‑Attention、FFN、优化器 | 能跑通一个 100 M 参数级别的中文/英文小模型 | | Lab 2 _(Efficiency)_ | 内核融合、Flash‑Attn、混合精度 | 把 Lab 1 加速到单卡吃得下、跑得快 | 秒/step↓、显存↓ | | Lab 3 _(Scaling)_ | 数据/模型并行、ZeRO | 多 GPU 多机训练 | Gbit 以上带宽下稳定训练 | | **Lab 4 _(Data)_** | **高质量语料管道** | 清洗 + 去重 + 分词 + 分片 + 验证 | 1. `cs336_data`  Python package2. 一个.tar.gz 提交包3. 在官方 leaderboard 取得越低的 val loss 越好 ([GitHub](https://raw.githubusercontent.com/stanford-cs336/assignment4-data/main/README.md "raw.githubusercontent.com")) | | Lab 5 _(Alignment)_ | RLHF / DPO | 安全、守护式微调 | 基于人偏好对话模型 | | 作业 | 核心产出 | 提前准备 | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | | **[A1 Basics](A1%20Basics.md)** | 自写 [[tokenizer]]、[Transformer](Transformer.md)、[[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) | 1. [[Triton]] 实现 [[FlashAttention]]<br>2. 多机 NCCL Pipeline [分布式数据并行 DDP](分布式数据并行%20DDP.md)+ [优化器状态分片技术](优化器状态分片技术.md)。 | 建好 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 生产线。祝玩得痛并快乐!