minGPT
AI大牛Karpathy亲写,约300行PyTorch代码完整复现GPT训练与推理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
AI大牛Karpathy亲写,约300行PyTorch代码完整复现GPT训练与推理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
minGPT:用300行PyTorch代码复现GPT的训练与推理
如果你想理解GPT(Generative Pretrained Transformer)到底是怎么工作的,却在被Hugging Face Transformers库中动辄上万行的代码劝退——minGPT就是为你准备的。这是AI大牛Andrej Karpathy(特斯拉前AI总监、OpenAI创始成员)用纯PyTorch亲手重写的GPT实现。整个模型定义只有约300行代码,没有多余的抽象层,每一个张量运算都可以追溯到原理。
minGPT诞生于GPT-2发布的时期。彼时,业界已有的GPT复现版本要么依赖TensorFlow 1.x的老旧API,要么被Hugging Face的通用框架封装得过于复杂。Karpathy认为GPT的核心思想其实并不复杂——「一个序列进去,输出下一个token的概率分布」。他从这一理念出发,用最少的代码把这个过程讲清楚。
因此,minGPT从设计之初就明确了定位:不是追求SOTA性能,而是追求代码的可读性和教学价值。它的存在,让「从零理解Transformer架构」这件事从不可能变成了可能。
minGPT的核心代码被精心地拆分为三个模块:
mingpt/model.py(约311行):完整的GPT模型定义,包括多头自注意力(CausalSelfAttention)、FFN前馈网络、新GELU激活函数、位置编码和GPT模型类。这是最核心的文件,Karpathy甚至在注释中标注了参考的OpenAI官方实现和Hugging Face实现,方便读者交叉验证。mingpt/bpe.py:Byte Pair Encoding(BPE)分词器的PyTorch实现。BPE是GPT系列模型使用的标准分词方式,将文本转换为整数序列。mingpt/trainer.py(约110行):通用的PyTorch训练循环封装,包括学习率调度、梯度裁剪、权重衰减配置。这个训练器与GPT模型完全解耦,理论上可以用来训练任何PyTorch神经网络。minGPT在projects/目录下提供了多个可运行的Demo项目:
projects/adder:训练GPT从零学会做任意位数的整数加法。这来源于GPT-3论文中的一个著名示例——LLM能够「理解」数学运算本身,而非死记硬背。projects/chargpt:一个简单的字符级语言模型训练示例。demo.ipynb 和 generate.ipynb:Jupyter Notebook格式的交互式演示,无需配置环境即可在浏览器中运行GPT训练和文本生成。值得注意的是,minGPT已处于半归档状态。Karpathy在2023年1月的README更新中明确表示,后续工作转移到了nanoGPT——一个更精简、更注重训练效率的版本。
minGPT并非银弹,其局限性同样明显:
torch.compile()等新特性优化。minGPT的价值不在于它训练出了多好的模型,而在于它降低了理解GPT的门槛。
在minGPT出现之前,理解GPT的通常路径是:阅读OpenAI原始论文 → 阅读Hugging Face代码 → 再到自己实现。minGPT提供了一个中间层——用最少的代码完整复现GPT的核心流程,让研究者和学生可以直接从代码层面理解Transformer的核心思想。
据不完全统计,minGPT被大量AI课程、博客文章、技术书籍引用,成为全球AI学习者理解Transformer的入门读物。它的存在,证明了「好的代码本身就是最好的文档」。
minGPT是一个以教学为唯一目标的GPT复现项目,代码量极低、可读性极高。它不是生产级工具,而是理解大语言模型原理的绝佳起点。
如果你是AI初学者或教育者,minGPT是必读代码;如果你是追求生产力的开发者,请直接使用nanoGPT或Hugging Face Transformers。
一句话评价:给AI大模型学习者的最好礼物,300行代码说清GPT的本质。