OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  nanoGPT — 用最少代码理解 GPT 训练全过程

nanoGPT — 用最少代码理解 GPT 训练全过程

 
  cliff ·  2026-08-03 11:00:19 · 5 次点击  · 0 条评论  

构建 nanoGPT

本仓库包含了 nanoGPT 的从头复现。Git 提交历史特意保持清晰、逐步推进,方便您通过查看提交日志来了解整个构建过程。此外,还配套有 YouTube 视频讲座,在视频中我会逐一介绍每个提交并解释其中的细节。

我们从空白文件开始,逐步实现 GPT-2(124M)模型的复现。如果您有更多耐心或资源,代码同样可以复现 GPT-3 模型。尽管 GPT-2(124M)模型在过去(2019 年,约 5 年前)需要大量时间训练,如今复现它仅需约 1 小时和 10 美元的成本。若您缺乏足够的计算资源,可以使用云 GPU 服务器,这方面我推荐 Lambda

请注意,GPT-2 和 GPT-3 都是基于互联网文档训练的简单语言模型,它们的功能仅限于“生成”互联网风格的文本。因此,本仓库和视频不涉及 Chat 微调,您无法像与 ChatGPT 那样与它对话。微调过程(虽然概念上很简单——SFT 仅需更换数据集并继续训练)属于后续内容,将在未来单独讲解。目前,这个 124M 模型在经过 10B token 的训练后,对提示词“你好,我是一个语言模型,”的回应如下:

你好,我是一个语言模型,我的目标是让英语对每个人都简单有趣,并找出不同的语法规则。
你好,我是一个语言模型,所以下次我去的时候,我会说,我喜欢这个东西。
你好,我是一个语言模型,问题是,如果我想成为一名老师,我该怎么办?
你好,我是一个语言模型,我是一个英国人。在语言中,“说”就是真正的说。因为对大多数人来说,

在 40B token 训练后:

你好,我是一个语言模型,一个计算机科学的模型,它是一种(在数学中)编程计算机程序以完成写作等任务的方式。
你好,我是一个语言模型,不是人类。这意味着我相信我的语言模型,因为我还没有使用它的经验。
你好,我是一个语言模型,但我在谈论数据。你需要创建一组数据:你需要创建它。
你好,我是一个语言模型,这一切都是关于建模和学习 Python。我非常擅长语法,但在 Python 方面却有些吃力。

哈哈。总之,视频发布后,这里也将成为 FAQ、修复和勘误的地方,我相信一定会有不少内容 :)

如有讨论和问题,请使用 讨论区。如需更快速的交流,欢迎加入我的 Zero To Hero Discord,频道为 #nanoGPT

视频

让我们复现 GPT-2 (124M) YouTube 讲座

勘误

小清理:在切换到 Flash Attention 后,我们忘记了删除 register_buffer 中的 bias,已通过最近的 PR 修复。

早期版本的 PyTorch 可能难以将 uint16 转换为 long。在 load_tokens 函数中,我们添加了 npt = npt.astype(np.int32),先使用 NumPy 将 uint16 转换为 int32,再转换为 torch 张量,最后转为 long。

torch.autocast 函数接受一个参数 device_type。我最初顽固地尝试直接传入 device,希望它能正常工作,但 PyTorch 实际上只想要类型字符串,并在某些版本中会引发错误。因此,我们需要将例如 cuda:3 这样的设备名剥离为 cuda。目前,mps 设备(Apple Silicon)会变成 device_type CPU,我不完全确定这是否是 PyTorch 的预期用法。

令人困惑的是,model.require_backward_grad_sync 实际上同时被前向和反向传播使用。已将其位置提前,以确保它也应用于前向传播。

生产环境

对于更接近生产级且与 nanoGPT 类似的运行,我推荐查看以下仓库:

常见问题解答

许可证

MIT

5 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 13 ms
Developed with Cursor