Appearance
llm.c 閱讀摘要
專案定位
llm.c 是 Andrej Karpathy 的純 C/CUDA 實作,用於訓練 GPT-2 系列語言模型。核心哲學是零 PyTorch 依賴 — 不需 245MB 的 PyTorch 或 107MB 的 cPython,僅用 ~1000 行乾淨的 C 程式碼就能完成完整訓練流程。
核心檔案
| 檔案 | 說明 |
|---|---|
train_gpt2.c | CPU 參考實作 (FP32),~1182 行,含完整 forward/backward/update |
train_gpt2.cu | CUDA 加速版本 (BF16/FP32/FP16),~1904 行,支援多 GPU |
llmc/*.cuh | 各層的 CUDA kernel (layer norm, attention, matmul, AdamW 等) |
doc/layernorm/layernorm.md | 逐步教學:從 PyTorch 到 C 實作 LayerNorm |
模型架構
GPT-2 124M 參數:
- 序列長度: 1024
- 詞彙量: 50257 (填充至 50304 以對齊記憶體)
- 層數: 12
- 注意力頭: 12
- 通道數: 768
- 參數總數: 124,439,808
訓練流程
- Forward pass: 編碼器 → 12 層 Transformer → LayerNorm → 線性投影 → Softmax → Cross-entropy loss
- Backward pass: 反向傳播梯度,使用 += 累加模式
- Update: AdamW 優化器,支援 weight decay、gradient clipping
效能特點
- 比 PyTorch Nightly 快約 7%
- 支援 cuBLAS/cuDNN/cuBLASLt 加速
- 支援 FP32、TF32、BF16、FP16 精度
- 多 GPU 訓練 (MPI+NCCL)、ZeRO 優化
- C 版本使用 OpenMP 多執行緒加速