资讯|

Karpathy用200行Python手搓了一个GPT,没有任何依赖

Karpathy 发布 MicroGPT:200 行纯 Python、零依赖,包含完整 GPT 训练和推理。十年简化之路的终点。

Andrej Karpathy 又整活了。

这次他发了一个叫 MicroGPT 的项目——200 行纯 Python,零依赖,包含了训练和推理一个 GPT 所需要的全部内容。

没有 PyTorch。没有 TensorFlow。没有 numpy。就是赤裸裸的 Python。

数据集、分词器、自动微分引擎、GPT-2 架构的神经网络、Adam 优化器、训练循环、推理循环——全在一个文件里。Karpathy 自己说:"我没法再简化了。"

然后他说了一句让人破防的话:"I think it is beautiful 🥹"

这 200 行到底装了什么

先看它能干嘛:用 32000 个英文名字训练完之后,模型可以"凭空编造"出听起来很合理的新名字:

CODE
kamon, ann, karai, jaire, vialan,
karia, yeran, anna, areli, kaina...

看起来没啥了不起?但 Karpathy 提醒你:从模型的视角看,你和 ChatGPT 的对话也不过是一个"长相奇特的文档"。你的提问是文档的开头,模型的回答只是统计意义上的文档补全。

本质上,ChatGPT 和这个 200 行的小玩意做的是同一件事。区别只在于规模。

精髓在自动微分

整个项目最核心的部分是一个叫 Value 的类。它实现了完整的自动微分引擎——也就是反向传播的基础。

PYTHON
class Value:
    def __init__(self, data, children=(), local_grads=()):
        self.data = data
        self.grad = 0
        self._children = children
        self._local_grads = local_grads

每个 Value 包一个标量数字,记录它是怎么被计算出来的。加法、乘法、指数、对数——每个运算都留下痕迹。然后 .backward() 从损失函数一路反向走,用链式法则算出每个参数的梯度。

PyTorch 干的也是这个事,只不过用 C++ 和 CUDA 做了几千倍的加速。

为什么这很重要

这不是一个实用工具。它训练速度极慢(纯 Python 标量运算),生成的也只是名字。

但这正是 Karpathy 想要的——他称之为"art project"(艺术项目)。

这个项目的意义在于:它证明了 LLM 的核心算法并不复杂。剥掉所有的工程优化(GPU 并行、混合精度、分布式训练、FlashAttention),剩下的就是这 200 行代码。

或者换个说法:GPT 的全部秘密,一个下午就能读完。

这对学习者来说是巨大的礼物。之前想从头理解 transformer,要么看论文("Attention is All You Need"本身就够绕的),要么啃 PyTorch 源码(几万行),要么看博客(各有各的侧重和遗漏)。

现在,200 行。从数据到推理,一条线走到底。

Karpathy 的十年简化之路

这不是突然冒出来的。MicroGPT 是 Karpathy 一系列"从头造轮子"项目的终点:

  • micrograd:从零实现反向传播
  • makemore:字符级语言模型
  • nanoGPT:最小可用的 GPT 训练代码
  • MicroGPT:把以上全部压进一个文件

这是一个人花了十年,把一个领域从"看起来很难"简化到"其实就这么回事"的过程。

值得跑一下

Karpathy 提供了 Google Colab 版本,打开就能跑。

如果你正在学 AI,或者好奇 ChatGPT 到底是怎么工作的,这 200 行代码比任何课程都值钱。

不是因为它能做多少事,而是因为它把不能再少的东西摆在你面前:这就是全部了。

准备好了吗?

免费注册,立即体验全部功能