mcpField
N
nanogpt

nanogpt

github.com/orchestra-research開発14.1k964 回インストール19 週間前に更新
リポジトリ

nanogpt について

nanoGPTは、GPTの学習と実験向けに簡潔化されたPyTorch実装です。小さく変更しやすいコードベースで、独自テキストを使ったモデルの学習やファインチューニングを行いたい学習者や研究者に適しています。

主な機能

  1. 01簡潔なGPTモデルと学習ループ
  2. 02GPTモデルの学習とファインチューニング
  3. 03独自テキストデータセットの準備
  4. 04学習済みモデルからのテキスト生成

活用シーン

  1. 01Transformerと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 のチェックポイントから開始:

# 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% 削減

リソース

コメント