Skip to content

获得类GPT模型的完整流程

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

完整流程概览

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


详细步骤和顺序

1. 环境准备阶段

首先需要设置Python虚拟环境、安装依赖和Rust工具链:

2. Tokenizer训练阶段

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

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

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

3. Base模型预训练阶段

这是核心的语言模型预训练阶段,训练一个Transformer模型:

预训练的关键要素包括:

  • 模型架构:深度为20层(d20),约561M参数
  • 训练数据量:遵循Chinchilla定律,tokens = 20 × params
  • 优化器: nanochat 在所有训练阶段使用的双重优化器策略。系统使用两个专门针对不同参数组的优化器:AdamW 用于嵌入和输出投影层,Muon 用于所有 Transformer 块矩阵参数。
  • 评估指标:CORE分数和bits per byte (bpb)

4. Midtraining(中间训练)阶段

教会模型理解对话格式、特殊token和工具使用:

Midtraining使用的数据混合包括:

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

5. Supervised Finetuning (SFT) 阶段

对每个序列进行领域适应,使模型更好地遵循指令:

SFT训练数据包括:

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

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

目前仅在GSM8K数学问题上实现:


模型架构参数

模型的关键架构参数根据深度自动派生:


训练时间和成本

  • $100版本(d20):约4小时,8xH100 GPU节点
  • $1000版本(d32):约41.6小时,8xH100 GPU节点

Notes 笔记

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

关键特点:

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

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

Released under the MIT License.