项目快照:rasbt/LLMs-from-scratch,约 102,578 个 Star,15,720 个 Fork;最新推送时间 2026-08-10T01:11:40Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/rasbt/LLMs-from-scratch · https://amzn.to/4fqvn0D

项目速览(TL;DR)
LLMs-from-scratch 是一个使用 PyTorch 从零实现类 ChatGPT 大语言模型(Large Language Model,LLM)的开源代码仓库,目标是通过逐步编写代码,覆盖文本处理、注意力机制、GPT 模型实现、预训练和微调等环节。仓库 README 将其定义为《Build a Large Language Model(From Scratch)》一书的官方代码仓库。
根据给定仓库资料,该项目有 102578 个 Star 和 15720 个 Fork,默认分支为 main,主要代码形态为 Jupyter Notebook。项目元数据中的版本为 1.0.18,要求 Python 为 >=3.10,<3.15;许可证字段显示为 NOASSERTION,因此许可证权利与商用边界不能仅凭仓库元数据确认。
定位与目标用户
该项目的定位不是提供一个已经封装好的在线聊天服务,而是把生成式预训练转换器(Generative Pre-trained Transformer,GPT)类模型拆解为可阅读、可运行和可修改的学习材料。其主要价值在于理解模型内部步骤,并在 PyTorch 中实现一个面向教育用途的、小规模但具备功能的模型。
README 明确说明,书中方法在训练和开发小型模型时,所采用的路径与构建大规模基础模型的流程相对应;同时仓库还包含加载更大预训练模型权重并进行微调的代码。这里的“对应”用于说明学习路径,不代表仓库提供 ChatGPT 级别的模型规模、效果或服务能力。
- 目标用户包括希望理解分词、词元嵌入、注意力、训练循环和微调流程的 Python、PyTorch 学习者。
- 目标用户包括需要配合《Build a Large Language Model(From Scratch)》阅读代码的读者。
- 目标用户包括希望从 Notebook 逐步迁移到独立 Python 模块和训练脚本的研究或工程人员。
- 如果需求是直接部署高并发对话接口、获得现成模型权重或使用托管推理服务,仓库资料没有把这些能力作为项目定位。
核心功能
项目的核心功能沿着“文本数据 → 注意力机制 → GPT 模型 → 预训练 → 下游微调”的链路组织。每个阶段都能在对应章节目录中找到主 Notebook、摘要脚本或补充代码,输入和输出由 Notebook 中的具体实验决定,仓库资料没有给出统一的服务端接口。
文本数据处理
第二章“Working with Text Data”提供 ch02.ipynb、dataloader.ipynb 和练习答案。根据文件命名和章节结构,这一部分用于把原始文本转换为可供模型训练的数据批次;数据加载摘要 Notebook 负责展示数据加载流程,具体数据集、批大小和输出样例应以该 Notebook 的实际内容为准。
注意力机制
第三章“Coding Attention Mechanisms”包含 ch03.ipynb 和 multihead-attention.ipynb。该章节的学习边界是注意力机制和多头注意力机制的代码实现,输入是文本处理阶段得到的表示,输出是经过注意力计算后的表示;仓库资料未给出单独的 HTTP 调用方式或模型服务接口。
GPT 模型实现
第四章“Implementing a GPT Model from Scratch”提供 ch04.ipynb 与 gpt.py。这部分把前面的文本表示和注意力模块组合为 GPT 类模型,适合用于观察模块之间的调用关系、模型参数组织方式以及前向计算过程。gpt.py 被 README 标记为摘要文件,完整补充代码仍位于 ch04 目录。
无标注数据预训练
第五章“Pretraining on Unlabeled Data”包含 ch05.ipynb、gpt_train.py 和 gpt_generate.py。训练脚本负责预训练流程,生成脚本负责使用模型生成文本;触发方式和参数需要以脚本定义为准。该章节的输入是无标注文本经过数据处理后的训练批次,输出包括训练后的模型状态以及生成阶段产生的文本。
文本分类微调
第六章“Finetuning for Text Classification”提供 ch06.ipynb、gpt_class_finetune.py 和练习答案。它把 GPT 类模型调整为文本分类任务,输入从语言建模文本转为带分类目标的数据,输出是分类结果或训练期间的损失与评估结果。资料未提供具体分类数据集名称、类别数量和评价指标数值,因此这些内容不在本文中补写。
指令微调与参数高效微调
第七章“Finetuning to Follow Instructions”包含 gpt_instruction_finetuning.py 和 ollama_evaluate.py,用于研究指令跟随微调及其评估代码。附录 E“Parameter-efficient Finetuning with LoRA”提供 appendix-E.ipynb,涉及低秩适配(Low-Rank Adaptation,LoRA)这一参数高效微调路径;README 没有给出该路径的训练规模、显存需求或最终指标。
系统架构与关键模块
从仓库目录和章节编排看,系统采用学习型分层结构,而不是以一个单一入口隐藏全部逻辑。Chapter 2 到 Chapter 7 形成从数据、模型到任务适配的主路径,Appendix A、D、E 分别补充 PyTorch、训练循环增强和 LoRA 内容。
| 层次 | 资料中的目录或文件 | 职责 | 主要输入与输出 |
|---|---|---|---|
| 环境层 | setup、pyproject.toml |
说明环境安装建议并声明 Python、PyTorch、JupyterLab 等依赖 | 运行环境配置;输出可执行的 Notebook 和脚本环境 |
| 数据层 | ch02/01_main-chapter-code |
处理文本数据并提供数据加载示例 | 文本数据;输出可供训练的批次或词元序列 |
| 表示与注意力层 | ch03/01_main-chapter-code |
实现注意力和多头注意力机制 | 词元表示;输出上下文相关表示 |
| 模型层 | ch04/01_main-chapter-code |
组合模块并实现 GPT 类模型 | 词元序列;输出模型计算结果和生成所需状态 |
| 训练与生成层 | ch05/01_main-chapter-code |
执行无标注数据预训练和文本生成 | 训练批次和模型参数;输出训练后状态及生成文本 |
| 任务适配层 | ch06、ch07、appendix-E |
支持分类微调、指令微调和 LoRA 学习材料 | 任务数据和预训练模型;输出任务适配后的模型结果 |
Appendix A 中列出了 code-part1.ipynb、code-part2.ipynb 和 DDP-script.py,其中后者表明仓库提供与分布式数据并行(Distributed Data Parallel,DDP)相关的补充代码。资料只确认该文件存在,未说明支持的设备数量、通信后端、吞吐量或容错策略,因此不能据此推导生产集群能力。
依赖与运行环境
运行环境由 pyproject.toml 声明,Python 版本范围是 >=3.10,<3.15。核心依赖包括 PyTorch、JupyterLab、tiktoken、matplotlib、tqdm、numpy、pandas、pytest;TensorFlow 依赖则按操作系统、处理器架构和 Python 版本条件区分。
PyTorch 的最低版本声明为 2.2.2,但 macOS x86_64 条件还限制 Python 不高于 3.14;TensorFlow 依赖在 macOS、Linux、Windows 以及 x86_64、arm64、aarch64 条件下使用不同包名或版本下限。依赖解析应以当前平台和当前分支中的 pyproject.toml 为准。
- 基础运行语言:Python
>=3.10,<3.15。 - 深度学习框架:PyTorch
>=2.2.2,平台条件见项目配置。 - Notebook 环境:JupyterLab
>=4.0。 - 文本处理和可视化:tiktoken、matplotlib、numpy、pandas。
- 测试和进度显示:pytest、tqdm。
- 开发依赖组还声明了 build、twine、tokenizers、safetensors;bonus 依赖组包含 Hugging Face Hub、Transformers、OpenAI 等组件。
快速开始
最小闭环是克隆仓库、按项目元数据安装依赖、启动 JupyterLab 并打开真实存在的章节 Notebook。README 明确给出了浅克隆命令;安装和启动命令依据仓库的 Python 打包配置及已声明的 JupyterLab 依赖组织,实际依赖解析结果应以本地平台为准。
安装
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
cd LLMs-from-scratch
python -m pip install -e .python -m pip install -e . 使用仓库中的 pyproject.toml 进行可编辑安装;项目声明的构建后端为 setuptools。资料没有提供锁定文件、容器镜像或统一安装脚本,因此不应把某个未声明的锁定依赖集合当作官方环境。
运行
jupyter lab ch02/01_main-chapter-code/ch02.ipynb启动后可在本地 Notebook 界面中按单元格顺序执行第二章主代码。该示例没有设置端口、账号或外部 API 参数;项目资料也没有提供固定端口和服务端部署命令。
验证
python -m pytestpytest 在项目依赖中被声明,README 同时展示了 Linux、Windows 和 macOS 的代码测试工作流。资料未给出测试数量、覆盖率或必然通过的结果,因此验证时应记录本地 Python、操作系统、依赖解析结果和测试输出,而不能预先宣称测试通过。
配置说明
仓库资料中的配置入口主要是 pyproject.toml,没有提供 .env.example、Docker Compose 文件、固定端口或模型服务环境变量。下表区分“声明值”和“默认值”:项目元数据中没有显式默认值的字段,按要求标为“未提供”。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
project.name |
字符串 | 未提供 | 声明的 Python 项目名称为 llms-from-scratch |
project.version |
字符串 | 未提供 | 当前资料中的项目版本为 1.0.18 |
project.requires-python |
版本约束字符串 | 未提供 | 限制 Python 为 >=3.10,<3.15 |
tool.ruff.line-length |
整数 | 未提供 | Ruff 行长度配置为 140 |
project.dependencies |
依赖列表 | 未提供 | 声明 PyTorch、JupyterLab、TensorFlow、tiktoken 等运行依赖 |
dependency-groups.dev |
依赖列表 | 未提供 | 声明 build、twine、tokenizers、safetensors 等开发依赖 |
dependency-groups.bonus |
依赖列表 | 未提供 | 声明可选扩展组件,包括 chainlit、transformers、scikit-learn 等 |
tool.setuptools.package-dir |
映射 | 未提供 | 将包目录映射到 pkg |
平台条件是配置的重要组成部分。例如 Linux x86_64 使用 tensorflow-cpu>=2.18.0 且条件为 Python 小于 3.13,Windows 使用 tensorflow-cpu>=2.18.0 且同样要求 Python 小于 3.13;这些条件不是可任意替换的通用默认值。
进阶用法
进阶学习应按章节顺序从主 Notebook 过渡到摘要脚本,再查看同目录的完整补充代码。这样可以把交互式实验中的中间张量、损失变化和生成结果,与可复用的 Python 文件对应起来,而不是只执行一个封装好的黑盒入口。
- 先阅读
ch02/01_main-chapter-code/ch02.ipynb和dataloader.ipynb,确认文本数据如何进入训练批次。 - 再阅读
ch03/01_main-chapter-code/multihead-attention.ipynb,对照注意力计算的中间结果。 - 使用
ch04/01_main-chapter-code/gpt.py对照 GPT 模型的独立实现。 - 在第五章阅读
gpt_train.py与gpt_generate.py,区分训练和生成两个阶段。 - 需要任务适配时,分别查看
gpt_class_finetune.py、gpt_instruction_finetuning.py和附录 E 的 LoRA Notebook。
仓库还提供附录 D 的训练循环增强示例、附录 A 的 PyTorch 入门内容和 DDP 脚本。若使用 Hugging Face Hub、Transformers、Chainlit 或 OpenAI 等 bonus 依赖,应先确认对应脚本是否需要额外凭据、模型文件或网络访问;资料没有给出这些脚本的统一参数契约。
可观测性与运维
仓库资料能够确认的可观测性主要来自 Notebook、训练脚本、生成脚本、tqdm 进度显示以及 pytest 测试工作流。它适合在本地学习和实验阶段观察训练过程、生成结果和测试输出,但资料没有给出日志格式、指标导出、健康检查、告警规则、服务端口、SLA 或生产部署方案。
- 实验记录:保存 Notebook 输出、使用的章节文件和依赖版本,便于复现同一实验步骤。
- 训练过程:使用项目已声明的 tqdm 观察进度;具体损失记录方式以训练脚本实现为准。
- 代码质量:可运行项目声明的 pytest,并结合 Ruff 配置中的静态检查规则。
- 故障定位:先区分 Python 版本、平台条件、依赖安装失败、数据文件缺失和 Notebook 单元格执行顺序问题。
- 生产运维:官方仓库未提供该信息,建议以最新 README 和对应部署代码为准。
安全与合规边界
项目本身聚焦模型实现、预训练和微调,资料没有显示其提供渗透、爬虫、账号自动化、支付或绕过检测功能。安全风险主要取决于训练数据、加载的预训练权重、输入内容以及后续部署方式,因此实验应在获得授权的本地或测试环境中进行。
- 训练数据应具备合法来源和使用权限,个人信息、机密资料和受限制数据不应直接写入公开仓库或 Notebook 输出。
- 加载外部模型权重或数据集前,应单独核对其许可证、来源、完整性和使用限制,不能把本仓库的项目元数据当作外部资源许可证。
- 如果通过 bonus 依赖连接外部模型平台或服务,API 密钥应放在本地安全配置中,不应写入 Notebook、Git 提交记录或日志。
- 部署生成或分类结果前,应建立内容审核、访问控制、数据留存和人工复核边界;仓库资料没有提供这些治理组件。
- 涉及真实用户数据时,应按适用的隐私和数据保护要求执行最小化采集、访问隔离和删除策略。
许可证与商用条款
给定仓库元数据中的许可证字段为 NOASSERTION,资料没有提供 LICENSE 文件正文,也没有确认具体许可证名称。因而不能据此断言项目允许商用、是否必须保留版权声明、是否存在源码分发义务或其他附加条款。
使用、修改、再分发或用于商业项目时,应直接核对仓库中的 LICENSE 文件及相关第三方依赖许可证;在许可证文件缺失、内容不完整或与元数据不一致时,应以仓库 LICENSE 为准,并在必要时取得权利人或法律顾问的确认。书籍、Amazon 页面、Manning 页面和外部模型权重也可能具有独立的版权或使用条件,不能与代码仓库的许可状态混为一谈。
局限性与已知限制
该项目的资料重点是分步学习和代码实现,而不是生产级模型平台。README 没有承诺固定的训练性能、生成质量、吞吐量、显存占用、并发数、模型参数规模、可用性或长期支持周期。
- 仓库主要以 Jupyter Notebook 和章节脚本组织,尚未从资料中确认存在统一的推理服务、REST API 或命令行产品入口。
- 依赖包含按操作系统、CPU 架构和 Python 版本区分的条件,跨平台安装结果不能仅凭一个平台的经验推断。
- TensorFlow 的部分依赖条件要求 Python 小于
3.13,而项目整体允许 Python 到小于3.15;这意味着具体功能的可用性要结合平台和 Python 版本核验。 - README 提供测试工作流链接,但资料未给出测试覆盖范围、数据集质量和模型输出质量的量化结论。
- 仓库名称和书籍描述中的“从零”表示实现过程透明,不等于拥有大规模预训练语料、商业模型权重或 ChatGPT 的产品能力。
根据本文作者的经验判断,如果目标是复现教学流程,Notebook 的交互性是优点;如果目标是长期运行的生产推理系统,则需要额外建设模型制品管理、资源调度、服务接口、审计和监控,本文不把这些未提供的部分归入项目能力。
适合谁
是否适合使用该项目,可以通过学习目标、技术栈和交付形态判断。以下信号与仓库章节和依赖声明直接相关。
- 团队或个人希望用 Python 和 PyTorch 逐步理解 GPT 类模型,而不是只调用一个现成推理接口。
- 已有 JupyterLab 使用经验,能够阅读 Notebook,并愿意按照 Chapter 2 到 Chapter 7 分阶段运行实验。
- 需要研究文本数据处理、注意力机制、预训练、分类微调、指令微调或 LoRA,并接受自己核对数据和训练参数。
- 项目处于本地学习、课程实验、研究原型或小规模验证阶段,能够自行管理 Python 版本和平台相关依赖。
- 团队愿意在使用代码前核对 LICENSE、书籍内容和第三方模型权重的独立权利边界。
不适合谁
如果交付要求集中在稳定服务、明确许可证或现成业务能力,当前资料不足以支持直接采用。下面的信号表示应先选择具备相应交付物的方案,或为本项目补充工程层。
- 需要仓库直接提供可签订服务等级协议(Service Level Agreement,SLA)的在线 API、固定端口和高并发推理服务。
- 团队没有 Python、PyTorch 或 Notebook 基础,却要求不阅读章节代码就得到可验证的生产模型。
- 项目要求明确的商业授权、版权保留和再分发条款,而当前资料只能确认许可证字段为
NOASSERTION。 - 环境是严格离线或受控网络,且无法预先准备可能需要的外部数据、权重或 bonus 依赖;仓库资料没有给出完整离线制品清单。
- 业务需要已验证的准确率、延迟、显存、吞吐量或并发指标,而仓库资料未提供这些 Benchmark 或性能承诺。
常见问题与排查(FAQ / Troubleshooting)
排查优先级应从环境约束、文件路径和依赖条件开始,而不是先修改模型代码。README 还提供了独立的 troubleshooting.md,遇到章节执行问题时应结合该文件和最新仓库内容核对。
Python 版本不符合怎么办
先检查本地 Python 是否满足 >=3.10,<3.15。如果使用 TensorFlow 相关依赖,还要检查平台条件是否要求 Python 小于 3.13;具体安装失败信息应与 pyproject.toml 中的条件依赖逐项比对。
为什么安装 TensorFlow 时包名不同
项目按平台和处理器架构声明了不同依赖:Linux x86_64 和 Windows 使用 tensorflow-cpu,macOS 与 Linux aarch64 使用的声明不同。不要仅凭其他操作系统的安装命令替换项目配置,先确认当前平台与 Python 版本。
Notebook 找不到或路径错误怎么办
主代码路径由 README 表格明确列出,例如 ch02/01_main-chapter-code/ch02.ipynb、ch04/01_main-chapter-code/gpt.py 和 ch05/01_main-chapter-code/gpt_train.py。应从仓库根目录启动 JupyterLab,并使用仓库中的实际相对路径;如果代码包来自 Manning 下载包,还应检查是否已同步官方仓库的最新更新。
测试命令没有给出明确结果怎么办
README 只展示 Linux、Windows 和 macOS 的测试工作流徽章,资料没有给出本文生成时的测试日志或通过数量。运行本地 python -m pytest 后,应保留完整输出,并在失败时查看 Python 版本、依赖版本、操作系统和失败文件。
是否需要 API Key
主章节资料没有声明必须配置 API Key。bonus 依赖中包含 OpenAI 等组件,但给定资料没有提供对应脚本的环境变量名、参数名或认证流程;官方仓库未提供该信息,建议以最新 README、相关脚本和服务方文档为准。
是否存在固定端口或 Docker 部署方式
给定资料没有提供固定端口、Dockerfile、Docker Compose 文件或生产部署说明。不要把 JupyterLab 的本地启动行为理解为项目已经提供了面向生产的网络服务。
目录与阅读路径
README 的目录表已经给出主要章节与文件映射,目录本身就是项目的学习路线。主代码位于各章节的 01_main-chapter-code 子目录,完整代码和补充材料则位于章节目录下。
LLMs-from-scratch/
├── setup/
├── ch02/01_main-chapter-code/
├── ch03/01_main-chapter-code/
├── ch04/01_main-chapter-code/
├── ch05/01_main-chapter-code/
├── ch06/01_main-chapter-code/
├── ch07/01_main-chapter-code/
├── appendix-A/01_main-chapter-code/
├── appendix-B/
├── appendix-C/
├── appendix-D/01_main-chapter-code/
├── appendix-E/01_main-chapter-code/
├── README.md
├── troubleshooting.md
└── pyproject.toml上面的层级仅整理资料中明确出现的目录和文件路径,没有补写未在资料中列出的文件。附录 B 是参考资料,附录 C 是练习答案,附录 A 介绍 PyTorch,附录 D 和 E 分别对应训练循环增强与 LoRA。
引用与项目边界说明
README 对项目目标的原文描述直接决定了本文的定位判断。引用保留英文原句,以避免把教学代码误述为已部署的商业模型服务。
“This repository contains the code for developing, pretraining, and finetuning a GPT-like LLM and is the official code repository for the book Build a Large Language Model (From Scratch).”
来源:README
README 还建议读者查阅 setup/README.md 了解 Python、Python 包和代码环境的安装建议,并提供 troubleshooting.md 作为故障排查入口。由于本文资料没有展开这两个文件的正文,具体系统包、加速配置和问题清单应以仓库当前内容为准。
项目地址与资源
以下链接均来自仓库资料或 README 中出现的官方项目、出版方和作者页面。阅读时应优先以 GitHub 默认分支 main 中的最新文件为准。
- LLMs-from-scratch GitHub 仓库
- Build a Large Language Model(From Scratch)官网与图书页面
- Manning 出版方图书页面
- Amazon 图书页面
- How to best read this book
- Ghostwriter Markdown 编辑器
项目资料中的 ISBN 为 9781633437166。许可证字段当前为 NOASSERTION,使用者应在下载、修改和分发前直接核对仓库 LICENSE 文件;官方仓库未提供该信息,建议以最新 README 和 LICENSE 为准。



