Karpathy的microGPT:几百行Python代码,剥开大模型的“皇帝新衣”
Karpathy的microGPT:几百行Python代码,剥开大模型的“皇帝新衣”
最近Andrej Karpathy在GitHub上扔了一个Gist(https://gist.github.com/karpathy/8627fe009c40f57531cb18360106ce95),名字叫microGPT。他自己说,这是一个“艺术项目”,目标不是性能,而是把GPT的算法本质浓缩到最干净、最透明的状态——纯Python实现,连NumPy都不用,整个训练和推理过程几百行代码就搞定。
读完之后只有一个感觉:原来大模型的核心,竟然可以这么简单。
为什么说这是“艺术项目”?
Karpathy在描述里写得很直白:
“这份文件包含了训练一个GPT所需的所有算法本质,其余一切都只是为了效率。”
现代大模型动辄上百亿参数、分布式训练、混合精度、FlashAttention……层层工程包装之后,很多人已经忘了:GPT的数学本质其实没那么复杂。microGPT就是把这些包装全部撕掉,只留下最纯粹的算法骨架。
它和真正的GPT-2有一些细微差异(RMSNorm代替LayerNorm、无bias、square ReLU代替GeLU、无weight tying),但核心流程一模一样。默认参数极小(嵌入维度16、一层Transformer、上下文长度8),几分钟就能在普通电脑上训完,适合教学和纯粹的理解。
代码结构一览
整个脚本逻辑清晰,像一本打开的教科书:
-
数据与分词
用经典的names.txt(几万个英文名字),字符级分词,只加一个特殊标记。词汇表大小27,简单到不能再简单。 -
手写自动微分引擎
不到100行代码实现了micrograd级别的Value类,支持加减乘幂、ReLU、log、exp等操作,拓扑排序+链式法则完成反向传播。
这部分是全脚本最硬核也最优雅的地方——完全取代了PyTorch的autograd。 -
模型核心组件
- Embedding:token和position分开,不共享权重
- Norm:RMSNorm(实现极简)
- Multi-Head Attention:手动切头、手动算QKV、手动softmax、手动加权,完全不依赖向量化
- MLP:4倍扩增 → square ReLU(ReLU后平方)→ 投影回来
- 残差连接、输出头,一切都写得明明白白
-
训练与推理
训练:一个名字一个名字过,逐token计算损失,手写Adam优化器。
推理:从开始自回归生成,用列表实现KV cache,支持temperature采样。
读完最大的收获
-
极致的可读性
任何稍微懂Python和Transformer的人,都能一行行读懂GPT到底在干什么。没有框架魔法,没有向量化遮蔽,一切摊开在你面前。 -
教学价值拉满
如果你想真正搞清楚“GPT为什么能工作”,这可能是目前最短的路径。比看论文、比看nanoGPT源码、比听课都更直接。 -
一个安静的哲学声明
大模型的“神秘感”很大程度上来自规模和工程优化。算法本身,其实就这么点东西。
当你用几百行代码就能训练出一个会生成名字的小模型时,会突然意识到:把参数量拉到万亿,确实是工程奇迹,但不是魔法。
写在最后
microGPT不是要取代llama或GPT-4,它只是Karpathy送给社区的一份极简主义礼物。
它提醒我们:技术再复杂,也值得偶尔停下来,回到最本质的地方看看。
强烈建议每个对大模型感兴趣的人都去读一遍原代码。读完你会更清楚大模型的本质,也会更敬佩那些把规模推到极致的工程团队。
更多推荐

所有评论(0)