从零开始训练自己的大语言模型
分享完整的LLM训练流程和最佳实践,包括数据准备、架构选择、优化技巧等,适合想深入理解模型运作的程序员。
完整中文译文
从零开始训练你自己的 LLM
一个动手实践的工作坊,你将自己编写 GPT 训练流水线的每个部分,理解每个组件的作用和原因。
Andrej Karpathy 的 nanoGPT 是我第一次真正接触 LLM 和 Transformer。看到一个工作的语言模型可以用几百行 PyTorch 代码构建,这完全改变了我对 AI 的认识,激励我深入这个领域。
这个工作坊是我尝试给他人同样体验的方式。nanoGPT 的目标是复现 GPT-2(124M 参数)并涵盖很多内容。这个项目把它简化到本质部分,缩小到约 10M 参数的模型,可以在笔记本电脑上一小时内训练完成——设计用来在单个工作坊会话中完成。
一个在你的 MacBook 上从零开始训练的工作 GPT 模型,能够生成莎士比亚风格的文本。你将编写:
- 分词器——将文本转换为模型能处理的数字
- 模型架构——Transformer:嵌入层、注意力、前馈层
- 训练循环——前向传播、损失、反向传播、优化器、学习率调度
- 文本生成——从训练好的模型进行采样
前置条件
- 任何笔记本或台式机(Mac、Linux 或 Windows)
- 习惯阅读 Python 代码(你不需要 ML 经验)
设置
训练自动使用 Apple Silicon GPU(MPS)、NVIDIA GPU(CUDA)或 CPU。也可以在 Google Colab 上运行——上传文件并运行 !python train.py。
如果你还没有 uv,先安装它:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
然后设置项目:
uv sync
mkdir scratchpad && cd scratchpad
如果你没有本地设置,可以将仓库上传到 Colab 并安装依赖:
!pip install torch numpy tqdm tiktoken
将 data/shakespeare.txt 上传到你的 Colab 文件,然后在笔记本单元中编写你的代码,或上传 .py 文件并用 !python train.py 运行它。
工作坊流程
依次阅读文档。每个部分都将指导你编写流水线的一个部分,解释每个组件的作用和原因。到最后,你会有一个自己编写的工作 model.py、train.py 和 generate.py。
架构:GPT 一览
Input Text
│
▼
┌─────────────────┐
│ Tokenizer │ "hello" → [20, 43, 50, 50, 53] (character-level)
└────────┬────────┘
▼
┌─────────────────┐
│ Token Embed + │ token IDs → vectors (n_embd dimensions)
│ Position Embed │ + positional information
└────────┬────────┘
▼
┌─────────────────┐
│ Transformer │ × n_layer
│ Block: │
│ ┌────────────┐ │
│ │ LayerNorm │ │
│ │ Self-Attn │ │ n_head parallel attention heads
│ │ + Residual │ │
│ ├────────────┤ │
│ │ LayerNorm │ │
│ │ MLP (FFN) │ │ expand 4x, GELU, project back
│ │ + Residual │ │
│ └────────────┘ │
└────────┬────────┘
▼
┌─────────────────┐
│ LayerNorm │
│ Linear → logits│ vocab_size outputs (probability over next token)
└─────────────────┘
工作坊的模型配置
所有配置都使用字符级分词(vocab_size=65)和 block_size=256。
分词:字符级 vs BPE
这个工作坊在莎士比亚文本上使用字符级分词。BPE 分词(GPT-2 的 50k 词汇表)在小数据集上不适用——大多数 token 二元组对于模型学习模式来说太罕见了。
第 5 部分覆盖了如何为更大的数据集切换到 BPE。
相关资源
- nanoGPT——本工作坊所基于的项目。用约 300 行 PyTorch 编写的最小 GPT 训练
- build-nanogpt 视频讲座——4 小时的视频,从一个空文件开始构建 GPT-2
- Karpathy 的 microgpt——一个完整的 GPT,200 行纯 Python,无依赖
- nanochat——完整的 ChatGPT 克隆训练流水线
- Attention Is All You Need(2017)——原始 Transformer 论文
- GPT-2 论文(2019)——语言模型作为无监督学习者
- TinyStories 论文——为什么在精选数据上训练的小模型表现超群