概要
- LLM をゼロから自作する ワークショップ の紹介
- nanoGPT をベースに、10Mパラメータ規模のモデルを自分で構築
- トークナイザー から 学習ループ まで全て手書きで理解を深める
- Python と一般的なノートPCだけで実践可能
- 実際に Shakespeare風テキスト生成モデル を完成させる体験
LLM自作ワークショップ概要
- Andrej Karpathy の nanoGPT を参考にしたLLM構築体験
- GPT-2(124Mパラメータ)よりも小規模な ~10Mパラメータモデル を対象
- ブラックボックスライブラリ非使用、全ての処理を自作
- 1時間以内でノートPC上で学習可能な設計
- AutoModel.from_pretrained() のような事前学習済みモデルは使わず、全工程を自分で構築
体験できる内容
- 動作するGPTモデル をゼロから自作し、 Shakespeare風テキスト生成 を実現
- 実装する主なコンポーネント
- トークナイザー :テキスト→数値変換
- モデルアーキテクチャ :Transformer構造(埋め込み・Attention・Feed Forward層)
- 学習ループ :順伝播・損失計算・逆伝播・最適化・学習率調整
- テキスト生成 :学習済みモデルからサンプリング
参加要件
- Mac/Linux/Windows のノートPCまたはデスクトップ
- Python 3.12以上 の環境
- Pythonコードが読めること(機械学習経験は不要)
- Apple Silicon GPU(MPS)、 NVIDIA GPU(CUDA)、またはCPUで自動判別
- Google Colab でも実行可能
開始手順
- ローカル推奨
- uv インストール
- macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh - Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- macOS/Linux:
- プロジェクトセットアップ:
uv sync、mkdir scratchpad && cd scratchpad
- uv インストール
- Google Colab利用
- リポジトリをColabにアップロード、依存関係インストール:
!pip install torch numpy tqdm tiktoken data/shakespeare.txtをColabにアップロード- ノートブックセルでコード記述、または
.pyファイルをアップロードして!python train.pyで実行
- リポジトリをColabにアップロード、依存関係インストール:
ワークショップ進行(パートごとの内容)
- Part 1: トークナイザー
- 文字単位トークナイザー実装
- 文字エンコーディング、語彙サイズ、BPEが小規模データで失敗する理由
- Part 2: Transformerモデル
- GPTアーキテクチャ全体
- 埋め込み・自己注意・LayerNorm・MLPブロック
- Part 3: 学習ループ
- 学習パイプライン全体
- 損失関数、AdamW、勾配クリッピング、学習率スケジューリング
- Part 4: テキスト生成
- 推論・サンプリング処理
- 温度パラメータ、top-k、自己回帰デコーディング
- Part 5: 総合演習
- 実データでの学習・実験
- 損失曲線、スケーリング実験、次のステップ
- Part 6: コンペティション
- 最高のAI詩人モデルを競う
- データセット選定・スケールアップ・詩の提出
GPTアーキテクチャ概要
- 入力テキスト
- ▼
- トークナイザー :"hello" → [20, 43, 50, 50, 53](文字単位)
- ▼
- トークン埋め込み+位置埋め込み :トークンID→ベクトル(n_embd次元)、位置情報付与
- ▼
- Transformerブロック(n_layer回)
- LayerNorm
- Self-Attention(n_head並列)
- 残差接続
- LayerNorm
- MLP(FFN):4倍拡張→GELU→元に戻す
- 残差接続
- ▼
- 最終LayerNorm
- 線形層→ロジット :語彙サイズ分の出力(次トークンの確率)
モデル設定例(ワークショップ用)
- Tiny :0.5Mパラメータ、n_layer=2, n_head=2, n_embd=128、学習時間約5分
- Small :4Mパラメータ、n_layer=4, n_head=4, n_embd=256、学習時間約20分
- Medium(デフォルト) :10Mパラメータ、n_layer=6, n_head=6, n_embd=384、学習時間約45分
- 全構成で 文字単位トークン化(vocab_size=65)、 block_size=256 を採用
トークナイザー:文字単位とBPEの比較
- Shakespeare のような小規模データでは 文字単位トークン化 を推奨(語彙数65)
- BPE(tiktoken:語彙5万超) は大規模データ向き(例:TinyStories+ 100MB以上)
- 小データではBPEのビグラムが希少でパターン学習が困難
- Part 5 でBPEへの切り替え方法も解説
参考資料
- nanoGPT :本ワークショップのベースプロジェクト
- build-nanogpt video lecture :GPT-2構築4時間動画
- Karpathy's microgpt :依存なし200行Python実装
- nanochat :ChatGPTクローンの完全学習パイプライン
- Attention Is All You Need (2017) :Transformer論文
- GPT-2 paper (2019) :言語モデルの教師なし学習
- TinyStories paper :小型モデルの効果検証
このワークショップでは、 LLMの仕組みを本質から理解 し、 自作する達成感 を得られる構成。AIや機械学習に興味があるエンジニア・学生に最適な実践型教材。