Skip to content

QR-0W/Stanford-CS336

Repository files navigation

Contributors Forks Stargazers Issues MIT License


Stanford CS336: Language Modeling from Scratch

从零开始构建大语言模型 - 课程作业实现与学习笔记
本仓库包含 Stanford CS336 课程的所有作业实现、实验笔记和个人理解。课程涵盖从 Tokenizer 到 Transformer 架构,从分布式训练到模型对齐的完整 LLM 开发流程。
浏览文档 »

官方课程仓库 · 反馈 Bug

目录
  1. 关于本项目
  2. 开始
  3. 作业概览
  4. 学习笔记
  5. 路线图
  6. 贡献
  7. 许可证
  8. 联系我
  9. 致谢

关于本项目

本项目是 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

安装

  1. 克隆本仓库
git clone https://github.com/QR-0W/Stanford-CS336.git
cd Stanford-CS336
  1. 安装 UV 包管理器(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
  1. 进入具体作业目录并下载数据
cd assignment1-basics
./download_data.sh
  1. 运行测试
uv run pytest

作业概览

Assignment 1: Basics

状态: 🚀 已完成

主要任务:

  • 环境配置
  • BPE Tokenizer 实现
  • Transformer 组件(RMSNorm, RoPE, Attention)
  • 完整语言模型训练

学习笔记: Assignment 1 笔记


Assignment 2: Systems

状态: ⏳ 待开始

主要任务:

  • 分布式数据并行 (DDP)
  • Sharded Optimizer (ZeRO-like)
  • Flash Attention 优化

Assignment 3: Scaling

状态: ⏳ 待开始

主要任务:

  • Scaling Laws 实验
  • 模型大小与性能关系研究

Assignment 4: Data

状态: ⏳ 待开始

主要任务:

  • HTML 提取与清洗
  • 数据去重
  • 语言识别
  • PII 检测
  • 质量与毒性过滤

Assignment 5: Alignment

状态: ⏳ 待开始

主要任务:

  • Supervised Fine-Tuning (SFT)
  • Direct Preference Optimization (DPO)
  • Group Relative Policy Optimization (GRPO)

学习笔记

BPE Tokenizer 实现要点

核心思想: 从字节级别开始,反复合并高频相邻 token 对

实现步骤:

  1. 初始化 256 个字节 token (0-255)
  2. 统计所有相邻 token 对的频率
  3. 合并频率最高的 token 对
  4. 重复步骤 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 或有改进建议:

  1. Fork 本项目
  2. 创建你的 Feature 分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的变更 (git commit -m 'Add some AmazingFeature')
  4. 推送到该分支 (git push origin feature/AmazingFeature)
  5. 创建一个 Pull Request

许可证

本项目仅用于教育学习目的。请遵守 Stanford 的学术诚信政策。

联系我

项目链接: https://github.com/QR-0W/Stanford-CS336

致谢

About

Assignments of stanford-cs336-2025spring.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors