获得类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不等的训练预算
这个流程遵循现代大语言模型训练的标准范式:预训练(学习语言)→ 中间训练(学习格式)→ 监督微调(学习指令)→ 强化学习(优化特定能力)。