ゼロから自分だけのLLMをトレーニングする
7時間前原文(github.com)
概要
- 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や機械学習に興味があるエンジニア・学生に最適な実践型教材。