Skip to content

llm.c 閱讀摘要

專案定位

llm.c 是 Andrej Karpathy 的純 C/CUDA 實作,用於訓練 GPT-2 系列語言模型。核心哲學是零 PyTorch 依賴 — 不需 245MB 的 PyTorch 或 107MB 的 cPython,僅用 ~1000 行乾淨的 C 程式碼就能完成完整訓練流程。

核心檔案

檔案說明
train_gpt2.cCPU 參考實作 (FP32),~1182 行,含完整 forward/backward/update
train_gpt2.cuCUDA 加速版本 (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

訓練流程

  1. Forward pass: 編碼器 → 12 層 Transformer → LayerNorm → 線性投影 → Softmax → Cross-entropy loss
  2. Backward pass: 反向傳播梯度,使用 += 累加模式
  3. Update: AdamW 優化器,支援 weight decay、gradient clipping

效能特點

  • 比 PyTorch Nightly 快約 7%
  • 支援 cuBLAS/cuDNN/cuBLASLt 加速
  • 支援 FP32、TF32、BF16、FP16 精度
  • 多 GPU 訓練 (MPI+NCCL)、ZeRO 優化
  • C 版本使用 OpenMP 多執行緒加速