详细讲解如何从头实现ChatGPT式语言模型的架构和训练流程,适合想深入理解LLM原理的开发者。
这个仓库包含了开发、预训练和微调类似 GPT 的大语言模型(LLM)的代码,是《从零开始构建大语言模型》(Build a Large Language Model (From Scratch))这本书的官方代码仓库。
在《从零开始构建大语言模型》中,你将通过从零开始编码大语言模型,逐步学习和理解它们的工作原理。在这本书中,我将引导你创建自己的 LLM,用清晰的文字、图表和例子解释每个阶段。
本书中描述的训练和开发小型但功能完整的教育用模型的方法,镜像了创建 ChatGPT 等大规模基础模型的方式。此外,本书还包含加载更大预训练模型权重以进行微调的代码。
官方源代码仓库链接
Manning(出版商网站)上的书籍链接
Amazon.com 上的书籍页面
要下载这个仓库的副本,请点击"Download ZIP"按钮或在终端中执行以下命令:
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
(如果你从 Manning 网站下载了代码包,请考虑访问 GitHub 上的官方代码仓库 https://github.com/rasbt/LLMs-from-scratch 以获取最新更新。)
请注意,这个 README.md 文件是 Markdown (.md) 格式的文件。如果你从 Manning 网站下载了代码包并在本地计算机上查看,我建议使用 Markdown 编辑器或预览器来正确查看。如果你还没有安装 Markdown 编辑器,Ghostwriter 是一个不错的免费选项。
你也可以在 GitHub 上的 https://github.com/rasbt/LLMs-from-scratch 中用浏览器查看这些文件和其他文件,浏览器会自动渲染 Markdown。
提示:如果你正在寻求有关安装 Python 和 Python 包以及设置代码环境的指导,我建议阅读位于 setup 目录中的 README.md 文件。
下面的思维模型总结了本书涵盖的内容。
最重要的前提条件是具有强大的 Python 编程基础。有了这些知识,你将为探索 LLM 的迷人世界做好充分准备,并理解本书中呈现的概念和代码示例。
如果你有一些深度神经网络的经验,你可能会发现某些概念比较熟悉,因为 LLM 是建立在这些架构之上的。
本书使用 PyTorch 从零开始实现代码,没有使用任何外部 LLM 库。虽然熟悉 PyTorch 不是前提条件,但了解 PyTorch 基础知识肯定是有帮助的。如果你是 PyTorch 的新手,附录 A 提供了 PyTorch 的简要介绍。或者,你可能会发现我的书《一小时内掌握 PyTorch:从张量到在多个 GPU 上训练神经网络》(PyTorch in One Hour: From Tensors to Training Neural Networks on Multiple GPUs)对学习 PyTorch 基础很有帮助。
本书主要章节中的代码设计用于在常规笔记本电脑上在合理的时间范围内运行,不需要专门的硬件。这种方法确保了广泛的受众可以接触到本材料。此外,如果有可用的 GPU,代码会自动利用它们。(请参阅设置文档了解更多建议。)
一个 17 小时 15 分钟的配套视频课程,其中我编码讲解书中的每一章。这个课程被组织成与书籍结构相镜像的章节和部分,因此它可以用作书籍的独立替代品或配套代码跟随资源。
《从零开始构建推理模型》(Build A Reasoning Model (From Scratch))虽然是独立的一本书,但可以被视为《从零开始构建大语言模型》的续作。
它从预训练模型开始,实现了不同的推理方法,包括推理时扩展、强化学习和蒸馏,以提高模型的推理能力。
与《从零开始构建大语言模型》类似,《从零开始构建推理模型》采用从零开始实现这些方法的实践方法。
书中的每一章都包含多个练习。解决方案总结在附录 C 中,相应的代码笔记本可在本仓库的主要章节文件夹中找到(例如 ./ch02/01_main-chapter-code/exercise-solutions.ipynb)。
除了代码练习,你可以从 Manning 网站下载一个名为《从零开始构建大语言模型 - 自我测试》(Test Yourself On Build a Large Language Model (From Scratch))的免费 170 页 PDF。它包含每章约 30 个测验问题及其解决方案,帮助你测试你的理解。
几个文件夹包含可选的材料,作为感兴趣的读者的额外福利:
Python Setup Tips(Python 设置提示)
Installing Python Packages and Libraries Used in This Book(安装本书中使用的 Python 包和库)
Docker Environment Setup Guide(Docker 环境设置指南)
Byte Pair Encoding (BPE) Tokenizer From Scratch(从零开始的字节对编码(BPE)分词器)
Comparing Various Byte Pair Encoding (BPE) Implementations(比较各种字节对编码(BPE)实现)
Understanding the Difference Between Embedding Layers and Linear Layers(理解嵌入层和线性层之间的区别)
Dataloader Intuition With Simple Numbers(使用简单数字的 Dataloader 直觉)
Comparing Efficient Multi-Head Attention Implementations(比较高效的多头注意力实现)
Understanding PyTorch Buffers(理解 PyTorch 缓冲区)
FLOPs Analysis(FLOPs 分析)
KV Cache
Attention Alternatives(注意力替代方案)
Grouped-Query Attention(分组查询注意力)
Multi-Head Latent Attention(多头潜在注意力)
Sliding Window Attention(滑动窗口注意力)
Gated DeltaNet
DeepSeek Sparse Attention (DSA)(DeepSeek 稀疏注意力)
Cross-Layer KV Sharing(跨层 KV 共享)
Mixture-of-Experts (MoE)(混合专家模型)
Alternative Weight Loading Methods(替代权重加载方法)
Pretraining GPT on the Project Gutenberg Dataset(在 Project Gutenberg 数据集上预训练 GPT)
Adding Bells and Whistles to the Training Loop(为训练循环增加额外功能)
Optimizing Hyperparameters for Pretraining(优化预训练的超参数)
Building a User Interface to Interact With the Pretrained LLM(构建用户界面与预训练的 LLM 交互)
Converting GPT to Llama(将 GPT 转换为 Llama)
Memory-efficient Model Weight Loading(内存高效的模型权重加载)
Extending the Tiktoken BPE Tokenizer with New Tokens(使用新标记扩展 Tiktoken BPE 分词器)
PyTorch Performance Tips for Faster LLM Training(PyTorch 性能提示以加快 LLM 训练)
LLM Architectures(LLM 架构)
Llama 3.2 From Scratch(从零开始的 Llama 3.2)
Qwen3 Dense and Mixture-of-Experts (MoE) From Scratch(Qwen3 密集和混合专家(MoE)从零开始)
Gemma 3 From Scratch(从零开始的 Gemma 3)
Olmo 3 From Scratch(从零开始的 Olmo 3)
Tiny Aya From Scratch(从零开始的 Tiny Aya)
Qwen3.5 From Scratch(从零开始的 Qwen3.5)
Gemma 4(Gemma 4)
E2B and E4B From Scratch(从零开始的 E2B 和 E4B)
Chapter 5 with other LLMs as Drop-In Replacement (e.g., Llama 3, Qwen 3)(第 5 章与其他 LLM 作为替换项(例如 Llama 3、Qwen 3))
Additional Experiments(额外实验)
Finetuning Different Layers and Using Larger Models(微调不同层并使用更大的模型)
Finetuning Different Models on the 50k IMDb Movie Review Dataset(在 50k IMDb 电影评论数据集上微调不同模型)
Building a User Interface to Interact With the GPT-based Spam Classifier(构建用户界面与基于 GPT 的垃圾邮件分类器交互)
Dataset Utilities for Finding Near Duplicates and Creating Passive Voice Entries(用于查找近似重复项和创建被动语态条目的数据集实用程序)
Evaluating Instruction Responses Using the OpenAI API and Ollama(使用 OpenAI API 和 Ollama 评估指令响应)
Generating a Dataset for Instruction Finetuning(为指令微调生成数据集)
Improving a Dataset for Instruction Finetuning(改进用于指令微调的数据集)
Generating a Preference Dataset With Llama 3.1 70B and Ollama(使用 Llama 3.1 70B 和 Ollama 生成偏好数据集)
Direct Preference Optimization (DPO) for LLM Alignment(用于 LLM 对齐的直接偏好优化(DPO))
Building a User Interface to Interact With the Instruction-Finetuned GPT Model(构建用户界面与指令微调的 GPT 模型交互)
更多来自《从零开始的推理》仓库的额外福利材料:
Qwen3 (From Scratch) Basics(Qwen3(从零开始)基础)
Qwen3 Source Code Walkthrough(Qwen3 源代码演练)
Optimized Qwen3(优化的 Qwen3)
Verifier-Based Evaluation (MATH-500)(基于验证器的评估(MATH-500))
Multiple-Choice Evaluation (MMLU)(多项选择评估(MMLU))
LLM Leaderboard Evaluation(LLM 排行榜评估)
LLM-as-a-Judge Evaluation(LLM-as-a-Judge 评估)
Self-Consistency
Self-Refinement(自我精化)
RLVR with GRPO From Scratch(从零开始的 RLVR with GRPO)
我欢迎各种反馈,最好通过 Manning 论坛或 GitHub Discussions 分享。同样,如果你有任何问题或只是想与他人交流想法,请不要犹豫,在论坛中发布这些问题。
请注意,由于这个仓库包含与印刷书籍对应的代码,目前我无法接受会扩展主要章节代码内容的贡献,因为这会导致与实体书的偏差。保持一致有助于确保每个人都有顺畅的体验。
如果你发现这本书或代码对你的研究有用,请考虑引用它。
Chicago 风格的引用:
Raschka, Sebastian. Build A Large Language Model (From Scratch). Manning, 2024. ISBN: 978-1633437166.
@book{build-llms-from-scratch-book,
author = {Sebastian Raschka},
title = {Build A Large Language Model (From Scratch)},
publisher = {Manning},
year = {2024},
isbn = {978-1633437166},
url = {https://www.manning.com/books/build-a-large-language-model-from-scratch},
github = {https://github.com/rasbt/LLMs-from-scratch}
}