收尾 · 从 bit 到会写莎士比亚,再往上是什么
回望整趟旅程——六百行代码,从一段莎士比亚长出一个会写字的 GPT,没剩一处黑箱。再把这副读懂了的骨架接到真实世界:它每一个零件,到了 Llama、DeepSeek 那儿都变成了一个可拨的旋钮。
收尾 · 从 bit 到会写莎士比亚,再往上是什么
到这儿,nanoGPT 的每一行,你都读完了。花点时间回望这趟旅程,再看看它通向何方。
我们走过的路
从一段纯文本,到一个会写字的模型,我们沿着数据流走了完整一圈:
- 数据:
prepare.py把一本莎士比亚压成硬盘上一条uint16长龙,附一张「数字↔字符」的密码本。 - 模型:
model.py五个类——LayerNorm、CausalSelfAttention、MLP、Block、GPT——从零件拼到整机。最硬的注意力,我们一行没跳。 - 训练:
train.py的 while 循环,用数据加载、学习率调度、梯度累积、混合精度、梯度裁剪,把随机初始化的新生儿一步步教会。 - 采样:
generate自回归地「猜一个、接上、再猜」,temperature和top-k调节它的胆子,sample.py让它开口。 - 进阶:DDP 多卡、
torch.compile、Flash Attention、MFU,把训练铺到规模上。
六百来行,没有一处还是黑箱。 你现在能做的,不只是「看懂」——你能改它:换个数据集、调大 n_layer 训个更深的、加一行打印看看某层的激活。读源码的终点,是你能动手改源码。
你手里这副骨架,通向所有大模型
最重要的一件事:你读懂的,不只是 nanoGPT,而是整个 GPT 家族的骨架。
回想每一个你刚啃下的零件,再看看它在真实大模型里变成了什么——这也正是姊妹专栏《AI 大模型解构》逐一对比的东西:
| 你在 nanoGPT 学的 | 到了真实大模型,它变成了…… |
|---|---|
学习式位置嵌入 wpe | RoPE 旋转位置编码,还要 YaRN 撑长上下文 |
| LayerNorm + Pre-LN | RMSNorm,以及 Pre/Post/三明治之争、QK-Norm |
| 标准多头注意力 MHA | GQA、MLA——一整套省 KV 缓存的演进 |
| 稠密 MLP 前馈 | MoE:拆成几百个专家稀疏激活 |
| 单 token 预测 + AdamW | MTP 多 token 预测、FP8、Muon |
| 一句话的 GELU、bias | SwiGLU,以及 bias 该留该去的执念 |
看懂了吗? 你在 nanoGPT 里读到的每一个具体选择,到了 Llama、DeepSeek、Qwen 那儿,都变成了一个可以拨动的旋钮。真实的大模型,不是什么全新的魔法,而是这副六百行骨架 + 规模 + 在这几个旋钮上各自的下注。
这就是为什么建议两个专栏连着读:nanoGPT 让你知道「一个 GPT 的本体长什么样」,《AI 大模型解构》 让你知道「真实的巨兽在这之上改了什么、为什么」。前者给你骨架,后者给你尺子。合起来,你就有了从零读懂任何一个现代大模型的底气。
再往上,是什么
如果你还想往前走,几个自然的方向:
- 亲手训一个:跑通字符级莎士比亚,再换个你喜欢的语料,看着 loss 下探、模型学会你给的文风。
- 读真实模型的代码:拿着这副骨架,去读 Llama、Qwen 的开源实现——你会惊讶于「原来大部分我都认识」,不认识的那几处,正是《大模型解构》对比过的旋钮。
- 往更底层钻:好奇
loss.backward()一行背后 PyTorch 到底做了什么?那是另一个专栏 PyTorch 源码漫游 要带你潜下去的地方。
最后一句
大模型被说得越来越神。但你现在知道:剥掉规模和工程脚手架,它的本体小到一个下午读得完,而且每一行都讲得清道理。
从一段莎士比亚,到一个会写莎士比亚的 GPT——中间没有魔法,全是扎实、可追问、你已经亲手读过一遍的工程。
这,就是 nanoGPT 值得逐行读的全部理由。《nanoGPT 源码解读》全篇完。 感谢一路读到这里。
参考文献
- 源码:Andrej Karpathy, nanoGPT. https://github.com/karpathy/nanoGPT
- 各章文末附有该章直接引用的论文与文献。
- 通往真实大模型的对比,见姊妹专栏《AI 大模型解构》。