收尾 · 从 bit 到会写莎士比亚,再往上是什么

回望整趟旅程——六百行代码,从一段莎士比亚长出一个会写字的 GPT,没剩一处黑箱。再把这副读懂了的骨架接到真实世界:它每一个零件,到了 Llama、DeepSeek 那儿都变成了一个可拨的旋钮。

作者 David更新于 第 14 篇(共 14 篇)

收尾 · 从 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 学的到了真实大模型,它变成了……
学习式位置嵌入 wpeRoPE 旋转位置编码,还要 YaRN 撑长上下文
LayerNorm + Pre-LNRMSNorm,以及 Pre/Post/三明治之争、QK-Norm
标准多头注意力 MHAGQA、MLA——一整套省 KV 缓存的演进
稠密 MLP 前馈MoE:拆成几百个专家稀疏激活
单 token 预测 + AdamWMTP 多 token 预测、FP8、Muon
一句话的 GELU、biasSwiGLU,以及 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 大模型解构》。

本页目录