从零打造 ChatGPT:用 PyTorch 一步步实作大型语言模型的完整指南
为什么要从零开始学 LLM?
在 2026 年这个 AI 浪潮已经进入第三波的时间点,我相信很多开发者都有过类似的感受:框架越来越多,API 越来越方便,但你越用越觉得自己在「使用」AI,而不是「理解」AI。
我最近花了一个多月的时间,跟着 rasbt/LLMs-from-scratch 这个专案,从零开始手刻了一个完整的 GPT-like 语言模型。这个专案在 GitHub 上已经获得超过 99k 颗星星,而且直到一周前还持续有更新。它的配套书籍《Build a Large Language Model (From Scratch)》由 Sebastian Raschka 撰写,他是维基百科上「Transformer」条目的贡献者之一,在深度学习领域有非常扎实的学术背景。
这篇文章不是要介绍「如何用 Hugging Face 快速训练模型」,而是要跟你分享一个我认为对每个想做 AI 的开发者都很有价值的视角:当你亲自走过从 tokenizer 到注意力机制,再到预训练和微调的完整流程,你会获得什么样的洞察。
这个专案在做什么?
简单来说,这个专案的目标是:用 PyTorch 从零开始,一步步实现一个可以生成文字的语言模型。不是用现成的库帮你包好一切,而是从底层开始,每个数学运算都是你自己写的。
整个专案分为 7 个主章节和 4 个附录,涵盖了建立一个完整 LLM 的每个阶段:
- 第 1 章:理解大型语言模型的基本概念
- 第 2 章:处理文字资料,实作 tokenizer
- 第 3 章:编写注意力机制(Attention Mechanism)
- 第 4 章:从零实现 GPT 模型架构
- 第 5 章:在未标记资料上进行预训练
- 第 6 章:针对文字分类任务进行微调
- 第 7 章:针对指令跟随任务进行微调
每个章节都配套 Jupyter Notebook 和可执行的 Python 脚本,并且还有练习解答。
为什么我认为这个专案值得关注?
1. 它解决了一个真正的痛点
在学过一大堆框架和 API 之后,很多人其实对 LLM 的「内部运作」还是模糊的。我知道 Transformer 很厉害,但注意力机制到底怎么算? Position Embedding 为什么重要? Softmax 在生成文字时到底做了什么?这些问题,用 API 永远不会逼你去搞清楚。
这个专案的做法是:不给你黑箱。每行代码都附带数学公式和文字解释,让你能够「看到」模型在做什么。
2. 硬体需求极低
这个专案最让我惊艳的地方之一是:它设计成可以在普通笔电上跑完所有章节。不需要高端 GPU,不需要云端资源。第 5 章的预训练步骤,即使没有 GPU,在 CPU 上也只需要几个小时。这意味着任何开发者都能够完整体验整个流程。
3. 代码品质极高
Sebastian Raschka 的代码有一个显著的特点:它不是为了「跑起来」而写的,而是为了「让人看懂」而写的。每一个函数都有清晰的 docstring,每一个数学运算都有对应的公式说明,每个章节之间都有明确的衔接。
4. 配套书籍与影片课程
这个专案搭配了一本正式出版的书籍(Manning 出版)和一个 17 小时的影片课程。书籍的代码和 GitHub 上的开源代码保持同步更新,所以你可以选择最适合自己的学习方式。
实际上手:如何开始使用
接下来我们来看看实际的使用方式。整个专案的结构非常清晰。
环境设置
# 克隆專案
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
cd LLMs-from-scratch
# 使用 uv 安装依赖(推荐)
uv venv
uv pip install -r requirements.txt
# 或者使用 conda
conda create -n llms python=3.11
conda activate llms
pip install -r requirements.txt
第一个可验证任务:跑完第二章的 tokenizer
完成安装后,最直接的上手方式是从第二章开始。第二章的代码在 ch02/01_main-chapter-code/ch02.ipynb,你可以在 Jupyter Notebook 里一步步执行。
这个 Notebook 会带你实现一个基本的 Byte-Pair Encoding (BPE) tokenizer,这是 GPT 系列模型使用的 tokenization 策略。你会看到:
1. 如何从文字资料中统计 token 频率
1. 如何逐步合并最频繁的 token 对
1. 如何将任意文字转换为 token ID 序列
执行完第二章后,你就能够将任意英文句子转换成模型能理解的形式。这是一个非常具体、可以验证的成果。
进阶任务:完成预训练
如果你想挑战更高难度,可以一路做到第五章。第五章的代码在 ch05/01_main-chapter-code/ch05.ipynb,它会带你训练一个完整的 GPT 模型。
训练完成后,你可以使用 gpt_generate.py 脚本来生成文字:
python gpt_generate.py --prompt "The future of AI is" --max_new_tokens 50
这会输出你的模型根据提示生成的文字。看着自己从零训练出来的模型产出第一句完整的文字,那种成就感是非常独特的。
几个关键概念的实作洞察
在实作这个专案的过程中,我认为有三个概念特别值得深入理解:
Tokenizer 不只是「切字」
很多框架会帮你自动处理 tokenizer,但当你手刻一个 BPE tokenizer 时,你会理解到 tokenization 其实是一种压缩策略。它不只是简单地把文字切开,而是在学习「哪些字元组合在语言中最常出现」,然后优先为这些组合分配独立的 token。这直接影响了模型的效率和表现。
Attention 机制的数学之美
第三章是整个专案最精彩的部分。你会亲手实现 Multi-Head Attention,这涉及到 Q(查询)、K(键)、V(值)矩阵的计算。当你亲眼看到 Softmax 将注意力权重分配给不同的位置时,你会真正理解「为什么 Transformer 能捕捉长距离依赖」。
预训练的「魔法」在哪里?
第五章的预训练过程可能是整个专案中最让人兴奋的。当你看到 Loss 曲线随着训练步骤逐渐下降,当你的模型开始能够完成句子、甚至产生有意义的段落时,你就会明白为什么大家称呼这个过程为「训练」。这不是魔法,但确实是一种非常美妙的过程。
限制与需要注意的地方
当然,这个专案也有它的限制:
- 它训练的是「迷你」模型:这个专案的目标是教育用途,所以模型的参数量远小于商业级的 LLM。它无法与 GPT-4 或 Claude 相比。
- 需要投入时间:完整走过所有章节可能需要数周到数月的时间,取决于你的背景知识。
- 代码使用学术授权:专案使用的是非商业授权,如果是商业用途需要留意。
- 主要针对英文:Tokenizer 和训练资料主要是英文,如果要处理其他语言需要额外调整。
谁适合开始这个专案?
我认为以下几类开发者会从这个专案中获得最大的收获:
- 想要深入理解 LLM 的 AI 工程师:如果你已经在用 Hugging Face 但想了解底层原理,这个专案是最好的补充。
- 有 PyTorch 基础的学生:这本书和专案搭配使用,可以建立起扎实的深度学习实作能力。
- 技术决策者:了解模型是如何工作的,能帮助你在选择模型和设计系统时做出更明智的判断。
如果你对 LLM 的内部运作感到好奇,或者你觉得自己一直在「使用」模型却从未真正「理解」过它们,那这个专案非常适合你。
结论
rasbt/LLMs-from-scratch 不仅仅是一个 GitHub 专案,它是目前市面上最完整的 LLM 实作教程。 Sebastian Raschka 用他深厚的学术功底和极高的代码品质,把一个看似复杂的主题拆解成了每个开发者都能跟进的步骤。
在 AI 工具日新月异的今天,能够从底层理解模型的运作方式,不再是一个「加分项」,而是越来越成为一个「必要项」。这个专案提供的不仅是代码,更是一种思考方式——一种让你真正理解 AI 如何工作的思考方式。
参考资料