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),几分钟就能在普通电脑上训完,适合教学和纯粹的理解。

代码结构一览

整个脚本逻辑清晰,像一本打开的教科书:

  1. 数据与分词
    用经典的names.txt(几万个英文名字),字符级分词,只加一个特殊标记。词汇表大小27,简单到不能再简单。

  2. 手写自动微分引擎
    不到100行代码实现了micrograd级别的Value类,支持加减乘幂、ReLU、log、exp等操作,拓扑排序+链式法则完成反向传播。
    这部分是全脚本最硬核也最优雅的地方——完全取代了PyTorch的autograd。

  3. 模型核心组件

    • Embedding:token和position分开,不共享权重
    • Norm:RMSNorm(实现极简)
    • Multi-Head Attention:手动切头、手动算QKV、手动softmax、手动加权,完全不依赖向量化
    • MLP:4倍扩增 → square ReLU(ReLU后平方)→ 投影回来
    • 残差连接、输出头,一切都写得明明白白
  4. 训练与推理
    训练:一个名字一个名字过,逐token计算损失,手写Adam优化器。
    推理:从开始自回归生成,用列表实现KV cache,支持temperature采样。

读完最大的收获

  1. 极致的可读性
    任何稍微懂Python和Transformer的人,都能一行行读懂GPT到底在干什么。没有框架魔法,没有向量化遮蔽,一切摊开在你面前。

  2. 教学价值拉满
    如果你想真正搞清楚“GPT为什么能工作”,这可能是目前最短的路径。比看论文、比看nanoGPT源码、比听课都更直接。

  3. 一个安静的哲学声明
    大模型的“神秘感”很大程度上来自规模和工程优化。算法本身,其实就这么点东西。
    当你用几百行代码就能训练出一个会生成名字的小模型时,会突然意识到:把参数量拉到万亿,确实是工程奇迹,但不是魔法。

写在最后

microGPT不是要取代llama或GPT-4,它只是Karpathy送给社区的一份极简主义礼物。
它提醒我们:技术再复杂,也值得偶尔停下来,回到最本质的地方看看。

强烈建议每个对大模型感兴趣的人都去读一遍原代码。读完你会更清楚大模型的本质,也会更敬佩那些把规模推到极致的工程团队。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐