mcpField
N
nanogpt

nanogpt

github.com/kalarislabsその他7344 回インストール4 日前に更新
リポジトリ

nanogpt について

nanoGPT は、GPT の学習と実験に使えるコンパクトな PyTorch 実装です。モデルと学習コードを改変しやすく、文字単位の例から GPT-2 のファインチューニングやマルチ GPU 学習まで扱えます。

主な機能

  1. 01コンパクトで改変しやすい GPT 実装
  2. 02PyTorch の学習ループ
  3. 03文字単位と BPE のデータ処理
  4. 04GPT-2 チェックポイントのファインチューニング
  5. 05分散マルチ GPU 学習

活用シーン

  1. 01Transformer の基礎学習
  2. 02文字単位の Shakespeare モデルを学習
  3. 03独自テキストで GPT-2 をファインチューニング
  4. 04モデルや学習方法の変更を試作

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-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日(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%減少

リソース

エージェントの運用手順

  1. 環境を確認します。 GPU の種類、メモリ、ドライバー/CUDA のバージョン(nvidia-smi)、フレームワークのバージョン、データセットの場所とサイズを確認します。
  2. 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
  3. まず小規模なバージョンを実行します。 スモークテストとして、小さなモデルまたはサブセットを使い、少ないステップ数で実行して、損失が減少し、チェックポイントが保存されることを確認します。
  4. 上記の手順と参考情報を使って、タスク全体を実行します。
  5. 結果を検証します。 保留データで指標を追跡し、ベースラインと比較して、シード、設定、ハードウェアを記録します。
  6. 報告します。 実行内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の事項を明記します。
このような場合対応方法
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…

コメント