llm.c:用约一千行纯 C 训练 GPT-2,掀起「去框架化」运动
一句话
卡帕西发布开源项目 llm.c:不依赖 PyTorch 和 Python,用纯 C(随后扩展到 CUDA)实现 GPT-2 的完整训练。推文获约 160 万浏览,把「LLM 训练到底需要多少东西」这个问题摆上了台面——答案是:一个几百 KB 的单文件就够,而不是几百 MB 的依赖栈。
他说了什么
他用一贯的自嘲式开场介绍这个项目:想不想在没有 245MB PyTorch、107MB cPython 的情况下训练大模型?没人想?现在也可以了。项目首发版本的规格是:
"GPT-2 training on CPU/fp32 in only ~1,000 lines of clean code" —— @karpathy,2024-04-08 · 查看原推 →
他强调这份代码即刻编译、即刻运行,且数值上与 PyTorch 参考实现完全对齐;选 GPT-2 是因为它是「LLM 的祖师爷」——第一个以现代形态齐装上阵且开放权重的模型。这不是玩具复刻,而是把训练全栈(前向、反向、优化器、数据加载)逐层手写出来。
背景:从零实现路线的延长线
llm.c 不是孤立事件,而是他「从零实现」教育路线的延续:minGPT(2020)、nanoGPT(2022)、llama2.c(2023)一路走来,方向始终是把大模型技术栈从层层抽象里拆出来给人看。2024 年初深度学习框架已经厚到一个新人很难说清「训练时到底发生了什么」,llm.c 用最原始的语言给出了一份可通读的答案。项目以 MIT 协议开源在 GitHub。
它引发了什么
- 「去框架化」风潮:llm.c 让「亲手写训练栈」从行为艺术变成一个流派。社区迅速跟进 CUDA 优化、多卡训练,并移植出 AMD、Metal、Mojo、WebGPU 等版本;「XX.c / XX 从零实现」成为此后两年 GitHub 上的固定节目。
- 训练成本坍缩的活标本:一个多月后(2024 年 5 月)他基于 llm.c 演示了 90 分钟、约 20 美元在 8×H100 上复现 GPT-2(124M)——2019 年还是天价工程的事情,五年后成了下午茶级别的实验。
- 性能对比:成熟后的 CUDA 版本在训练速度上一度超过同配置的 PyTorch 基线,证明手写栈不只是教学玩具。
- 精神续作:2025 年 10 月的 nanochat 把同一思路推广到「完整 ChatGPT 克隆」的全流程,被视为 llm.c 路线的集大成。
对你意味着什么
- 最好的 LLM 内功教材之一:想真正理解训练过程,通读 llm.c 的单文件实现比读十篇综述有效——每一行都对应一个数学操作,没有魔法。配合 Zero to Hero 课程食用效果更佳。
- 成本直觉要更新:小规模复现经典模型已进入个人预算区间。做 AI 业务前先自己跑一遍小模型训练,对「什么贵、什么便宜」的判断会完全不同。
- 依赖极简是工程杠杆:对独立开发者,llm.c 示范了一种可迁移的姿势——在部署环境受限、成本敏感的场景(边缘设备、国产硬件)里,砍掉框架依赖本身就是竞争力。
延伸
- llm.c 仓库(GitHub, MIT) —— 代码本体,从 README 读起
- 原推:90 分钟 $20 复现 GPT-2 —— 训练成本坍缩的后续实证
- 解读:nanochat 发布 —— 「$100 能买到的最好的 ChatGPT」,本路线的集大成
- 解读:Transformer 三性质 —— 为什么值得把这个架构亲手写一遍