nanoGPT
斯坦福博士 Andrej Karpathy 亲手打造的极简 GPT 训练工具,600 行代码说清 G
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
斯坦福博士 Andrej Karpathy 亲手打造的极简 GPT 训练工具,600 行代码说清 G
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:nanoGPT 项目封面图
2019年,Transformer 提出不过两年,GPT 系列刚刚起步,AI 圈子里最不缺的就是"又一个框架"。彼时,斯坦福博士 Andrej Karpathy(后成为特斯拉 Autopilot 负责人、OpenAI 研究员)写了一句话:"minGPT 太复杂了,我写一个更简单的。" 于是,minGPT 诞生了——一个用于教学目的的最小化 GPT 实现。
后来,Karpathy 又觉得 minGPT 还是太"教育向"了,他想做一个真正能训练 GPT 的、生产级的极简实现。于是 nanoGPT 诞生了——代码行数控制在 600 行左右(model.py 300 行 + train.py 300 行),用他的话说:"prioritizes teeth over education"(重实战而非教学)。
2025年11月,Karpathy 甚至发推表示 nanoGPT 已经过时,推出了更强大的继任者 nanochat。但 nanoGPT 作为 AI 训练代码的"Hello World",至今仍是 GitHub 上最受欢迎的 GPT 训练项目之一。
在 nanoGPT 出现之前,训练一个 GPT 模型需要什么?答案是:海量的代码、复杂的依赖、以及大量你根本不想读的配置。
主流深度学习框架(PyTorch、TensorFlow)的 GPT 实现往往有数万行代码,依赖成百上千的库,分布式训练配置更是让人望而生畏。nanoGPT 的核心哲学是:用最少的代码,做最纯粹的事。
整个项目只有 7 个核心 Python 文件:model.py(模型定义)、train.py(训练循环)、configurator.py(配置工具)、sample.py(采样推理)、bench.py(性能测试),以及若干配置文件和数据集准备脚本。总计不超过 2000 行代码。
如果说大型 GPT 训练框架是一套功能完备的"豪华厨房",nanoGPT 更像是厨房里的一口单柄平底锅——功能单一但极度好用。
用更技术的话说:nanoGPT 是一个GPT-2 模型从零训练或微调的最小化完整工具链。你可以把它理解为 PyTorch 官方 GPT-2 示例的"精简复刻版",但比官方版本更干净、更易hack。
nanoGPT 提供了完整的训练流程,包括数据预处理、模型定义、分布式训练、采样推理:
从零训练(From Scratch):在莎士比亚数据集上,只需一条命令即可启动训练。Karpathy 给出的示例在单个 A100 GPU 上只需约 3 分钟即可完成一个小型 GPT 的训练,验证损失(validation loss)达到 1.4697,生成效果虽然语法幼稚但已能模仿莎士比亚的写作风格。
微调预训练模型:nanoGPT 支持加载 OpenAI GPT-2 的预训练权重进行微调。你可以用自己的数据集微调出一个专属的文本生成模型。支持的模型规模从 GPT-2 124M 到 GPT-2 1.3B 不等。
分布式训练:通过 PyTorch 原生的 torchrun 支持多 GPU 分布式数据并行(DistributedDataParallel,DDP)。在 8 卡 A100 节点上约 4 天即可完成 GPT-2 124M 在 OpenWebText 数据集上的完整训练。
灵活的采样推理:sample.py 支持从训练好的模型checkpoint中采样生成文本,支持温度(temperature)、top-p 等采样策略控制。
配置文件驱动:每个训练场景对应一个 Python 配置文件(位于 config/ 目录),如 train_shakespeare_char.py,里面定义了模型规模、数据路径、超参数等。Karpathy 称之为"训练超参数管理"的最佳实践。
Flash Attention 原生支持:代码自动检测 PyTorch 版本是否支持 scaled_dot_product_attention,如果支持则自动启用高效的 Flash Attention 实现,大幅减少显存占用和计算时间。这是2023年后大模型训练的标配优化。
PyTorch 2.0 torch.compile() 兼容:训练脚本默认开启 compile=True,自动利用 PyTorch 2.0 的 JIT 编译进一步加速。在实测中,compile 可以带来 20-30% 的端到端训练速度提升。
CPU 兼容模式:没有 GPU?没关系。只需几行参数调整,nanoGPT 可以在 CPU 上运行,虽然速度慢很多,但足以让你理解整个训练流程。
标准化的数据准备:data/ 目录提供了多种数据集的准备脚本(以 OpenWebText 和莎士比亚为例),包括 BPE 分词(通过 tiktoken)、数据序列化等标准化步骤。
代码行数极少:model.py 和 train.py 各约 300 行,加起来不到 600 行代码实现了完整的 GPT-2 训练流程。相比之下,Hugging Face Transformers 库中单 GPT-2 模型文件就有数千行。
命令行界面,非 GUI:nanoGPT 是纯命令行工具,没有 Web UI 或图形界面。所有操作通过 Python 脚本和命令行参数完成。对于非 ML 背景的开发者来说,有一定学习门槛。
最低硬件需求:要获得有意义的训练结果,需要一块 NVIDIA GPU(至少 8GB 显存,推荐 24GB+)。在 CPU 上训练一个小型模型可能需要数小时甚至数天。
依赖较多:需要安装 PyTorch、NumPy、transformers、datasets、tiktoken、wandb、tqdm 等多个库,pip install 一条命令可以搞定,但在中国大陆可能需要换源。
无容器化部署:没有提供 Dockerfile 或 docker-compose.yml,无法通过 Docker 一键部署。需要手动配置 Python 环境。
不支持更先进的大模型:nanoGPT 主要实现的是 GPT-2 级别的模型架构(仅解码器的 Transformer),不支持 GPT-4、Claude 等更复杂的模型架构(如 RLHF、对齐微调等)。它本质上是一个"基座模型训练器",而非完整的大模型工具链。
缺乏生产级功能:没有内置的模型服务(model serving)、API 部署、监控告警等生产环境必备组件。Karpathy 也承认这是"教学/实验用"代码,不是"部署用"代码。
已不再维护:2025年11月 Karpathy 宣布 nanoGPT 已过时,主推 nanochat。作为一个 2022-2023 年的项目,部分 API(如 PyTorch 版本兼容性)可能需要调整。
缺乏中文文档:README 和代码注释全部为英文,对中文用户有一定门槛。
nanoGPT 的意义不在于它能训练出多强大的模型,而在于它示范了一种"极简主义"的 AI 工程文化:
从增长曲线看,该项目在 2022-2023 年间增长迅猛,主要受益于大模型热潮。随着 GPT-4、Claude 等大模型的兴起,社区的关注点逐渐转向更大规模的预训练和微调工具链(如 Axolotl、TRL),nanoGPT 的增长率有所放缓。但它仍然是 AI 新手入门 GPT 训练的最佳起点之一。
nanoGPT 不是一个"拿来就用"的生产工具,而是一个理解 GPT 训练本质的最佳教科书。无论你是 AI 研究者、工程师,还是对大模型原理好奇的开发者,nanoGPT 都值得你花时间阅读它的源码——毕竟,600 行代码就能说清楚 GPT 是怎么训练的,这本身就是一件很酷的事。