从零开始构建大语言模型 - 课程作业实现与学习笔记
本仓库包含 Stanford CS336 课程的所有作业实现、实验笔记和个人理解。课程涵盖从 Tokenizer 到 Transformer 架构,从分布式训练到模型对齐的完整 LLM 开发流程。
浏览文档 »
官方课程仓库
·
反馈 Bug
本项目是 Stanford CS336 课程的个人学习仓库,记录了从零开始构建大语言模型的完整过程。
课程核心内容:
- 🔤 Tokenization: 实现 BPE (Byte-Pair Encoding) 分词器
- 🧠 Transformer Architecture: 从头实现 Transformer(RMSNorm, RoPE, Multi-Head Attention, SwiGLU)
- ⚡ Systems: 分布式训练(DDP, Sharded Optimizer, Flash Attention)
- 📊 Scaling Laws: 研究模型规模与性能的关系
- 🗂️ Data Processing: 数据清洗、去重、质量过滤
- 🎯 Alignment: SFT, DPO, GRPO 等对齐技术
| 组件 | 配置 |
|---|---|
| CPU | AMD Ryzen Threadripper 9960X (24核/48线程, 5.49GHz) |
| 内存 | 251 GB DDR5 |
| GPU | 3× NVIDIA GeForce RTX 5090 (32GB × 3 = 96GB) |
| 存储 | 938GB NVMe + 1.9TB HDD |
| CUDA | 13.0 |
以下是在本地配置和运行项目的指南。
- Python 3.10+
- UV (推荐) 或 pip
- CUDA 13.0
- 克隆本仓库
git clone https://github.com/QR-0W/Stanford-CS336.git
cd Stanford-CS336- 安装 UV 包管理器(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env- 进入具体作业目录并下载数据
cd assignment1-basics
./download_data.sh- 运行测试
uv run pytest状态: 🚀 已完成
主要任务:
- 环境配置
- BPE Tokenizer 实现
- Transformer 组件(RMSNorm, RoPE, Attention)
- 完整语言模型训练
学习笔记: Assignment 1 笔记
状态: ⏳ 待开始
主要任务:
- 分布式数据并行 (DDP)
- Sharded Optimizer (ZeRO-like)
- Flash Attention 优化
状态: ⏳ 待开始
主要任务:
- Scaling Laws 实验
- 模型大小与性能关系研究
状态: ⏳ 待开始
主要任务:
- HTML 提取与清洗
- 数据去重
- 语言识别
- PII 检测
- 质量与毒性过滤
状态: ⏳ 待开始
主要任务:
- Supervised Fine-Tuning (SFT)
- Direct Preference Optimization (DPO)
- Group Relative Policy Optimization (GRPO)
核心思想: 从字节级别开始,反复合并高频相邻 token 对
实现步骤:
- 初始化 256 个字节 token (0-255)
- 统计所有相邻 token 对的频率
- 合并频率最高的 token 对
- 重复步骤 2-3 直到达到目标词表大小
性能优化:
- 使用分块处理避免内存溢出
- 增量更新频率统计
- 多进程并行化
更多笔记请查看各作业目录下的 notes.md 文件。
- 仓库初始化
- 下载所有作业代码
- 配置开发环境
- 完成 Assignment 1: Basics
- BPE Tokenizer
- Transformer 实现
- 训练流程
- 完成 Assignment 2: Systems
- 完成 Assignment 3: Scaling
- 完成 Assignment 4: Data
- 完成 Assignment 5: Alignment
到 open issues 页查看所有计划功能和已知问题。
这是一个个人学习项目,但欢迎任何建议和讨论!
如果你发现了 bug 或有改进建议:
- Fork 本项目
- 创建你的 Feature 分支 (
git checkout -b feature/AmazingFeature) - 提交你的变更 (
git commit -m 'Add some AmazingFeature') - 推送到该分支 (
git push origin feature/AmazingFeature) - 创建一个 Pull Request
本项目仅用于教育学习目的。请遵守 Stanford 的学术诚信政策。