关于 nanogpt
nanoGPT 是精简的 PyTorch GPT 实现,面向学习和实验。它适合希望通过小型、易修改的代码库训练或微调模型的学习者与研究者,也支持自定义文本数据。
主要功能
- 01精简的 GPT 模型与训练循环
- 02训练和微调 GPT 模型
- 03准备自定义文本数据集
- 04从训练模型生成文本
适用场景
- 01学习 Transformer 与 GPT 基础
- 02实验不同模型变体
- 03在文本数据集上微调 GPT-2
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ orchestra-research/ ai-research-skills --skill nanogpt安装后在 Claude Code 中输入/nanogpt确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/architecture.mddata.mdtraining.md详细介绍
nanoGPT - 极简 GPT 训练
快速开始
nanoGPT 是一个为学习和实验而设计的简化 GPT 实现。
安装:
pip install torch numpy transformers datasets tiktoken wandb tqdm
在 Shakespeare 上训练(对 CPU 友好):
# Prepare data
python data/shakespeare_char/prepare.py
# Train (5 minutes on CPU)
python train.py config/train_shakespeare_char.py
# Generate text
python sample.py --out_dir=out-shakespeare-char
输出:
ROMEO:
What say'st thou? Shall I speak, and be a man?
JULIET:
I am afeard, and yet I'll speak; for thou art
One that hath been a man, and yet I know not
What thou art.
常见工作流
工作流 1:字符级 Shakespeare
完整训练流程:
# Step 1: Prepare data (creates train.bin, val.bin)
python data/shakespeare_char/prepare.py
# Step 2: Train small model
python train.py config/train_shakespeare_char.py
# Step 3: Generate text
python sample.py --out_dir=out-shakespeare-char
配置(config/train_shakespeare_char.py):
# Model config
n_layer = 6 # 6 transformer layers
n_head = 6 # 6 attention heads
n_embd = 384 # 384-dim embeddings
block_size = 256 # 256 char context
# Training config
batch_size = 64
learning_rate = 1e-3
max_iters = 5000
eval_interval = 500
# Hardware
device = 'cpu' # Or 'cuda'
compile = False # Set True for PyTorch 2.0
训练时间:约 5 分钟(CPU),约 1 分钟(GPU)
工作流 2:复现 GPT-2(124M)
在 OpenWebText 上进行多 GPU 训练:
# Step 1: Prepare OpenWebText (takes ~1 hour)
python data/openwebtext/prepare.py
# Step 2: Train GPT-2 124M with DDP (8 GPUs)
torchrun --standalone --nproc_per_node=8 \
train.py config/train_gpt2.py
# Step 3: Sample from trained model
python sample.py --out_dir=out
配置(config/train_gpt2.py):
# GPT-2 (124M) architecture
n_layer = 12
n_head = 12
n_embd = 768
block_size = 1024
dropout = 0.0
# Training
batch_size = 12
gradient_accumulation_steps = 5 * 8 # Total batch ~0.5M tokens
learning_rate = 6e-4
max_iters = 600000
lr_decay_iters = 600000
# System
compile = True # PyTorch 2.0
训练时间:约 4 天(8× A100)
工作流 3:微调预训练的 GPT-2
从 OpenAI checkpoint 开始:
# In train.py or config
init_from = 'gpt2' # Options: gpt2, gpt2-medium, gpt2-large, gpt2-xl
# Model loads OpenAI weights automatically
python train.py config/finetune_shakespeare.py
示例配置(config/finetune_shakespeare.py):
# Start from GPT-2
init_from = 'gpt2'
# Dataset
dataset = 'shakespeare_char'
batch_size = 1
block_size = 1024
# Fine-tuning
learning_rate = 3e-5 # Lower LR for fine-tuning
max_iters = 2000
warmup_iters = 100
# Regularization
weight_decay = 1e-1
工作流 4:自定义数据集
在你自己的文本上训练:
# data/custom/prepare.py
import numpy as np
# Load your data
with open('my_data.txt', 'r') as f:
text = f.read()
# Create character mappings
chars = sorted(list(set(text)))
stoi = {ch: i for i, ch in enumerate(chars)}
itos = {i: ch for i, ch in enumerate(chars)}
# Tokenize
data = np.array([stoi[ch] for ch in text], dtype=np.uint16)
# Split train/val
n = len(data)
train_data = data[:int(n*0.9)]
val_data = data[int(n*0.9):]
# Save
train_data.tofile('data/custom/train.bin')
val_data.tofile('data/custom/val.bin')
训练:
python data/custom/prepare.py
python train.py --dataset=custom
何时使用及替代方案
在以下情况使用 nanoGPT:
- 学习 GPT 的工作原理
- 试验 transformer 变体
- 教学/教育目的
- 快速原型开发
- 算力有限(可在 CPU 上运行)
简洁性的优势:
- 约 300 行:整个模型在
model.py中 - 约 300 行:训练循环在
train.py中 - 易于修改:方便魔改
- 无抽象:纯 PyTorch
在以下情况改用替代方案:
- HuggingFace Transformers:生产使用,模型众多
- Megatron-LM:大规模分布式训练
- LitGPT:更多架构,生产就绪
- PyTorch Lightning:需要高层框架
常见问题
问题:CUDA 内存不足
减小批大小或上下文长度:
batch_size = 1 # Reduce from 12
block_size = 512 # Reduce from 1024
gradient_accumulation_steps = 40 # Increase to maintain effective batch
问题:训练太慢
启用编译(PyTorch 2.0+):
compile = True # 2× speedup
使用混合精度:
dtype = 'bfloat16' # Or 'float16'
问题:生成质量差
训练更长时间:
max_iters = 10000 # Increase from 5000
降低温度:
# In sample.py
temperature = 0.7 # Lower from 1.0
top_k = 200 # Add top-k sampling
问题:无法加载 GPT-2 权重
安装 transformers:
pip install transformers
检查模型名称:
init_from = 'gpt2' # Valid: gpt2, gpt2-medium, gpt2-large, gpt2-xl
进阶主题
模型架构:参见 references/architecture.md,其中以通俗的方式解释了 GPT 块结构、多头注意力和 MLP 层。
训练循环:参见 references/training.md,了解学习率调度、梯度累积和分布式数据并行设置。
数据准备:参见 references/data.md,了解分词策略(字符级 vs BPE)和二进制格式的细节。
硬件要求
-
Shakespeare(字符级):
- CPU:5 分钟
- GPU(T4):1 分钟
- 显存:<1GB
-
GPT-2(124M):
- 1× A100:约 1 周
- 8× A100:约 4 天
- 显存:每块 GPU 约 16GB
-
GPT-2 Medium(350M):
- 8× A100:约 2 周
- 显存:每块 GPU 约 40GB
性能:
- 使用
compile=True:2× 加速 - 使用
dtype=bfloat16:内存减少 50%
资源
- GitHub:https://github.com/karpathy/nanoGPT ⭐ 48,000+
- 视频:Andrej Karpathy 的 "Let's build GPT"
- 论文:"Attention is All You Need"(Vaswani et al.)
- OpenWebText:https://huggingface.co/datasets/Skylion007/openwebtext
- 教育用途:最适合从零理解 transformer