nanoGPT:用最小代码理解 GPT 是怎么训练出来的

Star 数:48.4K+ 最简洁、高效的 GPT 训练与微调仓库,300 行代码实现中等规模 GPT nanoGPT 是 Andrej Karpathy 推出的开源项目,旨在提供最简单、最快的从零训练或微调中等规模 GPT 模型的代码库。它基于 PyTorch,重写了 minGPT 以优先性能,适合初学者快速上手 Transformer 架构,同时支持专业级实验,如复现 GPT-2 在 OpenWebText 上的结果。

在大语言模型已经成为时代主流的今天,你可能会好奇:
“GPT 模型到底是怎么从零训练出来的?”
Karpathy 的开源项目 nanoGPT,正是为了回答这个问题。

它不是另一个“玩具模型”,而是一套极简却完整的 GPT 训练模板,提供了从数据、模型结构到训练的全流程,是学习现代大模型工程的最佳入门项目之一。

nanoGPT 是什么?

nanoGPT = 最精简的 GPT 训练与微调框架
能让你在自己的数据上训练出一个微型 GPT(结构接近 GPT-2,但代码极简、可读性极强)。

Karpathy 在 README 里说得很直接:
它的目标是成为“最简单、最快速”的 GPT 训练仓库。

它适合:

  • 想理解 Transformer 训练流程的人
  • 想在本地用消费级 GPU 训练语言模型的人
  • 想搭建自己 LLM 模型或科研原型的人
  • 想学习 Karpathy 工程风格的人(结构干净、无复杂依赖)

项目核心功能

nanoGPT 并不是一个“模型 zoo”,它更像是一个教学级的工程模板。
它包含:

1. 数据处理(prepare.py)

  • 读取原始文本(如莎士比亚全集)
  • 将字符或单词转为 token
  • 划分 train / val
  • 存成二进制格式,供模型高效加载

特点:简单、透明、不隐藏任何细节。

2. 模型(model.py)

nanoGPT 复现的是一个纯粹的“Decoder-only Transformer”,包含:

  • Token embedding
  • Position embedding
  • 多头自注意力(Multi-head Self-attention)
  • MLP 前馈网络
  • LayerNorm
  • 残差连接
  • Masked Attention(实现自回归)

它的代码量非常少,但结构完整,你能亲眼看到 GPT 的关键组件如何组合。

3. 训练脚本(train.py)

支持:

  • GPU / 多卡训练
  • FlashAttention(可选)
  • PyTorch 2.x compile 加速
  • 可复现的实验配置
  • 日志记录(loss、迭代速度)

你只需:

python train.py config/train_shakespeare_char.py

就能在莎士比亚文本上训练出一个“小 GPT”,并生成“莎士比亚风格对话”。

4. 推理(sample.py)

训练完成后,你可以用:

python sample.py --out_dir=out-shakespeare-char

生成文本。
输出风格会明显带有训练集的特征(比如莎士比亚式的“thou”“thee”语气)。

nanoGPT 这么受欢迎?

因为它有三个关键优势:

1. 代码简洁透明

Karpathy 常说一句话:

“Educational but still useful.”

它不是玩具,而是一个可以实际跑通、但结构极简的现代 GPT 工程。

2. 真正能训练、有工程价值

不是纸上谈兵,你可以:

  • 训练 Shakespeare GPT
  • 训练你的作文风格 GPT
  • 微调成对话模型
  • 甚至用于产品原型

3. 是理解更大型 LLM 的跳板

看完 nanoGPT,你会更容易理解:

  • GPT-2
  • GPT-J
  • LLaMA 系列
  • Mistral 架构
  • FlashAttention 工作原理

特别适合你以后进一步阅读 Transformers from ScratchnanoLLaMA 等项目。

能用 nanoGPT 做什么?

实际应用非常多:

在你自己的文本上训练一个“小 ChatGPT”

比如:作品集文案、你喜欢的作者语气、学习笔记、公众号文体。

尝试做“小型聊天机器人原型”

在小数据集上微调,让它成为“你的风格助手”。

理解大模型训练全过程

包括:
数据 → Token → Batch → 注意力计算 → loss → 优化 → 推理

在自己的论文或项目中复用工程结构

因为它足够干净,很适合作为科研 baseline。

代码结构简述

仓库主要文件:

nanoGPT/
├── train.py            # 训练主脚本
├── sample.py           # 推理/生成
├── model.py            # GPT 模型定义
├── prepare.py          # 数据预处理
├── data/               # 示例数据
└── config/             # 各种训练配置

非常轻量,你几分钟就能读懂整体架构。

总结:一个真正值得“通读源码”的项目

nanoGPT 是那种读一遍源码,你就能搞懂:

  • GPT 的内部结构
  • 注意力是如何计算的
  • 文本数据如何进模型
  • 自回归语言模型如何训练
  • 如何用极少代码跑通现代 LLM

对你这种喜欢技术、又需要做内容创作的人来说,它非常适合做:

  • 博客内容
  • 视频解说
  • 学习教程
  • AI 基础项目模板

GitHub:https://github.com/karpathy/nanoGPT
油管:https://youtu.be/ySZQOiJWMWU