nanogpt について
nanoGPT は、GPT の学習と実験に使えるコンパクトな PyTorch 実装です。モデルと学習コードを改変しやすく、文字単位の例から GPT-2 のファインチューニングやマルチ GPU 学習まで扱えます。
主な機能
- 01コンパクトで改変しやすい GPT 実装
- 02PyTorch の学習ループ
- 03文字単位と BPE のデータ処理
- 04GPT-2 チェックポイントのファインチューニング
- 05分散マルチ GPU 学習
活用シーン
- 01Transformer の基礎学習
- 02文字単位の Shakespeare モデルを学習
- 03独自テキストで GPT-2 をファインチューニング
- 04モデルや学習方法の変更を試作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-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日(A100を8基)
ワークフロー 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を使う場面
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では、トークン化の方式(文字単位とBPE)や、バイナリ形式の詳細について解説しています。
ハードウェア要件
-
Shakespeare(文字単位):
- CPU:5分
- GPU(T4):1分
- VRAM:<1GB
-
GPT-2(124M):
- A100を1基:約1週間
- A100を8基:約4日
- VRAM:GPUあたり約16GB
-
GPT-2 Medium(350M):
- A100を8基:約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ら)
- OpenWebText:https://huggingface.co/datasets/Skylion007/openwebtext
- 学習用:Transformerをゼロから理解するのに最適
エージェントの運用手順
- 環境を確認します。 GPU の種類、メモリ、ドライバー/CUDA のバージョン(
nvidia-smi)、フレームワークのバージョン、データセットの場所とサイズを確認します。 - 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
- まず小規模なバージョンを実行します。 スモークテストとして、小さなモデルまたはサブセットを使い、少ないステップ数で実行して、損失が減少し、チェックポイントが保存されることを確認します。
- 上記の手順と参考情報を使って、タスク全体を実行します。
- 結果を検証します。 保留データで指標を追跡し、ベースラインと比較して、シード、設定、ハードウェアを記録します。
- 報告します。 実行内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の事項を明記します。
| このような場合 | 対応方法 |
|---|---|
| CUDA のメモリ不足 | バッチサイズを小さくする、勾配累積/チェックポイント保存または混合精度を有効にする、あるいはモデルをシャーディングします。 |
| 損失が NaN になる、または発散する | 学習率を下げ、データに無効な値がないか確認し、勾配クリッピングを有効にします。 |
| これらの手順にある関数、フラグ、エンドポイントがインストール済みバージョンに存在しない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認して適切に対応し、ユーザーに伝えます。API を捏造してはいけません。 |
| 必須の入力、識別子、パラメーターが曖昧 | ユーザーに質問するか、実行前に前提を明示します。 |
整合性に関するルール
- 結果、パラメーター、識別子、引用、統計情報を決して捏造しません。実行または検証できない場合は、その旨を明確に伝えます。
- ログなしに学習結果を主張しません。大規模なジョブを開始する前に、計算コストを見積もります。
- ここに記載されているバージョン固有の詳細は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
- 金銭がかかる操作、共有 GPU やクラウドクォータを消費する操作、個人データや患者データに触れる操作、元に戻せない操作を行う前に、許可を求めます。
関連スキル
ray-data:ML ワークロード向けのスケーラブルなデータ処理です。optimizing-attention-flash:PyTorch ネイティブの scaled_dot_product_attention(PyTorch 2.2 以降)または flash-attn ライブラリを使用して、Transformer モデルの Flash Attention を有効にします。…huggingface-accelerate:既存の PyTorch 学習スクリプトを HuggingFace Accelerate(Accelerator クラス、accelerate config、accelerate launch)でラップし、同じ c…