文章目录
- 1. 项目概述
- 1.1 什么是 nanoGPT?
- 1.2 你能学到什么?
- 2. 开发环境准备
- 2.1 硬件要求
- 2.2 软件环境
- 2.3 安装步骤
- 3. 项目架构解析
- 3.1 目录结构
- 3.2 模块依赖关系
- 3.3 数据流
- 4. 核心概念速览:GPT是什么
- 4.1 自回归语言模型
- 4.2 Token(令牌)
- 4.3 Transformer 核心机制
- 4.4 Causal(因果)注意力
- 5. 数据准备
- 5.1 数据集概述
- 5.2 准备莎士比亚字符级数据(入门首选)
- 5.3 准备莎士比亚 BPE 数据(微调用)
- 5.4 准备 OpenWebText 数据(完整训练用)
- 6. 核心功能模块实现(model.py逐层拆解)
- 6.1 GPTConfig — 模型配置
- 6.2 LayerNorm — 层归一化
- 6.3 CausalSelfAttention — 因果自注意力(最核心)
- 6.4 MLP — 前馈网络
- 6.5 Block — Transformer 块
- 6.6 GPT — 完整模型
- 6.7 文本生成(generate 方法)
- 6.8 从预训练权重加载(from_pretrained)
- 6.9 优化器配置(configure_optimizers)
- 7. 训练流程(train.py详解)
- 7.1 配置参数(全部可覆盖)
- 7.2 DDP 初始化(分布式训练)
- 7.3 高效数据加载器
- 7.4 学习率调度器
- 7.5 训练主循环
- 7.6 sample.py 详解
- 7.7 bench.py 详解
- 8. 配置管理策略
- 8.1 configurator.py 工作原理
- 8.2 配置方式
- 8.3 关键配置参数速查表
- 9. 模型采样与推理
- 9.1 快速入门:训练莎士比亚字符级模型
- 9.2 单 GPU 训练 GPT-2 124M
- 9.3 多 GPU 分布式训练
- 9.4 从检查点恢复训练
- 9.5 评估预训练模型
- 9.6 从自己训练的模型采样
- 9.7 从 OpenAI GPT-2 采样
- 9.8 从文件读取提示词
- 9.9 采样参数调优
- 10. 微调(Finetuning)
- 10.1 微调原理
- 10.2 微调莎士比亚
- 10.3 自定义数据微调
- 11. 基准测试与性能分析
- 11.1 简单基准测试
- 11.2 MFU(Model Flops Utilization)
- 11.3 PyTorch Profiler 分析
- 12. 测试策略与实现
- 12.1 数据准备验证
- 12.2 模型初始化验证
- 12.3 过拟合测试(终极验证)
- 12.4 梯度检查
- 12.5 权重加载验证
- 13. 构建与部署流程
- 13.1 模型导出
- 13.2 导出为 HuggingFace 格式
- 13.3 API 服务部署
- 13.4 性能优化清单
- 14. 常见问题与解决方案
- 14.1 环境相关
- 14.2 数据相关
- 14.3 训练相关
- 14.4 模型相关
- 15. 总结
- 附录:完整命令速查表
- 附录:关键文件行数统计
1. 项目概述
1.1 什么是 nanoGPT?
nanoGPT 是 Andrej Karpathy(特斯拉前AI总监、OpenAI创始成员)开发的最小化 GPT(Generative Pre-trained Transformer)实现。整个项目的核心代码不到 600 行(model.py约 300 行,train.py约 300 行),却能完整复现 GPT-2(1.24 亿参数)在 OpenWebText 数据集上的训练。
核心特点:
| 特性 | 说明 |
|---|---|
| 代码极简 | 两个核心文件,总共约 600 行 |
| 功能完整 | 支持从零训练、微调、采样、评估 |
| 分布式训练 | 支持多 GPU、多节点的 DDP 训练 |
| 性能优化 | Flash Attention、混合精度、torch.compile |
| 兼容 OpenAI | 可直接加载 OpenAI 发布的 GPT-2 权重 |