ハクソク

世界を動かす技術を、日本語で。

ゼロから自分だけのLLMをトレーニングする

概要

  • LLMをゼロから自作するワークショップの紹介
  • nanoGPTをベースに、10Mパラメータ規模のモデルを自分で構築
  • トークナイザーから学習ループまで全て手書きで理解を深める
  • Pythonと一般的なノートPCだけで実践可能
  • 実際にShakespeare風テキスト生成モデルを完成させる体験

LLM自作ワークショップ概要

  • Andrej KarpathynanoGPTを参考にした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"
    • プロジェクトセットアップ:uv syncmkdir scratchpad && cd scratchpad
  • Google Colab利用
    • リポジトリをColabにアップロード、依存関係インストール:!pip install torch numpy tqdm tiktoken
    • data/shakespeare.txtをColabにアップロード
    • ノートブックセルでコード記述、または.pyファイルをアップロードして!python train.pyで実行

ワークショップ進行(パートごとの内容)

  • 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や機械学習に興味があるエンジニア・学生に最適な実践型教材。

Hackerたちの意見

これはLLMのトレーニング入門として素晴らしいですね!ローカルで試すのも簡単そう。いい仕事してるね!
もしこのリソースに興味があるなら、スタンフォードのCS336クラスをチェックすることを強くおすすめするよ。もっと深くカリキュラムを学べるし、理論的な側面(スケーリング法則や直感)やシステム思考(カーネル最適化/プロファイリング)も紹介してくれる。もちろん、課題はやらなきゃだけど… https://cs336.stanford.edu/
講義はどうやって手に入れるの?講義のオプションが見当たらないんだけど。
自分のLMをゼロからトレーニングするのか?「大きい」モデルを作るのに十分なマシンがあるとは思えないけど。
おいおい!俺は半テラバイトのRAMを持ってるんだぜ!DDR4だけど…それでもRAMだし!48コアのプロセッサーと組み合わせてるし!AVX512はサポートしてないけど、計算はできる!LLMをトレーニングできるかも!まあ、家族がやることになるかもだけど…子供にプロジェクトを引き継いでもらう必要があるかも。でも真面目な話、君はポイントを見逃してるか、無駄に細かいことを言ってるか、もしくは…間違ってる?これは概念を学ぶことが目的で、他のことはほとんど関係ないよ。細かいことや間違ってる点についてだけど、「大きい」言語モデルの文書化されたカットオフは何なの?GPT-2は「大きい」言語モデルとして説明されてたし、1.5Bのパラメータがあったよ。今なら約400ドルでそのトレーニングができる消費者向けGPUが手に入るよ。
3090一台で1.6Bモデルを完全にトレーニングできるよ。それなりに大きなモデルだね。
いいね!これって一台のマシンで現実的にどのくらいのスケールに達するの?
モデル: 36L/36H/576D、144.2MパラメータがBlackwell 6000 Max-Qで動いてて、86GBのVRAMを使ってるらしい。トレーニングには約3時間40分かかるみたい。
生まれた日からずっとやってるよ。最初は大変だったけど、少しずつ進んでる。
実際には、物理モデルを主にトレーニングしてて、その上にLLMを付けてるんだね。
これ、Andrej Karpathyのこの動画の完全コピーに見えるんだけど(https://youtu.be/kCc8FmEb1nY)、間違ってる?
ドキュメントは本当に役立つから、始めるのに十分だよ。
コンテキスト: 彼はMLXの開発者の一人で、優れたML研究者だよ。
偶然にも、Sebastian Raschkaの「Build a Large Language Model (From Scratch)」っていうリポジトリ/本/コースを始めたばかりなんだ。[0][1][2] どの学習リソースを使うか決めるのもいい問題かも。[0] https://github.com/rasbt/LLMs-from-scratch [1] https://www.manning.com/books/build-a-large-language-model-f... [2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...
昔、fast.aiが比較的新しかった頃にULMFiTでやったことがあるよ。これがBertが最先端だった頃だと思う。アーキテクチャはベースをトレーニングして、ヘッドで専門化できるようになってる。ベースにはWikipedia全体を使って、その後に集めたツイートのGBsを使った。20台のゲーム開発用コンピュータがあるラボにアクセスできたんだ。たぶんGTX 2080くらいだったと思う。トークン化したWikipediaのトレーニングサイクルは半日くらいかかったから、各コンピュータで一つずつ異なる設定を試して、次の日のスタート地点として勝った設定を使ってハイパーパラメータを調整してた。次の朝に出勤して結果をチェックするのはいつも楽しかった。エンジニアリングはひどくてアドホックだったけど、たくさん学んだよ。結果はまあまあだった(ツイートを分類した)けど、これを真剣にやるために必要なGPUパワーやエンジニアリングの課題について良い視点を得られた。出力生成の可能性を完全には理解してなかったけど、生成されたツイートを見て笑って過ごす時間は結構あったよ(試してみたくて)。