Skip to content

获得类GPT模型的完整流程

根据nanochat项目的实现,训练一个类GPT的聊天模型需要以下完整步骤:

完整流程概览

整个训练流程遵循以下顺序,可以通过运行单个脚本完成:speedrun.sh:1-10


详细步骤和顺序

1. 环境准备阶段

首先需要设置Python虚拟环境、安装依赖和Rust工具链:speedrun.sh:14-56

2. Tokenizer训练阶段

训练一个BPE(Byte Pair Encoding)分词器,词汇表大小为65536(2^16):speedrun.sh:58-71

分词器训练的具体实现包括:

  • 从预训练数据集中迭代读取文本
  • 使用Rust实现的BPE算法进行训练
  • 保存分词器和token字节映射 tok_train.py:1-24

3. Base模型预训练阶段

这是核心的语言模型预训练阶段,训练一个Transformer模型:speedrun.sh:73-93

预训练的关键要素包括:

  • 模型架构:深度为20层(d20),约561M参数
  • 训练数据量:遵循Chinchilla定律,tokens = 20 × params
  • 优化器:对矩阵参数使用Muon优化器,对embedding使用AdamW
  • 评估指标:CORE分数和bits per byte (bpb) base_train.py:36-69

4. Midtraining(中间训练)阶段

教会模型理解对话格式、特殊token和工具使用:speedrun.sh:95-104

Midtraining使用的数据混合包括:

  • SmolTalk:46万行通用对话
  • MMLU:10万行多选题
  • 合成身份对话数据
  • GSM8K数学问题等 mid_train.py:95-100

5. Supervised Finetuning (SFT) 阶段

对每个序列进行领域适应,使模型更好地遵循指令:speedrun.sh:106-117

SFT训练数据包括:

  • ARC科学问题(3.4K行)
  • GSM8K数学问题(8K行)
  • SmolTalk对话(1万行)
  • 合成身份对话(1K行)
  • 拼写任务(600行) chat_sft.py:82-93

6. 强化学习阶段(可选)

目前仅在GSM8K数学问题上实现:speedrun.sh:119-126


模型架构参数

模型的关键架构参数根据深度自动派生:base_train.py:89-97


训练时间和成本

  • $100版本(d20):约4小时,8xH100 GPU节点
  • $1000版本(d32):约41.6小时,8xH100 GPU节点 README.md:14-16

Notes 笔记

nanochat项目的设计理念是提供一个端到端、最小化、可黑客的完整实现,而不是一个高度可配置的框架。整个流程被精心设计为单个脚本即可运行,从零开始到获得可对话的ChatGPT克隆。

关键特点:

  • 完全自动化:整个pipeline从分词器训练到最终模型部署都是自动化的
  • 可扩展性:通过调整--depth参数可以训练不同规模的模型
  • 透明度:整个代码库仅约8000行,便于理解和修改
  • 成本可控:从$100到$1000不等的训练预算

这个流程遵循现代大语言模型训练的标准范式:预训练(学习语言)→ 中间训练(学习格式)→ 监督微调(学习指令)→ 强化学习(优化特定能力)。

Released under the MIT License.