8 ポイント 投稿者 GN⁺ 2024-01-28 | 1件のコメント | WhatsAppで共有
  • rasbt/LLMs-from-scratchは、GPTに類似したLLMを開発・事前学習・ファインチューニングするコードを収めたリポジトリであり、Manning書籍 Build a Large Language Model (From Scratch) の公式コードリポジトリ
  • 学習方法は、教育目的の小さいが動作するモデルをゼロから作る過程で構成されており、ChatGPTの背後にある大規模基盤モデルを作るアプローチに近い流れをたどる
  • 本文では、テキストデータ処理、アテンション機構、GPT実装、ラベルなしデータの事前学習、テキスト分類のファインチューニング、命令追従ファインチューニングまで、各章ごとのコードとノートブックを提供
  • 主要章のコードは一般的なノートPCで妥当な時間内に実行できるよう設計されており、利用可能な場合はGPUを自動活用し、外部LLMライブラリなしでPyTorchにより実装されている
  • 付録とボーナス資料では、LoRA、KV Cache、MoE、Llama/Qwen/Gemma系の実装、評価、DPO、UI例まで拡張されており、LLM学習プロセスを実践中心で広げられる

リポジトリの目的と書籍との関係

  • rasbt/LLMs-from-scratch は、GPTに類似したLLMをゼロから実装するコードリポジトリ
  • Manning書籍 Build a Large Language Model (From Scratch) の公式コードリポジトリとして提供されている
  • 書籍は、LLMが内部でどのように動作するかを段階的なコーディングで理解する構成になっている
    • 説明にはテキスト、図、例が含まれる
    • 教育目的の小さいが動作するモデルを自分で開発し学習する
  • リポジトリには、より大きな事前学習済みモデル重みを読み込んでファインチューニングするコードも含まれる
  • 書籍情報:

インストールとコード利用

  • リポジトリはZIPダウンロードまたは git clone で取得できる
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
  • ManningのWebサイトでコードバンドルを受け取った場合、最新更新はGitHubの公式リポジトリで確認するよう案内している
  • Pythonとパッケージのインストール、コード実行環境の設定は setup/README.md で扱っている
  • 問題解決ドキュメントは Troubleshooting Guide として提供される

章ごとの学習フロー

前提知識と実行環境

  • 最も重要な前提知識は Pythonプログラミング の基礎
  • ディープラーニングのニューラルネットワーク経験があると、一部の概念により親しみやすい
  • コードは外部LLMライブラリなしで PyTorch によりゼロから実装されている
    • PyTorchに習熟している必要はない
    • PyTorchの基礎知識があると役立つ
    • Appendix A がPyTorchの簡単な紹介を提供する
  • 主要章のコードは一般的なノートPCで妥当な時間内に実行できるよう設計されている
  • 特別なハードウェアは不要で、GPUがあれば自動的に利用する

動画講義と続編書籍

  • Manningには、書籍構成に沿って進む 17時間15分の付随動画講義 がある
    • 書籍の各章と各セクション構成を反映している
    • 独立した代替教材としても、コーディングを追いかける補助資料としても使える
  • 続編にあたる書籍 Build A Reasoning Model (From Scratch) も紹介されている
    • 独立した書籍だが、Build A Large Language Model (From Scratch) の続編とみなせる
    • 事前学習済みモデルから始めて、推論能力向上のためのアプローチを実装する
    • 含まれるアプローチ: inference-time scaling、強化学習、distillation
    • 関連リポジトリ: rasbt/reasoning-from-scratch

演習問題とボーナス資料

  • 各章には複数の 演習問題 が含まれる
  • 解答は Appendix C に要約されており、対応するコードノートブックは各章フォルダにある
  • ManningのWebサイトでは、無料の170ページPDF Test Yourself On Build a Large Language Model (From Scratch) を入手できる
    • 各章ごとに約30問のクイズと解答を含む
  • 主なボーナストピック

    • Setup:
    • Python設定のヒント
    • パッケージとライブラリのインストール
    • Docker環境設定
    • Ch 2:
    • BPEトークナイザーをゼロから実装
    • 複数のBPE実装の比較
    • 埋め込み層と線形層の違い
    • 簡単な数値で見る dataloader の直感
    • Ch 3:
    • 効率的な multi-head attention 実装の比較
    • PyTorch buffers の理解
    • Ch 4:
    • FLOPs解析
    • KV Cache
    • Grouped-Query Attention, Multi-Head Latent Attention, Sliding Window Attention
    • Gated DeltaNet, DeepSeek Sparse Attention, Cross-Layer KV Sharing
    • Mixture-of-Experts
    • Ch 5:
    • 代替の重み読み込み方式
    • Project Gutenberg データセットの事前学習
    • 学習ループ改善
    • ハイパーパラメータ最適化
    • 事前学習済みLLMと対話するUI
    • GPTをLlamaへ変換
    • メモリ効率の高いモデル重み読み込み
    • Tiktoken BPEトークナイザーの拡張
    • 高速なLLM学習のためのPyTorch性能チップ
    • Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5, Gemma 4 の実装
    • Ch 6:
    • 別のレイヤーやより大きなモデルをファインチューニングする追加実験
    • 50k IMDb映画レビュー・データセットの分類ファインチューニング
    • GPTベースのスパム分類器UI
    • Ch 7:
    • 近接重複検出と受動態項目生成のためのデータセットユーティリティ
    • OpenAI API と Ollama を用いた命令応答評価
    • 命令ファインチューニング用データセットの生成と改善
    • Llama 3.1 70B と Ollama による preference dataset 生成
    • DPO によるLLMアライメント実装
    • 命令ファインチューニング済みGPTモデルUI

貢献と引用

  • フィードバックや質問は Manning Forum または GitHub Discussions で受け付けている
  • 印刷書籍に対応するコードリポジトリのため、現時点では main chapter code の内容を拡張する貢献は受け付けていない
    • 紙の書籍とコードの差異を生じさせないための制限
  • 研究で書籍やコードが有用な場合は引用を推奨している
    • Chicago-style citation と BibTeX エントリが提供される

1件のコメント

 
GN⁺ 2024-01-28
Hacker News のコメント
  • 追加資料としてガイドブックを書いているが、まだ複数の段階に分けて完成させている途中
    現時点では ファインチューニングガイド が最もよい資料に見える
    https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
  • 本当に素晴らしそう。主な目的が 理解を深め、神秘化を取り払うこと なのか、それとも人々が自分のニーズに合わせた小さなモデルを自作できるようにすることなのか気になる
    • 主な動機は教育目的に近く、人々が実際に作ってみることで LLMがどのように動作するのか を理解する手助けをすること
      LLMは重要なテーマだが、さらっと流す動画や記事が多い。土台からLLMをコーディングすると、多くの概念が明確になると思う
      副次的には、必要な人が自分のLLMを作れるように支援することも目標。書籍では事前学習とファインチューニングを含むパイプライン全体をコーディングするが、金銭的にLLMを事前学習するのは現実的ではないと考えているため、事前学習済み重みのロード も示す予定
      GPT-2に似たLLMを使って最初からすべて実装し、ノートPCで動く124Mモデルから小さなGPUで動く1558Mモデルまで、重みを読み込めるようにする。実際にはHF transformersやaxolotlのようなフレームワークを使うだろうが、このように自分で実装するアプローチが、プロセスをブラックボックスに見えにくくしてくれることを期待している
  • 技術書を公開の場で書くのは想像しがたいほど不安なことだと思うので、著者に拍手を送りたい
    • ある程度はそうだが、同時にかなりモチベーションにもなる :)
    • むしろリスクは少ないかもしれない。本を実際に完成させなくても、本を書くことの利点を得られるから。理想的には1章以上をあまり書かなくてもよいかもしれない
  • 最初のコード例が import torch なら、完全に ゼロから実装 というわけではなさそう :-)
    • たしかにそうだが、そうでなければ冗長になって読みにくかったはず。それでも本では、事前にパッケージ化されたtorch版を使わずに LayerNorm、Softmax、Linear層、GeLU などを実装する方法を示している
    • 自動微分 のおかげで、Transformerのような複雑なモデルを作れる。膨大なデータと莫大な計算資源に加えて、現在のAI革命を可能にした核心的な理由と見てもよい
      この分野で働く人の中に、こうしたモデルの導関数を手で計算している人はいない。微分可能プログラミングの観点で考えることは基本前提であり、この場合は十分に「ゼロから」と言える
      こういうコメントを見るたびに、内部で何が起きているのか、あるいは現代の機械学習がどのように動いているのかをよく理解していないのではないかと疑ってしまう
    • Transformerの仕組みを学ぶうえで autogradの実装 は関係が薄く、範囲外だと思う。Transformerの勾配を手で書くなんて想像もできない
  • 無料資料だと思ってGitHubへ直行した。著者の仕事は尊重するが、ゼロから実装する流れ の無料資料でおすすめがあるか気になる
    • Andrej Karpathyの Neural Networks: Zero to Hero[1]
      [1] https://karpathy.ai/zero-to-hero.html
    • NumPyで作った GPT-2推論エンジンhttps://jaykmody.com/blog/gpt-from-scratch/ があり、その次に KVキャッシュ実装 の追加は https://www.dipkumar.dev/becoming-the-unbeatable/posts/gpt-k... を見るとよい
    • https://course.fast.ai/ をおすすめする
      一般の開発者にとってはるかに取り組みやすく、数学の背景を前提にしていない。よい出発点なので、その後は他の似た資料もより理解しやすくなる
    • AI分野で働く人が、このテーマについてより深い洞察を得るのに $50 でさえ高すぎると感じる理由は、正直理解しにくい
      教育資料を作るには途方もない作業量が必要で、この本がどれほど成功しても、rasbtが投入時間に対する収入を計算すれば、時給としては割に合わないはず
      このテーマを理解している人は多いが、その知識で何をしたのか? 自分だけで抱え込み、OpenAIへ行って知識を非公開に保ちながら、はるかに多くのお金を稼いだ
      こうした知識が開かれた世界に住みたいなら、まともな夕食一回分くらいの価格の本について公の場で不満を言うことくらいは控えるべきだと思う
    • Jupyterノートブックに説明用のノートを追加したので、リポジトリだけでも単独で読めることを期待している
  • この本の内容で 強化学習 を学べるのか気になる
    目標は、月着陸船のようなものに着陸を学ばせること。単純に100フィートの高さから始めて一方向に推力をかけ、クレーターをあまり作らなくなるまで試し続ける、といった形
    その次に水平移動のような変数を追加し、水平スラスターを入れ、その後は水平スラスターを取り除いて着陸船が回転できるようにする、といった具合に拡張したい
    どこから始めればよいのかまったく分からないが、この本が「主流」の機械学習のように見えるので役に立つのか気になっている
    • "Grokking Deep Reinforcement Learning"[0] は面白く読んだ。Transformerの内容はない
      Pythonの gymnasium[1] ライブラリに月着陸船の環境があるので参考になる。自分が学んでいたときに最も多く取り組んだ環境で、いくつかの方法で解いてみた
      少し前にPyTorchでSoft Actor Criticを実装したときの自分のノートブック2も見られる。教材として優れているわけではないが、何か得られるかもしれない
      [0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
      [1]: https://gymnasium.farama.org/environments/box2d/
  • 強化学習はLLMとはまったく別の研究分野です。機械学習の一部としてよく見かけますし、Tom Mitchellの古典的な『Machine Learning』にもQ-learningに関する優れた節がありますが、現代の機械学習の作業とは関連が薄いです
    AlphaGoのようなものも、結局は古典的な強化学習手法の入力として深層ニューラルネットワークを使う作業に近いと見ることができます
    SuttonとBartoの『Reinforcement Learning: An Introduction』が、このテーマにおける決定的な入門書として広く見なされています
  • その場合は、専用の強化学習の本をおすすめします。LLMにおける強化学習の部分はLLMに非常に特化しており、背景知識も本当に関連する部分だけを扱う予定です
    ほかの一般的な機械学習/ディープラーニングの本に、強化学習の入門章をかなり長めに書いたものはあります(https://github.com/rasbt/machine-learning-book/tree/main/ch1...)。それでもこの場合は、ほかの人たちが言っているように、専用の強化学習の本のほうが適しています
  • OpenAIのSpinning Upを試してみるとよいです: https://spinningup.openai.com/en/latest/
  • このコースのQ-learning実習がまさにそういう内容を扱っています
    https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
  • Karpathyの動画[0]と比べてどうなのか気になります。LLMに入門しようとしていて、そのレベルの理解を得るのに最適な資料が何かを調べているところです
    [0] https://www.youtube.com/watch?v=kCc8FmEb1nY
    • 動画を最後まで見たわけではありませんが、ざっと見た限りでは、本にはいくつか違いがあります
      文字単位のLLMではなく実際の単語単位のLLMを実装し、事前学習後に事前学習済み重みの読み込みを示し、そのLLMを指示ファインチューニングします
      さらに、指示ファインチューニングされたLLMのアラインメント過程をコーディングし、分類タスク向けのファインチューニングも示します。本全体に図が多く、第3章だけでも図が26個あります :)
      動画も素晴らしそうです。2時間の動画なので、しっかりした入門用の補助教材としてよさそうです。本を読むには、おそらくその10倍くらいの時間がかかるでしょう
    • すでに内容の大半を知っていなければ理解しにくいです
      私も大半をきちんと理解するために何度も見ました
      当然、PyTorchにもかなり精通している必要がありますし、行列積、バックプロパゲーションなども知っている必要があります。話すスピードもとても速いです
  • 言語モデルそのものには関心がありませんが、言語モデルに使われる手法の中に、別の場所で使いたいものがあります
    たとえばアテンションがさまざまなモデルで使われ、Transformerも言語モデル以外のところで使われていることは知っています
    この本を読めば、アテンションとTransformerを言語モデルの外でも使えるくらい十分に理解できるのか気になります
    • この本で実装するアテンション機構は、テキスト入力という点ではLLMに特化していますが、根本的にはVision Transformerで使われるものと同じアテンション機構です
      違いは、LLMではテキストをトークンに変換し、そのトークンをLLMに入るベクトル埋め込みへ変換する点です。Vision Transformerでは、画像をトークンと見る代わりに画像パッチをトークンとして使い、それをベクトル埋め込みに変換します
      テキストでもビジョンでも同じアテンション機構であり、どちらの場合もベクトル埋め込みを入力として受け取ります
      (*第3章は先週すでに提出しており、まもなくMEAPに掲載される予定です。それまでの間、コードはノートとともにこちらで見ることができます: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...
  • モデルアーキテクチャ自体は、特にtorchを使えばそれほど複雑ではありません。全体の流れもかなり直線的なので、取り組んでみる価値のある実現可能なプロジェクトに見えます