← トップに戻る nanochatで理解するLLM製造工程 表紙

nanochatで理解するLLM製造工程

Karpathyの8,000行を1冊で読み切るコードリーディング

nanochat 解説 · LLM 作り方 · Karpathy · $48でGPT-2級を訓練する全工程を読む (Zennで全章無料)

毎日LLMを使うのに、製造工程は説明できない。nanochat 8,000行を読み切り、tokenizer訓練から推論エンジンまで自分の言葉で語れるようにします。

ローカルLLMシリーズの【製造工程・コードリーディング編】LLMの中身を読む側
Kindleで読む 無料で試し読み Zennで読む

Zenn累計32,000+ views · 4言語で30冊以上出版 · Kindle 6カ国で販売中

¥250 Kindle Unlimited 読み放題対象 公開:
ken imoto
ken imoto / Practical Claude Code・Harness Engineeringシリーズ著者。4言語で30冊以上の技術書を出版。 · Amazonの方針で購入後7日以内なら返品可

📖 無料で読める章

買う前に3章をその場で読めます。気に入ったらKindleで続きを。

01 はじめに

はじめに

2019年、OpenAIがGPT-2を訓練するのにかけた費用はおよそ$43,000でした。2026年のいま、同じGPT-2級のモデル(CORE指標でGPT-2を上回る水準)は8×H100のGPUノードを2時間ほど借りて、$48前後で訓練できます。7年でおよそ900分の1です。この数字はnanochatのREADMEに書かれている実測値で、しかも短縮記録はコミュニティの競技として今も更新され続けています。

$48で手に入るのは、モデルの重みファイルだけではありません。tokenizerの訓練から、事前学習、ファインチューニング、評価、そして自分のモデルと会話するチャットCLIまで、LLMというプロダクトが製造される全工程です。それを実装しているコードベースが、Andrej Karpathyの公開したnanochatです。実装本体(Pythonとシェルスクリプト)でおよそ8,000行。普通のエンジニアが週末に読み切れる分量に、現代のLLM開発の背骨がすべて収まっています。

この本は何をする本か

nanochatのコードを、工程の順番に上から読んでいきます。それだけです。

ただし「それだけ」に価値があると私は考えています。LLMを毎日使っているのに、その中身を工程として説明できるエンジニアは多くありません。論文は重すぎるし、理論書の多くは事前学習の仕組みで終わってしまい、「なぜ素のGPTは会話にならないのか」「チャットモデルはどこで生まれるのか」という、使う側が一番知りたい後半の工程まで届かないからです。

本書はその後半に重心を置きます。読み終えたとき、あなたはLLMを「使う側」から、製造工程を頭の中に持っている側、つまり 工程を所有する 側に渡っています。これが本書のキーワードです。とはいえ大げさな言葉で、要は「次の工程で何が起きるか、コードを見ながら自分の言葉で説明できる」という意味です。

もう1つのキーワードは複雑さのダイヤルは1つ。nanochatは、モデルの規模にまつわるハイパーパラメータ群を --depth(Transformerの層数)という1つのダイヤルに集約し、モデルの幅やヘッド数といった主要パラメータをそこから自動導出する設計になっています。GPU 8枚のspeedrunは24、MacBookのデモは6、と整数を1つ変えるだけで両極をカバーします。この割り切りがコードベース全体をどれだけ読みやすくしているか、各章で繰り返し目にすることになります。

2つのキーワードを短くまとめておきます。読み進めて迷子になったら、ここに戻ってください。

キーワード指すもの
工程を所有するLLMの製造工程(tokenizer訓練→事前学習→SFT→評価→推論)を、コードの解像度で頭の中に持つこと。本書の到達点
複雑さのダイヤルは1つモデル規模の主要パラメータを --depth 1つから自動導出するnanochatの設計。コードの読みやすさの源泉

各章の内容

  • 第1章: リポジトリの全体地図。speedrun.shを上から読み、工程の並びを掴みます
  • 第2章: Tokenizer。言葉がモデルの入力になるまで
  • 第3章: 事前学習。--depth 1つでTransformerが育つ仕組み
  • 第4章: SFT。文章生成器がチャット相手に変わる瞬間
  • 第5章: 強化学習。検証可能な報酬でモデルを鍛える(オプション工程)
  • 第6章: 評価。訓練したモデルの賢さをどう測るか
  • 第7章: 推論エンジン。KVキャッシュとツール実行の実装
  • 第8章: ここから先へ。MacBookでも全工程を一周する方法と、次の一歩

対象読者

AIツールを日常業務で使っているソフトウェアエンジニアを想定しています。PythonとPyTorchのコードが読めれば十分で、モデルを訓練した経験は必要ありません。GPUノードを借りて実際に訓練する必要もありません。本書はコードリーディングの本であり、手元で動かすのは第8章のCPU版デモだけで完結できます。

なぜ今か、そしてこの本の賞味期限

nanochatは2025年10月の公開後も活発に更新されていて、訓練速度のリーダーボードは数ヶ月単位で塗り替わっています。つまり本書が読む対象は「完成した教科書」ではなく、生きて動いている競技場です。だからこそ本書は、リポジトリの特定コミット(92d63d4)にピン留めして書かれています。本文中のコスト・時間・スコアの数字は執筆時点のREADMEとコードから引いたもので、あなたが読む頃には(良い方向に)古くなっているはずです。

数字は古びます。しかし工程の並びと設計判断、つまり「LLMはこういう順番で、こういう理由でこう作られる」という骨格は、この規模のコードで学んでおけば長く使えます。本書は唯一の正解ではなく、その骨格を掴むための補助線として読んでください。

それでは、全体地図から始めましょう。

この続きはKindleで →
02 第1章 全体地図: speedrun.shを上から読む

第1章 全体地図: speedrun.shを上から読む

はじめにで挙げた$43,000という数字の出どころから確認します。dev/LEADERBOARD.mdによれば、2019年のOpenAIはGPT-2を32基のTPU v3で168時間訓練し、当時の相場は1時間8ドル、総額はおよそ43,000ドルでした。README.mdは、同じCORE score(0.256525)に達するモデルを8XH100ノードで2時間、48ドルで訓練できると書いています。スポットインスタンスならさらに下がって15ドル程度です。数字を掲げるだけでなく、その計測条件と出典がリポジトリ内のファイルで追えるようになっている。これがnanochatを読む価値の最初の実例です。

そしてこの全工程のレシピは、runs/speedrun.shというたった79行のシェルスクリプト1本に収まっています(wc -lで実測)。このスクリプトを支えるリポジトリ全体も、Pythonとシェルスクリプトを合わせて8,159行(同じく実測)しかありません。使う側から工程を所有する側に立つ最初の一歩は、まずこの地図を頭に入れることです。

この章では中身の解説には踏み込みません。リポジトリ全体がどう部屋分けされているか、そしてspeedrun.shが上から下に向かって何を並べているかだけを一望します。

6つのディレクトリに分かれた8,159行

トップレベルには6つの作業ディレクトリがあります。行数はwc -lで数えた実測値です。

  • nanochat/(3,414行、14ファイル): GPTモデル本体(gpt.py)、トークナイザ(tokenizer.py)、最適化(optim.py)、推論エンジン(engine.py)など、パイプライン全体が共有する部品置き場です。
  • scripts/(2,592行、9ファイル): tok_train.pybase_train.pyのように、実行すると工程を1段階進めるエントリーポイントです。
  • tasks/(581行、6ファイル): gsm8k.pymmlu.pyなど、モデルの実力を測る評価用データセットの読み込み処理です。
  • runs/(384行、4ファイル): speedrun.shをはじめ、複数の工程を1本のシェルスクリプトに束ねたレシピ集です。
  • dev/(Python 128行): データ準備の参考実装(repackage_data_reference.py)に加えて、LOG.md(1,089行)やLEADERBOARD.md(202行)といった開発記録が置かれています(Markdownの行数は冒頭の8,159行には含めていません)。
  • tests/(1,060行、6ファイル): トークナイザの往復変換や推論エンジンのKVキャッシュなど、部品単位の動作確認です。

README.mdの「File structure」節には、各ファイルの役割が1行コメントで添えられています。例えばnanochat/engine.pyは「Efficient model inference with KV Cache」、tasks/gsm8k.pyは「8K Grade School Math questions」と書かれていて、ファイル名だけでは分からない粒度まで見取り図が用意されています。

speedrunを上から読む

runs/speedrun.shは上から順に読むと、そのままLLM製造の工程順になっています。

最初の30行ほどは環境構築です。

export OMP_NUM_THREADS=1
export NANOCHAT_BASE_DIR="$HOME/.cache/nanochat"
mkdir -p $NANOCHAT_BASE_DIR

command -v uv &> /dev/null || curl -LsSf https://astral.sh/uv/install.sh | sh
[ -d ".venv" ] || uv venv
uv sync --extra gpu
source .venv/bin/activate

uvで仮想環境を作り、依存関係を入れ、activateする。ここまではLLMの中身とは関係ない準備段階です。中間生成物はNANOCHAT_BASE_DIR(既定で~/.cache/nanochat)に集約される、という置き場所だけ覚えておくと、後の章でチェックポイントやトークナイザの保存先を追うときに迷いません。

続く「Tokenizer」区画では、事前学習データのダウンロードとトークナイザ訓練が並びます。

python -m nanochat.dataset -n 8
python -m nanochat.dataset -n 170 &
DATASET_DOWNLOAD_PID=$!
python -m scripts.tok_train
python -m scripts.tok_eval

コメントによれば、まず8シャード(約20億文字)だけを使ってトークナイザを訓練し、その裏で事前学習用シャードのダウンロードをバックグラウンドで走らせています。GPT-2級に必要なのは約150シャードで、170という数字は余裕を20枚上乗せした値です(これもコメントに明記されています)。データを取りに行く待ち時間と、トークナイザを訓練する時間を重ねる。工程を一直線に並べるのではなく、待ちが発生する場所を見つけて埋めているのがここでわかります。

ダウンロードの完了を待った後、本体の事前学習とSFT(教師ありファインチューニング)が続きます。

wait $DATASET_DOWNLOAD_PID
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \
    --depth=24 --target-param-data-ratio=8 --device-batch-size=16 --fp8 --run=$WANDB_RUN
torchrun --standalone --nproc_per_node=8 -m scripts.base_eval -- --device-batch-size=16

torchrun --standalone --nproc_per_node=8 -m scripts.chat_sft -- --run=$WANDB_RUN
torchrun --standalone --nproc_per_node=8 -m scripts.chat_eval -- -i sft

--depth=24が、本書を通して繰り返し出てくる「複雑さのダイヤル」です。層の数を1つ指定するだけで、幅やヘッド数、学習率、学習ステップ数まで自動で決まる設計になっています。スクリプト自身のコメントには「d24 model (slightly undertrained to beat GPT-2 => decrease data

ratio from compute optimal 10.5 (default) to 8)」とあり、compute optimalとされる比率をあえて8まで下げて、GPT-2の実力にちょうど届くよう調整していることが読み取れます(なおコメントは10.5をデフォルトと言い、現行コードのデフォルトは12です。コメントとコードの鮮度が食い違うのは生きたリポジトリの日常です)。この計算の中身は第3章で追います。

事前学習が終わるとchat_sft.pyが会話用の特殊トークンやツール利用、多肢選択の解き方を教え込み、chat_eval.pyで仕上がりを測ります。スクリプトの中にchat_rl.pyは一度も出てきません。強化学習はspeedrunの外にあるオプション工程で、その位置づけは第5章で扱います。最後に残るコメントアウトされた1行は、chat_cli.pyでCLI越しに会話できるという案内だけです。本文が実際に動くのはそこまでです。

speedrun.shの工程。環境構築、データ取得、Tokenizer訓練、事前学習、SFTの順に並び、chat_cliはコメントアウト、chat_rlは登場しない

生きた競技場: Time-to-GPT-2

README.mdは「Time-to-GPT-2 Leaderboard」という表を掲げていて、runs/speedrun.shは「常に現時点のstate of the artを反映するスクリプト」だと説明されています。つまり、いま読んだこのスクリプトの数字は、来月には書き換わっているかもしれません。

#timeCORE内容日付
0168時間0.2565オリジナルのOpenAI GPT-2チェックポイント2019
13.04時間0.2585d24ベースライン、やや過学習2026-01-29
22.91時間0.2578d26やや未学習 + fp82026-02-02
32.76時間0.2602総バッチサイズを100万トークンに拡大2026-02-05
42.02時間0.2571データセットをNVIDIA ClimbMixに変更2026-03-04
51.80時間0.2690autoresearch round 12026-03-09
61.65時間0.2626autoresearch round 22026-03-14

Time-to-GPT-2リーダーボードの推移。2019年の168時間からRun 6の1.65時間まで、fp8化・バッチ調整・データセット変更・自動探索の積み重ねで縮んでいる

168時間から1.65時間まで、記録は100倍以上縮んでいます。しかもこの短縮はどこか1箇所の魔法のパラメータではなく、fp8化、バッチサイズ調整、データセットの入れ替え、探索手法の改良と、工程のあちこちに手を入れた積み重ねです。この本がこれから1章ずつ開けていくのは、この積み重ねが実際に起きている場所そのものです。

読み終わる頃には、この79行のうちどの行がデータ待ちを隠していて、どの行が訓練時間の大半を使い、どこに手を入れれば記録が縮むのかを、行を指さしながら言えるようになっているはずです。……と言えたら格好いいのですが、まずはtokenizerの中身からです。

この続きはKindleで →

本書の概要

Andrej Karpathyが公開したnanochat(実装約8,000行)を、工程の順番に上から読み切るコードリーディング本。tokenizer訓練→事前学習→SFT→強化学習(GRPO)→評価(CORE)→推論エンジン(KVキャッシュ)の全工程を、実コードを引用しながら追う。2019年に$43,000だったGPT-2級モデルの訓練が2026年には$48まで下がった、その中身が何なのかをリポジトリ内の出典まで遡って確認する。GPUがなくてもruncpu.shでMacBook/ノートPCだけで全工程を一周する第8章まで、全8章+付録。Zennで全章無料公開。

この本でできるようになること

対象読者

この本で解決できる悩み

この本の立ち位置

なぜこの本か

他のAI本との違い

比較対象 本書の違い
ゼロから作る系の理論書 理論書は数式の導出と事前学習が中心。本書は動く実コードを工程順に読み、SFT以降の後半工程に重心を置く
nanochat公式README / Discussions 公式は動かし方の説明。本書は「なぜこう実装されているか」を章立てで解説し、日本語で読み通せる形にする
LLM入門記事 入門記事は仕組みの概観で終わりがち。本書は8,000行を実際に読み、評価指標や推論エンジンまで降りる

目次

  1. 01 はじめに 無料公開
  2. 02 第1章 全体地図: speedrun.shを上から読む 無料公開
  3. 03 第2章 Tokenizer: 言葉を32768個の部品に刻む 無料公開
  4. 04 第3章 事前学習: ダイヤル1つでTransformerを育てる 無料公開
  5. 05 第4章 SFT: 文章生成器がチャット相手になる瞬間 無料公開
  6. 06 第5章 強化学習: 算数で鍛えるGRPO 無料公開
  7. 07 第6章 評価: 幼稚園児の賢さをどう測るか 無料公開
  8. 08 第7章 推論エンジン: 1トークンずつ、それでも速く 無料公開
  9. 09 第8章 ここから先へ: MacBookで工程を所有する 無料公開
  10. 10 おわりに 無料公開
  11. 11 次に読む5冊 無料公開
  12. 12 付録: nanochatこぼれ話 無料公開
  13. 13 参考文献 無料公開
  14. 14 著者紹介 無料公開
  15. 15 奥付 無料公開

2019年、OpenAIがGPT-2を訓練するのにかけた費用はおよそ$43,000でした。2026年のいま、同じGPT-2級のモデルは8×H100を2時間借りて$48前後で訓練できます。7年で約900分の1。この数字の中身、つまりtokenizer訓練から事前学習、SFT、強化学習、評価、推論エンジンまでの全工程を実装しているのが、Andrej Karpathyの公開したnanochatです。実装本体はおよそ8,000行。週末に読み切れる分量に、現代のLLM開発の背骨が収まっています。

本書はそのnanochatを、工程の順番に上から読んでいくコードリーディング本です。重心は後半に置きました。「なぜ素のGPTは会話にならないのか」「チャットモデルはどこで生まれるのか」という、LLMを使う側が一番知りたいのに多くの教材が届かない工程を、実コードを引用しながら追います。

GPUは要りません。最終章ではruncpu.shを使い、手元のMacBookやノートPCだけでtokenizer訓練から対話までを実際に一周します。全章無料で公開しています。

「LLMを『使う側』から、工程を所有する側へ。」

シリーズ・関連書籍

関連記事で深掘りする

Kindleで購入する

Kindle Unlimited 対象

Kindleで読む (¥250)
トピック: LLMnanochatPython機械学習コードリーディング

※ 本ページにはAmazonアソシエイトリンクが含まれます。クリック先での購入により著者に紹介料が入る場合があります。