Skip to content

llama2.c 閱讀摘要

專案概覽

llama2.c 是由 Andrej Karpathy 開發的專案,旨在用純 C 語言實現 Llama 2 大型語言模型的推理(inference)功能。核心程式碼僅有約 700 行 C 程式碼(run.c),無需任何外部依賴即可編譯執行。

核心架構

PyTorch 訓練 → 權重匯出 (.bin) → C 推理引擎 (run.c)
  • 訓練端:使用 PyTorch 實作的 Llama 2 架構(model.pytrain.py
  • 匯出層export.py 將 PyTorch 權重轉換為二進位格式
  • 推理端run.c 讀取 .bin 檔執行 token 生成

檔案結構

檔案說明
run.c核心 C 推理引擎(973 行),包含 Transformer 前向傳播、BPE Tokenizer、Sampler
runq.cint8 量化版本的推理引擎
model.pyPyTorch Llama 2 模型定義(RMSNorm、RoPE、Attention、FFN)
train.py分散式訓練腳本(支援 DDP)
tokenizer.pySentencePiece tokenizer 匯出工具
export.py模型權重匯出至 .bin 格式
tinystories.pyTinyStories 資料集下載與前處理

支援的模型

  • 自訓練小型模型(15M / 42M / 110M 參數)
  • Meta Llama 2 7B(需手動轉換)
  • Hugging Face Llama 2 架構模型

關鍵技術

  • RMSNorm:取代 LayerNorm,計算更高效
  • RoPE(Rotary Position Embedding):相對位置編碼
  • GQA(Grouped Query Attention):KV 頭數可少於 Query 頭數
  • SwiGLU:MLP 中的非線性激活函數
  • KV Cache:快取歷史 Key/Value 避免重複計算
  • BPE Tokenizer:Byte Pair Encoding 分詞器
  • Top-p (nucleus) sampling:核心採樣策略

效能參考

模型設備速度
stories15MM1 MacBook Air~110 tok/s
stories42MM1 MacBook Air互動速度
Llama 2 7B (fp32)96 執行緒 Linux~4 tok/s
Llama 2 7B (int8)64 執行緒 Linux~14 tok/s

專案定位

「最簡單、最小、最易於修改的參考實作」 — Karpathy

相較於功能完整的 llama.cpp,llama2.c 更側重於教育性可讀性,適合學習者理解 LLM 推理的底層原理。