Llama2.c:一个C文件、零依赖、完整LLM推理——Karpathy的极简主义大师课

GitHub June 2026
⭐ 19655
来源:GitHubedge AI归档:June 2026
Andrej Karpathy 发布了 llama2.c,一个单文件 C 语言实现,无需 PyTorch 或任何框架即可运行 Llama 2 推理。这一激进简化降低了理解和在资源受限设备上部署大型语言模型的门槛。

AI 研究领域知名人物、曾任职于 Tesla 和 OpenAI 的 Andrej Karpathy 发布了 llama2.c——一个纯 C 语言实现的 Llama 2 推理引擎,全部代码仅包含在一个源文件中。该项目已在 GitHub 上获得超过 19,600 颗星,证明一个功能完整的基于 Transformer 的语言模型可以在仅依赖标准 C 编译器的情况下运行。其核心成就是剥离了整个 PyTorch 栈、CUDA 和 Python 运行时,取而代之的是大约 700 行手写 C 代码,用于执行矩阵运算、注意力机制和 token 生成。这并非玩具:它能加载官方 Llama 2 权重(转换为二进制格式)并生成连贯的文本。其直接意义有两点。首先,它作为无与伦比的教育工具,让学习者能真正看清 Transformer 内部运作;其次,它为在边缘设备上运行 LLM 开辟了全新可能性。

技术深度解析

llama2.c 的核心是一场减法大师课。标准的 Llama 2 推理流程,在 PyTorch 或 Hugging Face Transformers 中实现时,涉及跨多个库的数十万行代码:PyTorch 的自动求导引擎、CUDA 内核、张量操作、分词器和模型加载工具。Karpathy 的做法是仅用纯 C 语言实现 Transformer 架构的前向传播,只使用了 `malloc`、`fread` 和基本算术运算。

实现的架构是标准的仅解码器 Transformer,包含 RoPE(旋转位置编码)、RMSNorm、SwiGLU 激活函数和分组查询注意力(GQA)。C 代码直接映射数学运算:前馈层的矩阵-向量乘法、注意力机制的 softmax 以及层归一化。关键工程决策包括:

- 权重加载:官方 Llama 2 检查点(PyTorch `.pth` 格式)通过一个配套的 Python 脚本转换为原始二进制文件。该二进制文件随后被内存映射或直接读入浮点数数组。
- 推理期间无内存分配:所有张量预先分配为静态或堆数组。前向传播重用这些缓冲区,避免了 `malloc` 开销。
- 手动矩阵乘法:不调用 BLAS 库,代码使用简单的三重嵌套循环。这故意放慢速度,但实现了最大透明度。Karpathy 指出,7B 参数模型在 CPU 上运行速度约为每秒 1 个 token——对生产环境不可用,但对学习来说完全足够。
- 整数量化路径:仓库包含一个 `runq.c` 变体,使用 4 位整数量化(Q4_0 格式,类似于 llama.cpp 的格式)。这减少了约 4 倍的内存占用,并在支持 SIMD 的 CPU 上加速推理。

该项目的 GitHub 仓库(`karpathy/llama2.c`)经历了快速的社区演进。值得注意的分支包括:
- `ngxson/llama2.c`:为 Raspberry Pi 和移动 CPU 添加了 ARM NEON 内联函数。
- `pcuenca/llama2.c-wasm`:编译为 WebAssembly,支持在浏览器内推理。
- `cafaxo/llama2.c-metal`:添加了 Apple Metal GPU 加速。

性能基准测试

下表将 llama2.c 与其他推理方案在标准消费级 CPU(AMD Ryzen 9 7950X,16 核,32GB RAM)上运行 7B 参数模型进行了比较:

| 实现 | Tokens/秒 | 内存 (GB) | 依赖项 | 核心代码行数 |
|---|---|---|---|---|
| llama2.c (float32) | 0.8 | 14.0 | 无(C 编译器) | ~700 |
| llama2.c (Q4_0) | 4.2 | 4.5 | 无(C 编译器) | ~900 |
| llama.cpp (Q4_K_M) | 18.5 | 4.8 | C++17,BLAS 可选 | ~15,000 |
| PyTorch (float16) | 2.1 | 14.5 | Python, CUDA, PyTorch | >100,000 |
| Hugging Face TGI | 35.0 | 16.0 | Python, CUDA, Docker | >200,000 |

数据要点:llama2.c 比 llama.cpp 等优化引擎慢 20-40 倍,但其内存效率(尤其是量化后)具有竞争力。关键区别在于代码复杂度——llama2.c 简单了两个数量级,使其成为教育剖析和超低资源环境下唯一可行的选择。

关键人物与案例研究

Andrej Karpathy 是这里的核心人物。作为前 Tesla AI 总监和 OpenAI 创始成员,Karpathy 长期以来一直倡导深入理解而非黑箱使用。他之前的教学项目——如 `karpathy/micrograd`(一个微型自动求导引擎)和 `karpathy/nn-zero-to-hero`(一个从零构建神经网络的 YouTube 系列)——奠定了其作为该领域最有效教育者的声誉。llama2.c 是逻辑上的顶峰:一个生产规模的模型被还原为其最本质的形式。

该项目已在多个实际场景中被采用:

- Raspberry Pi LLM 服务器:开发者 `geerlingguy`(Jeff Geerling)演示了 llama2.c 在 Raspberry Pi 4 上运行 7B 模型,达到约 0.2 tokens/秒。虽然慢得令人痛苦,但这证明了一台 35 美元的计算机可以运行现代 LLM。
- 基于浏览器的演示:`pcuenca` 的 WebAssembly 移植版允许任何人直接在网页浏览器中运行 1.3B 参数模型,无需服务器。这已被用于 AI 教育工作坊。
- 学术课程:多所大学(包括 Stanford 的 CS224n 和 MIT 的 6.S191)已将 llama2.c 纳入课程,作为理解 Transformer 内部机制的参考实现。

竞争格局

下表将 llama2.c 与其他最小推理项目进行了对比:

| 项目 | 语言 | 模型支持 | 量化 | 目标用途 | GitHub 星数 |
|---|---|---|---|---|---|
| llama2.c | C | 仅 Llama 2 | Q4_0 | 教育,边缘设备 | 19,600 |
| llama.cpp | C++ | Llama, Mistral, Falcon 等 | Q2-Q8, IQ | 生产 CPU | 65,000 |
| whisper.cpp | C++ | 仅 Whisper | Q5_0 | 语音转文字 | 35,000 |
| ggml | C | 多种(通过绑定) | Q4_0-Q8_0 | C++ 库 | 10,000 |
| tinygrad | Python | 多种(通过 JIT) | 无 | 深度学习框架 | 10,000 |

更多来自 GitHub

Flowsint:用图数据库重塑网络安全分析的调查平台Flowsint,一个托管在GitHub上名为'reconurge/flowsint'的开源平台,已爆炸式闯入网络安全领域,一天内积累6878个星标。该平台填补了安全工具中的一个关键空白:缺乏直观、可视化的基于图的复杂调查分析。传统的安全信Rocket.Chat:以数据主权挑战Slack和Teams的开源通信操作系统Rocket.Chat,一款开源安全通信平台,如今以“CommsOS”自居,已在GitHub上收获45,681颗星标,彰显出强大的开发者与企业兴趣。该平台通过端到端加密、联邦协议支持以及自托管部署,与Slack和Microsoft TeamKueue:重塑AI/ML批处理调度的Kubernetes原生作业排队系统Kueue填补了Kubernetes生态中长期存在的空白:为批处理、AI/ML训练及数据分析作业提供原生、高效的作业排队能力。传统Kubernetes调度器针对长期运行的微服务优化,而非需要跨团队公平共享的突发性、资源密集型作业。Kueue查看来源专题页GitHub 已收录 2860 篇文章

相关专题

edge AI118 篇相关文章

时间归档

June 20262025 篇已发布文章

延伸阅读

Phi Cookbook:微软规模化部署高性价比小语言模型的实战蓝图微软正式发布开源项目 Phi Cookbook,这是一套面向开发者的权威指南,系统覆盖 Phi-1、Phi-2 与 Phi-3 系列小语言模型的微调、部署与评估。该资源旨在让资源受限环境也能获得顶尖 AI 性能,标志着微软在推动高效模型民主Box应用:为Android带来全栈本地AI套件,隐私优先设计一款名为Box的全新开源Android应用,将完整的私有AI套件完全运行在设备本地,集成了llama.cpp、whisper.cpp和stable-diffusion.cpp,支持GGUF模型导入、语音对话、视觉AI和图像生成,并通过生物识ExLlamaV3:开源引擎让消费级GPU跑本地大模型不再是梦ExLlamaV3,一款来自turboderp的尖端开源库,正在重新定义消费级GPU上本地LLM推理的可能性。通过将激进量化与自定义CUDA内核引擎相结合,它大幅削减了VRAM需求和延迟,使得前沿模型在RTX 4090这样的单卡硬件上也能流Tesseract 的 tessdata_fast:整数量化如何让 OCR 在边缘设备上胜出Tesseract OCR 的 tessdata_fast 仓库提供了经过整数量化的 LSTM 模型,以牺牲几个百分点的精度换取 2 到 4 倍的推理速度提升。AINews 深入剖析其量化机制、在边缘设备上的真实性能,以及这对文档扫描、车牌

常见问题

GitHub 热点“Llama2.c: One C File, No Dependencies, Full LLM Inference — Karpathy's Masterclass in Minimalism”主要讲了什么?

Andrej Karpathy, a prominent figure in AI research known for his work at Tesla and OpenAI, has released llama2.c — a pure C implementation of Llama 2 inference contained in a singl…

这个 GitHub 项目在“How to compile and run llama2.c on Raspberry Pi”上为什么会引发关注?

At its heart, llama2.c is a masterclass in reduction. The standard Llama 2 inference pipeline, as implemented in PyTorch or Hugging Face Transformers, involves hundreds of thousands of lines of code across multiple libra…

从“llama2.c vs llama.cpp performance comparison on CPU”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 19655,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。