Skip to content

llm/README.md ​

配套源码,运行方法见同目录 README。返回实验总览。

md
# CS336 CPU 实验

这是原创中文课程伴随代码,讲义入口在 `docs/llm/index.md`。NumPy 实现真正可训练的 decoder-only Transformer:pre-RMSNorm、RoPE、SwiGLU、多头因果注意力、显式反向传播、AdamW、梯度裁剪、warmup/cosine 调度及 checkpoint 生成。默认字符 tokenizer;字节 BPE 可单独测试或接入训练。

从仓库根目录运行:

```sh
python3 -m unittest discover -s labs/llm -p 'test_*.py' -v
python3 labs/llm/train.py --steps 300
python3 labs/llm/generate.py --prompt "the fox " --tokens 100
python3 labs/llm/algorithms.py
```

需要 Python 3.10+ 与 `requirements.txt` 中的 NumPy。若环境未安装依赖:

```sh
python3 -m venv labs/llm/.venv
labs/llm/.venv/bin/python -m pip install -r labs/llm/requirements.txt
```

然后使用 venv 中的 Python 执行上述命令。代码不需要联网、下载数据或 GPU。语料 `corpus.txt` 是本项目原创的 40 行英文短句。训练按行先切分 80%/20%,tokenizer 只拟合训练文本;固定训练/验证窗口用于观察趋势,不能作为真实基准。

| 文件 | 作用 |
|---|---|
| `bpe.py` | 字节 BPE 与字符基线;确定性合并、JSON 序列化 |
| `model.py` | Transformer 前反向、稳定交叉熵、AdamW、batch 移位与生成 |
| `train.py` | 可复现 CPU 训练、固定验证窗口、指标与 checkpoint |
| `generate.py` | 独立重载、temperature/top-k 采样 |
| `algorithms.py` | 在线 attention、数据去重、幂律拟合、SFT/GRPO/DPO 数值函数 |
| `test_llm.py` | 15 项 unittest,含有限差分梯度与因果不变量 |
| `reports/` | 2026-10-04 的实际运行记录与上游固定来源 |

字节 BPE 训练:

```sh
python3 labs/llm/train.py --tokenizer bpe --merges 32 --steps 300 --out labs/llm/runs/bpe-seed7
python3 labs/llm/generate.py --checkpoint labs/llm/runs/bpe-seed7/model.npz --prompt "the fox "
```

`runs/` 是可重建输出,不纳入版本管理。checkpoint 只包含推理所需状态,不能恢复完全一致的 optimizer/RNG 轨迹。默认字符 tokenizer 对未见字符报错;BPE 能编码任意 UTF-8,但模型没有因此掌握未训练语言。

本代码没有实现 GPU Triton kernel、DDP、完整 Common Crawl 管线或 Qwen 对齐训练;`algorithms.py` 的小实验不能作为这些官方作业已完成的证明。BPE 的预切分与 tie-break 也有意采用更简明定义,不兼容官方 A1 评分接口。官方 Spring 2025 标签与固定提交见 `reports/sources.json`。