nanogpt について
nanoGPTは、GPTの学習と実験向けに簡潔化されたPyTorch実装です。小さく変更しやすいコードベースで、独自テキストを使ったモデルの学習やファインチューニングを行いたい学習者や研究者に適しています。
主な機能
- 01簡潔なGPTモデルと学習ループ
- 02GPTモデルの学習とファインチューニング
- 03独自テキストデータセットの準備
- 04学習済みモデルからのテキスト生成
活用シーン
- 01Transformerと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 のチェックポイントから開始:
# 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
temperature を下げます:
# 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
発展的なトピック
モデルアーキテクチャ: GPT ブロックの構造、マルチヘッドアテンション、MLP 層について平易に解説した references/architecture.md を参照してください。
学習ループ: 学習率スケジュール、勾配累積、分散データ並列の設定について解説した references/training.md を参照してください。
データの準備: トークン化の方式(文字レベル対 BPE)とバイナリ形式の詳細について解説した references/data.md を参照してください。
ハードウェア要件
-
Shakespeare(文字レベル):
- CPU: 5 分
- GPU(T4): 1 分
- VRAM: 1GB 未満
-
GPT-2(124M):
- 1× A100: 約 1 週間
- 8× A100: 約 4 日
- VRAM: GPU あたり約 16GB
-
GPT-2 Medium(350M):
- 8× A100: 約 2 週間
- VRAM: 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 を理解するのに最適