- 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学習プロセスを実践中心で広げられる
リポジトリの目的と書籍との関係
インストールとコード利用
- リポジトリはZIPダウンロードまたは
git clone で取得できる
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
章ごとの学習フロー
- 書籍とリポジトリは、LLM実装を段階的カリキュラムに分けている
- 主な章構成:
- Ch 1: LLMの理解、コードなし
- Ch 2: テキストデータを扱う
- Ch 3: アテンション機構の実装
- Ch 4: GPTモデルをゼロから実装
- Ch 5: ラベルなしデータで事前学習
- Ch 6: テキスト分類向けファインチューニング
- Ch 7: 命令追従ファインチューニング
- 付録には、PyTorch紹介、参考文献、演習問題の解答、学習ループ改善、LoRAベースのパラメータ効率ファインチューニングが含まれる
前提知識と実行環境
- 最も重要な前提知識は Pythonプログラミング の基礎
- ディープラーニングのニューラルネットワーク経験があると、一部の概念により親しみやすい
- コードは外部LLMライブラリなしで PyTorch によりゼロから実装されている
- PyTorchに習熟している必要はない
- PyTorchの基礎知識があると役立つ
- Appendix A がPyTorchの簡単な紹介を提供する
- 主要章のコードは一般的なノートPCで妥当な時間内に実行できるよう設計されている
- 特別なハードウェアは不要で、GPUがあれば自動的に利用する
動画講義と続編書籍
演習問題とボーナス資料
- 各章には複数の 演習問題 が含まれる
- 解答は Appendix C に要約されており、対応するコードノートブックは各章フォルダにある
- ManningのWebサイトでは、無料の170ページPDF Test Yourself On Build a Large Language Model (From Scratch) を入手できる
-
主なボーナストピック
- 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件のコメント
Hacker News のコメント
現時点では ファインチューニングガイド が最もよい資料に見える
https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
LLMは重要なテーマだが、さらっと流す動画や記事が多い。土台からLLMをコーディングすると、多くの概念が明確になると思う
副次的には、必要な人が自分のLLMを作れるように支援することも目標。書籍では事前学習とファインチューニングを含むパイプライン全体をコーディングするが、金銭的にLLMを事前学習するのは現実的ではないと考えているため、事前学習済み重みのロード も示す予定
GPT-2に似たLLMを使って最初からすべて実装し、ノートPCで動く124Mモデルから小さなGPUで動く1558Mモデルまで、重みを読み込めるようにする。実際にはHF transformersやaxolotlのようなフレームワークを使うだろうが、このように自分で実装するアプローチが、プロセスをブラックボックスに見えにくくしてくれることを期待している
import torchなら、完全に ゼロから実装 というわけではなさそう :-)この分野で働く人の中に、こうしたモデルの導関数を手で計算している人はいない。微分可能プログラミングの観点で考えることは基本前提であり、この場合は十分に「ゼロから」と言える
こういうコメントを見るたびに、内部で何が起きているのか、あるいは現代の機械学習がどのように動いているのかをよく理解していないのではないかと疑ってしまう
[1] https://karpathy.ai/zero-to-hero.html
一般の開発者にとってはるかに取り組みやすく、数学の背景を前提にしていない。よい出発点なので、その後は他の似た資料もより理解しやすくなる
教育資料を作るには途方もない作業量が必要で、この本がどれほど成功しても、rasbtが投入時間に対する収入を計算すれば、時給としては割に合わないはず
このテーマを理解している人は多いが、その知識で何をしたのか? 自分だけで抱え込み、OpenAIへ行って知識を非公開に保ちながら、はるかに多くのお金を稼いだ
こうした知識が開かれた世界に住みたいなら、まともな夕食一回分くらいの価格の本について公の場で不満を言うことくらいは控えるべきだと思う
目標は、月着陸船のようなものに着陸を学ばせること。単純に100フィートの高さから始めて一方向に推力をかけ、クレーターをあまり作らなくなるまで試し続ける、といった形
その次に水平移動のような変数を追加し、水平スラスターを入れ、その後は水平スラスターを取り除いて着陸船が回転できるようにする、といった具合に拡張したい
どこから始めればよいのかまったく分からないが、この本が「主流」の機械学習のように見えるので役に立つのか気になっている
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/
AlphaGoのようなものも、結局は古典的な強化学習手法の入力として深層ニューラルネットワークを使う作業に近いと見ることができます
SuttonとBartoの『Reinforcement Learning: An Introduction』が、このテーマにおける決定的な入門書として広く見なされています
ほかの一般的な機械学習/ディープラーニングの本に、強化学習の入門章をかなり長めに書いたものはあります(https://github.com/rasbt/machine-learning-book/tree/main/ch1...)。それでもこの場合は、ほかの人たちが言っているように、専用の強化学習の本のほうが適しています
https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
[0] https://www.youtube.com/watch?v=kCc8FmEb1nY
文字単位のLLMではなく実際の単語単位のLLMを実装し、事前学習後に事前学習済み重みの読み込みを示し、そのLLMを指示ファインチューニングします
さらに、指示ファインチューニングされたLLMのアラインメント過程をコーディングし、分類タスク向けのファインチューニングも示します。本全体に図が多く、第3章だけでも図が26個あります :)
動画も素晴らしそうです。2時間の動画なので、しっかりした入門用の補助教材としてよさそうです。本を読むには、おそらくその10倍くらいの時間がかかるでしょう
私も大半をきちんと理解するために何度も見ました
当然、PyTorchにもかなり精通している必要がありますし、行列積、バックプロパゲーションなども知っている必要があります。話すスピードもとても速いです
たとえばアテンションがさまざまなモデルで使われ、Transformerも言語モデル以外のところで使われていることは知っています
この本を読めば、アテンションとTransformerを言語モデルの外でも使えるくらい十分に理解できるのか気になります
違いは、LLMではテキストをトークンに変換し、そのトークンをLLMに入るベクトル埋め込みへ変換する点です。Vision Transformerでは、画像をトークンと見る代わりに画像パッチをトークンとして使い、それをベクトル埋め込みに変換します
テキストでもビジョンでも同じアテンション機構であり、どちらの場合もベクトル埋め込みを入力として受け取ります
(*第3章は先週すでに提出しており、まもなくMEAPに掲載される予定です。それまでの間、コードはノートとともにこちらで見ることができます: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)