mcpField
N
nanogpt

nanogpt

github.com/orchestra-research开发14.1k964 次安装19 周前更新
代码仓库

关于 nanogpt

nanoGPT 是精简的 PyTorch GPT 实现,面向学习和实验。它适合希望通过小型、易修改的代码库训练或微调模型的学习者与研究者,也支持自定义文本数据。

主要功能

  1. 01精简的 GPT 模型与训练循环
  2. 02训练和微调 GPT 模型
  3. 03准备自定义文本数据集
  4. 04从训练模型生成文本

适用场景

  1. 01学习 Transformer 与 GPT 基础
  2. 02实验不同模型变体
  3. 03在文本数据集上微调 GPT-2

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill nanogpt

安装后在 Claude Code 中输入/nanogpt确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
architecture.md
data.md
training.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%

资源

评论

支持 Markdown