SuperAPI AI 工具集

nanogpt

智能体与模型

查看项目

更新于 10-30 06:46

技能介绍

nanoGPT 是一个极简的 GPT 训练实现,由 Andrej Karpathy 开发,主要用于学习和实验。整个模型定义在 model.py 中约 300 行,训练循环在 train.py 中约 300 行,代码干净、可修改,没有额外抽象,直接使用纯 PyTorch。

用途

nanoGPT 适合以下场景:学习 GPT 工作原理、实验 Transformer 变体、教学与教育目的、快速原型开发、计算资源有限(可在 CPU 上运行)。如果需要生产环境使用、多种模型支持或大规模分布式训练,建议考虑 HuggingFace Transformers、Megatron-LM、LitGPT 或 PyTorch Lightning 等替代方案。

主要能力

  • 字符级莎士比亚训练:在 CPU 上约 5 分钟完成训练,GPU(T4)约 1 分钟,显存占用小于 1GB。
  • 复现 GPT-2(124M):在 OpenWebText 数据集上进行多 GPU 训练,使用 8×A100 约 4 天,单卡 A100 约 1 周,每 GPU 显存约 16GB。
  • 微调预训练 GPT-2:可从 OpenAI 检查点(gpt2、gpt2-medium、gpt2-large、gpt2-xl)开始微调。
  • 自定义数据集训练:支持用户准备自己的文本数据,生成 train.bin 和 val.bin 后进行训练。
  • 性能优化:支持 PyTorch 2.0 的 compile=True(约 2 倍加速)和 dtype=bfloat16(约 50% 显存减少)。

使用方式

安装依赖: pip install torch numpy transformers datasets tiktoken wandb tqdm

工作流 1:字符级莎士比亚 准备数据:python data/shakespeare_char/prepare.py 训练:python train.py config/train_shakespeare_char.py 生成文本:python sample.py --out_dir=out-shakespeare-char 配置示例:n_layer=6, n_head=6, n_embd=384, block_size=256, batch_size=64, learning_rate=1e-3, max_iters=5000, eval_interval=500, device='cpu', compile=False。

工作流 2:复现 GPT-2(124M) 准备 OpenWebText(约 1 小时):python data/openwebtext/prepare.py 使用 DDP 在 8 GPU 上训练:torchrun --standalone --nproc_per_node=8 train.py config/train_gpt2.py 采样:python sample.py --out_dir=out 配置示例:n_layer=12, n_head=12, n_embd=768, block_size=1024, dropout=0.0, batch_size=12, gradient_accumulation_steps=5*8, learning_rate=6e-4, max_iters=600000, lr_decay_iters=600000, compile=True。

工作流 3:微调预训练 GPT-2 在 train.py 或配置中设置 init_from='gpt2'(可选 gpt2、gpt2-medium、gpt2-large、gpt2-xl),模型会自动加载 OpenAI 权重。 运行:python train.py config/finetune_shakespeare.py 配置示例: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,读取文本、创建字符映射、分词、划分训练/验证集并保存为 train.bin 和 val.bin。 运行:python data/custom/prepare.py 然后 python train.py --dataset=custom

适用场景

  • 学习 GPT 内部结构,如 GPT 块、多头注意力、MLP 层。
  • 实验 Transformer 变体。
  • 教学演示。
  • 快速原型验证。
  • 在有限算力(CPU)上运行小规模训练。

限制与常见问题

  • CUDA 显存不足:减小 batch_size 或 block_size,增加 gradient_accumulation_steps 以维持有效批次。
  • 训练太慢:启用 compile=True(PyTorch 2.0+)或使用 dtype='bfloat16' 或 'float16'。
  • 生成质量差:增加 max_iters,降低 temperature(如 0.7),添加 top_k 采样(如 200)。
  • 无法加载 GPT-2 权重:安装 transformers,并确认 init_from 使用有效模型名。

硬件要求

  • 莎士比亚字符级: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。

资源

GitHub:https://github.com/karpathy/nanoGPT (48,000+ 星) 视频:Andrej Karpathy 的 "Let's build GPT" 论文:"Attention is All You Need"(Vaswani 等) OpenWebText:https://huggingface.co/datasets/Skylion007/openwebtext

更多高级主题可参考 references/architecture.md(GPT 块结构、多头注意力、MLP 层)、references/training.md(学习率调度、梯度累积、分布式数据并行)、references/data.md(字符级与 BPE 分词策略、二进制格式细节)。