---
title: nanochatで理解するLLM製造工程 ― tokenizer訓練からチャットCLIまで、Karpathyの8,159行を読み切る
tags:  #llm #nanochat #機械学習 #生成ai #コードリーディング #python  
author: [井本 賢](https://www.docswell.com/user/kenimo49)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE1YP2NZ7G.jpg?width=480
description: 2019年に$43,000かかったGPT-2級の訓練は、いまは8×H100を2時間借りて$48前後。7年でおよそ900分の1です。その全工程を実装しているのが、Andrej Karpathyが公開したnanochat(約8,159行)です。tokenizer訓練から事前学習、SFT、評価、推論エンジン、チャットCLIまで、LLMというプロダクトの製造工程が週末に読み切れる分量に収まっています。  本スライドは、Zenn Book「nanochatで理解するLLM製造工程」の入門編です。工程の並び、--depthという1つのダイヤル、チャットモデルが生まれるSFTの損失マスク、MacBookで工程を一周する方法までを12枚で俯瞰します。  扱う論点: - $43,000 → $48、訓練費900分の1の内訳 - 8,159行に収まるLLM製造の全工程 - 複雑さのダイヤルは1つ(--depth、幅もヘッド数も自動導出) - 言葉を32,768個の部品に刻むTokenizer - チャットモデルが生まれる瞬間(SFTの損失マスク) - 合格ラインはGPT-2のCOREスコア(22タスクのアンサンブル) - MacBookでも工程を一周(tokenizer訓練は約34秒)  ▼Zenn Bookで全文(無料公開) https://zenn.dev/kenimo49/books/nanochat-code-reading  ▼Kindle版(¥250) https://www.amazon.co.jp/dp/B0HCH7VTBX  ▼著者 ken imoto / kenimoto.dev / @kenimo49
published: August 01, 26
canonical: https://www.docswell.com/s/kenimo49/Z3JLWM-nanochat-code-reading
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE1YP2NZ7G.jpg)

コードリーディング
nanochatで理解する
LLM製造工程
Karpathyの8,159行を、工程の順番に読み切る
nanochat
LLM製造工程
コードリーディング
全8章+トリビア付録
GPT-2級の訓練費(2019 → 2026) $43,000 → $48
ken imoto エンジニア / Propel-lab
nanochatで理解するLLM製造工程
kenimoto.dev
01 / 12

# Page. 2

![Page Image](https://bcdn.docswell.com/page/GEWG2R46J2.jpg)

GPT-2級の訓練費は、7年で900分の1になった。
2019年のGPT-2は$43,000。2026年は8×H100を2時間借りて$48前後。
2019
OpenAI GPT-2
$43,000
OpenAIがGPT-2の訓練にかけた費用
2026
nanochat speedrun
$48
8×H100を約2時間借りて、CORE指標でGPT-2
を上回る水準を訓練
約1/900
出典:nanochat READMEの実測値。短縮記録はコミュニティ競技として更新中
nanochatで理解するLLM製造工程
kenimoto.dev
02 / 12

# Page. 3

![Page Image](https://bcdn.docswell.com/page/47ZLDR2RJ3.jpg)

LLMの製造工程が、8,159行に全部ある。
Andrej Karpathy公開のnanochat。Python+シェルで、週末に読み切れる分量。
tokenizer訓練
語彙32,768個を
データから学習
事前学習
続きを書くGPTを
--depth 1つで育てる
SFT
会話の形を
損失マスクで教える
強化学習(任意)
検証可能な報酬で
鍛えるGRPO
評価
COREスコアで
GPT-2と比較
推論エンジン
KVキャッシュ+
ツール実行
チャットCLI
自分のモデルと
会話する
$48で手に入るのは重みファイルだけではなく、この工程の全部
nanochatで理解するLLM製造工程
kenimoto.dev
03 / 12

# Page. 4

![Page Image](https://bcdn.docswell.com/page/YJ6W1RV1JV.jpg)

重心は後半。「なぜ素のGPTは会話にならないのか」まで届く。
論文は重すぎる。理論書の多くは事前学習で終わる。本書はチャットモデルが生まれる工程に重心を置く。
第1章
全体地図 - speedrun.shを上から読む
第2章
Tokenizer - 言葉を32,768個の部品に刻む
第3章
事前学習 - ダイヤル1つでTransformerを育てる
第4章
SFT - 文章生成器がチャット相手になる瞬間
第5章
強化学習 - 算数で鍛えるGRPO
第6章
評価 - 幼稚園児の賢さをどう測るか
第7章
推論エンジン - 1トークンずつ、それでも速く
第8章
ここから先へ - MacBookで工程を所有する
nanochatで理解するLLM製造工程
kenimoto.dev
04 / 12

# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJ5M48DLJ4.jpg)

複雑さのダイヤルは1つ。
モデル規模のハイパーパラメータは--depthに集約。幅もヘッド数も自動導出。
6
MacBookデモ
CPUだけで全工程を一周
合計約40分(M3 Max実測)
複雑さのダイヤル
--depth
24
speedrun
(8×H100)
約2時間・$48で
GPT-2級モデルを訓練
自動で決まるもの:モデル幅(depth×64) / ヘッド数 / 学習トークン数 / バッチサイズ / 学習率の補正
整数を1つ変えるだけで両極をカバーする。コードの読みやすさの源泉
nanochatで理解するLLM製造工程
kenimoto.dev
05 / 12

# Page. 6

![Page Image](https://bcdn.docswell.com/page/9E29VK837R.jpg)

言葉を32,768個の部品に刻む。
特殊トークン9個を除けば、本当の学習対象は32,759個。
01
訓練データはClimbMix - ま
ず20億文字を読む
高品質なWebテキスト+コード+数学のミ
ックス。1文書は10,000文字で頭を刈
り、長大な文書への語彙の偏りを避ける
02
学習はRust製rustbpe、推論
はtiktoken
ペアの頻度を数える重いBPE訓練だけを
Rustに任せ、出来上がったマージ規則は
tiktoken.Encodingに詰め替えて使う分
業
03
圧縮率という物差しを
tok_eval.pyで測る
英語・韓国語・コード・数式などを実際
にエンコードし、バイト数÷トークン数
の圧縮率をGPT-2/GPT-4の語彙と並べて
比較
nanochatで理解するLLM製造工程
kenimoto.dev
06 / 12

# Page. 7

![Page Image](https://bcdn.docswell.com/page/D7Y43N68EM.jpg)

ダイヤル1つで、Transformerが育つ。
--depthから、スケーリング則が学習の長さとバッチサイズを決める。
01
スケーリング則で学習の長さを
自動決定
パラメータ数×12で目標トークン数を算
出。バッチサイズも学習率の補正も、--
depth1つから連鎖的に決まる
02
データローダーはBOSで揃え
てbest-fitで詰め込む
各行を必ず&lt;|bos|&gt;から始め、残り枠に
収まる最大の文書を探して詰める。パデ
ィングが発生せず学習トークンに無駄が
ない
03
fp8とFlash Attentionが速度
の土台
torchaoなら約2000行の機能を
tensorwise scaling 1種に絞って約150行
で実装。FA3が使えない環境ではSDPAに
フォールバック
nanochatで理解するLLM製造工程
kenimoto.dev
07 / 12

# Page. 8

![Page Image](https://bcdn.docswell.com/page/VENYVXZ9J8.jpg)

チャットモデルは、損失マスクで生まれる。
素のGPTは文章の続きを書くだけ。会話はSFTで教え込む。
userプロンプト
mask 0(学習しない)
assistant応答
mask 1(ここだけ学習)
ツール出力
mask 0(学習しない)
学習するのはassistantの発言だけ。BOS・特殊トークン・ツール出力は損失から外す
GSM8Kの電卓なら:呼び出す式はmask=1、返ってくる計算結果はmask=0。
ツールを呼ぶ振る舞いだけを覚えさせ、答えの数値は暗記させない設計
nanochatで理解するLLM製造工程
kenimoto.dev
08 / 12

# Page. 9

![Page Image](https://bcdn.docswell.com/page/Y79P68Z3E3.jpg)

合格ラインは、GPT-2のCOREスコア。
ARC/MMLUなど22タスクを1つの数字に潰すアンサンブル指標(DCLM論文)。
01
土台モデルは「答えさせない」
で測る
baseモデルは指示追従を知らないので生
成させない。選択肢ごとに完成文を作
り、選択肢部分の損失が最小のものを答
えとみなす
02
chatモデルは会話として測る
(ChatCORE)
GSM8Kの計算やHumanEvalのコード生
成は、自分で最後まで組み立てる勝負。
ベースライン正答率は0%に設定される
03
$43,000で訓練されたGPT-2
(1.6B)のスコアが基準線
CORE 0.2565が合格ライン。リーダーボ
ードは「これをwall clock timeでどれだ
け早く超えるか」を競っている
nanochatで理解するLLM製造工程
kenimoto.dev
09 / 12

# Page. 10

![Page Image](https://bcdn.docswell.com/page/G78DZ81L7D.jpg)

生成ループは、1つの状態機械。
KVキャッシュで逐次生成を速く。ツール実行までこの1冊で。
01
KVキャッシュ - 計算済みの
Key/Valueを使い回す
プレフィルはバッチ1で1回だけ。キャッ
シュを複数サンプル分に複製し、各行が
別々のトークンを選びながら並行デコー
ドする
02
サンプリング - temperature
とtop-k
temperature=0ならargmaxの決定的生
成。それ以外はtop-k(既定50)で絞ってサ
ンプリング。実装されているのはこの2
つだけ
03
ツール呼び出しは「強制注入の
待ち行列」
&lt;|python_start|&gt;が出たら式を貯め、電
卓で評価した結果を次のトークンとして
注入。既存ループにキュー1本足すだけ
の実装
nanochatで理解するLLM製造工程
kenimoto.dev
10 / 12

# Page. 11

![Page Image](https://bcdn.docswell.com/page/L7LMDRQQJR.jpg)

MacBookでも、工程は一周できる。
--depth=6。tokenizer訓練は約34秒(M3 Max実測)。GPUノードは要らない。
01
本書はコードリーディングの本
- 読むだけで完結できる
PythonとPyTorchのコードが読めれば十
分。モデルの訓練経験も、GPUノードを
借りる必要もない
02
動かすのは第8章のCPU版デモ
だけ
runs/runcpu.sh。tokenizer訓練 約34秒
+事前学習 約30分+SFT 約10分、合計約
40分でチャット可能なモデルまで一周
03
品質は「幼稚園児」- それで
も工程は本物
READMEいわく4e19 FLOPSのモデルとの
会話は幼稚園児並み。それでもGPUを借
りる前に、工程全体の形を体にに入れられ
る
nanochatで理解するLLM製造工程
kenimoto.dev
11 / 12

# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EMYPPKKEW.jpg)

続きは、本書で。
全8章+トリビア付録、Zenn Bookで全文無料公開中。
nanochatで理解する
LLM製造工程
Karpathyの 8,159行 を工程順に読み切る
全 8章 +トリビア付録
Zenn全文 無料 / Kindle ¥250
Zenn Book zenn.dev/kenimo49/books/nanochat-code-reading
Kindle amazon.co.jp/dp/B0HCH7VTBX (¥250)
Author ken imoto / kenimoto.dev / @kenimo49
nanochatで理解するLLM製造工程
12 / 12

