nanoGPTSkill nanogpt

nanoGPT是一个简化的GPT实现技能,用于教育和实验目的。它通过约300行代码帮助学习和重现GPT-2模型,支持文本生成和模型训练,适合AI初学者、研究人员和快速原型开发。关键词:nanoGPT, GPT模型, 深度学习, 变压器架构, 教育实现, 文本生成, AI学习。

NLP 0 次安装 0 次浏览 更新于 3/21/2026

name: nanogpt description: 约300行代码的教育性GPT实现。在OpenWebText上重现GPT-2(124M)。简洁、可修改的代码,用于学习变压器模型。由Andrej Karpathy开发。从零开始理解GPT架构的完美工具。可在Shakespeare(CPU)或OpenWebText(多GPU)上训练。 version: 1.0.0 author: Orchestra Research license: MIT tags: [模型架构, NanoGPT, GPT-2, 教育性, Andrej Karpathy, 变压器, 简约, 从零开始, 训练] dependencies: [torch, transformers, datasets, tiktoken, wandb]

nanoGPT - 简约GPT训练

快速开始

nanoGPT是一个简化的GPT实现,专为学习和实验设计。

安装:

pip install torch numpy transformers datasets tiktoken wandb tqdm

在Shakespeare上训练(CPU友好):

# 准备数据
python data/shakespeare_char/prepare.py

# 训练(CPU上5分钟)
python train.py config/train_shakespeare_char.py

# 生成文本
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

完整训练管道:

# 步骤1:准备数据(创建train.bin, val.bin)
python data/shakespeare_char/prepare.py

# 步骤2:训练小模型
python train.py config/train_shakespeare_char.py

# 步骤3:生成文本
python sample.py --out_dir=out-shakespeare-char

配置 (config/train_shakespeare_char.py):

# 模型配置
n_layer = 6          # 6个变压器层
n_head = 6           # 6个注意力头
n_embd = 384         # 384维嵌入
block_size = 256     # 256字符上下文

# 训练配置
batch_size = 64
learning_rate = 1e-3
max_iters = 5000
eval_interval = 500

# 硬件
device = 'cpu'  # 或 'cuda'
compile = False # 对于PyTorch 2.0设置为True

训练时间: ~5分钟(CPU),~1分钟(GPU)

工作流程2:重现GPT-2(124M)

在OpenWebText上多GPU训练:

# 步骤1:准备OpenWebText(约需1小时)
python data/openwebtext/prepare.py

# 步骤2:使用DDP训练GPT-2 124M(8 GPUs)
torchrun --standalone --nproc_per_node=8 \
  train.py config/train_gpt2.py

# 步骤3:从训练模型采样
python sample.py --out_dir=out

配置 (config/train_gpt2.py):

# GPT-2(124M)架构
n_layer = 12
n_head = 12
n_embd = 768
block_size = 1024
dropout = 0.0

# 训练
batch_size = 12
gradient_accumulation_steps = 5 * 8  # 总批次约0.5M令牌
learning_rate = 6e-4
max_iters = 600000
lr_decay_iters = 600000

# 系统
compile = True  # PyTorch 2.0

训练时间: ~4天(8× A100)

工作流程3:微调预训练GPT-2

从OpenAI检查点开始:

# 在train.py或配置中
init_from = 'gpt2'  # 选项: gpt2, gpt2-medium, gpt2-large, gpt2-xl

# 模型自动加载OpenAI权重
python train.py config/finetune_shakespeare.py

示例配置 (config/finetune_shakespeare.py):

# 从GPT-2开始
init_from = 'gpt2'

# 数据集
dataset = 'shakespeare_char'
batch_size = 1
block_size = 1024

# 微调
learning_rate = 3e-5  # 微调时降低学习率
max_iters = 2000
warmup_iters = 100

# 正则化
weight_decay = 1e-1

工作流程4:自定义数据集

在你自己的文本上训练:

# data/custom/prepare.py
import numpy as np

# 加载你的数据
with open('my_data.txt', 'r') as f:
    text = f.read()

# 创建字符映射
chars = sorted(list(set(text)))
stoi = {ch: i for i, ch in enumerate(chars)}
itos = {i: ch for i, ch in enumerate(chars)}

# 令牌化
data = np.array([stoi[ch] for ch in text], dtype=np.uint16)

# 分割训练/验证集
n = len(data)
train_data = data[:int(n*0.9)]
val_data = data[int(n*0.9):]

# 保存
train_data.tofile('data/custom/train.bin')
val_data.tofile('data/custom/val.bin')

训练:

python data/custom/prepare.py
python train.py --dataset=custom

何时使用 vs 替代方案

使用nanoGPT时:

  • 学习GPT工作原理
  • 实验变压器变体
  • 教学/教育目的
  • 快速原型开发
  • 有限计算资源(可在CPU上运行)

简洁性优势:

  • 约300行: 整个模型在model.py
  • 约300行: 训练循环在train.py
  • 可修改: 易于调整
  • 无抽象: 纯PyTorch

使用替代方案代替:

  • HuggingFace Transformers: 生产使用,多种模型
  • Megatron-LM: 大规模分布式训练
  • LitGPT: 更多架构,生产就绪
  • PyTorch Lightning: 需要高级框架

常见问题

问题: CUDA内存不足

减少批次大小或上下文长度:

batch_size = 1  # 从12减少
block_size = 512  # 从1024减少
gradient_accumulation_steps = 40  # 增加以维持有效批次

问题: 训练太慢

启用编译(PyTorch 2.0+):

compile = True  # 2×加速

使用混合精度:

dtype = 'bfloat16'  # 或 'float16'

问题: 生成质量差

训练更长时间:

max_iters = 10000  # 从5000增加

降低温度:

# 在sample.py中
temperature = 0.7  # 从1.0降低
top_k = 200       # 添加top-k采样

问题: 无法加载GPT-2权重

安装transformers:

pip install transformers

检查模型名称:

init_from = 'gpt2'  # 有效: 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分钟
    • VRAM: <1GB
  • GPT-2(124M):

    • 1× A100: ~1周
    • 8× A100: ~4天
    • VRAM: ~16GB每GPU
  • GPT-2 Medium(350M):

    • 8× A100: ~2周
    • VRAM: ~40GB每GPU

性能:

  • 使用compile=True: 2×加速
  • 使用dtype=bfloat16: 50%内存减少

资源