第18章 microgpt の構造

18.1 この章で学ぶこと

この章で学ぶ内容は以下のとおりです。

表18-1: この章で学ぶこと

学ぶこと

ポイント

7 ブロックの俯瞰

B1(データセット)〜B7(推論)として全体を地図化

データの流れ

input.txtdocsstate_dict → 生成トークン列

制御の流れ

学習ループが B5(gpt)を繰り返し呼び、state_dict を更新する

章との対応

各ブロックが ch17〜ch22 のどの章に対応するかを確認する

第17章 microgpt の仕様 では仕様と入出力を振り返りました。 この章では 全体の骨格だけを示します。 長いコードの引用は置かず、短い説明と「どの章を読めばよいか」の対応表に留めます。

18.2 全体地図(入出力と 7 ブロック)

左に学習用の入力(文書集合と input.txt)、右に学習で更新される重みと、推論で得られる生成列を置きます。 中央には、第17章 microgpt の仕様 でも触れた B1〜B7 を配置しています。 Value(計算グラフ)と state_dict(学習対象パラメータの束)は データストアを円筒形のノードで示します。

input.txt / 文書集合生成されたトークン列 / 文字列準備(B1 / B2)B3 自動微分値 / 計算グラフ(Value)B4 重みの束 state_dict(学習で更新)B5 gpt モデルB6 学習B7 推論ループB1 データセットB2 トークナイザーモデルパラメータ初期化トークン・位置の埋め込み層ループ(n_layer)lm_head で logits学習ループK/V キャッシュと初期トークン位置ループヘッドループ(n_head)ヘッド結合と attn_wo・残差MLP(rmsnorm → fc1 → ReLU → fc2・残差)文書取得・トークン化順伝播 gpt・損失逆伝播 Value.backwardAdam で state_dict 更新順伝播・logitstemperature 付き softmax・サンプル終了判定(BOS 等)Q/K/V のヘッドごとの切り出しスケール付き内積 → softmax(注意重み)V の重み付き和 docs uchars初期化参照利用利用呼出logits更新呼出logits参照

図: 依存の目安。 実装では gpt が学習と推論の両方から呼ばれ、学習ループが B4 を更新します。

7 ブロックの役割

microgpt.py 全体は、役割の異なる 7 つのブロック B1〜B7 に分けて読めます。 それぞれが「何を担当するか」を先に押さえておくと、後続の章で行単位のコードを読むときに迷子になりません。

表18-2: 7 ブロックの役割

ブロック

名前

役割

B1

データセット

input.txt を読み、空行を除いた文書リスト docs を作る

B2

トークナイザー

文字と整数 ID を相互変換する。ucharsBOS を定義する

B3

計算グラフ(Value

演算を記録して自動微分を可能にする。逆伝播の土台となる

B4

重みの束(state_dict

モデルの全パラメータを保持する。学習で更新され、生成で参照される

B5

モデル本体(gpt

埋め込み → Attention → MLP → logits の順伝播を行う中核

B6

学習ループ

文書ごとに B5 を呼び、損失・逆伝播・Adam 更新で B4 を書き換える

B7

推論ループ

学習後の B4 を読み、温度付きサンプリングでトークン列を生成する

データの流れと制御の流れ

上の図には 2 種類の流れが含まれています。 両者を区別すると、各ブロックの関係が見通しやすくなります。

  • データの流れinput.txtdocsuchars(B1 と B2)→ state_dict(B4)→ logits(B5)→ 生成トークン列(B7)と、値が変換されながら左から右へ進みます。

  • 制御の流れ:B6(学習ループ)と B7(推論ループ)が中核の B5(gpt)を繰り返し呼び出す関係です。gpt 自身はループを持たず、呼ばれるたびに 1 トークン分の順伝播を返すだけの部品です。

B5(gpt)は学習と推論の両方から共有されます。 学習ループ(B6)は gpt の出力から損失を計算して B4 を更新し、推論ループ(B7)は更新済みの B4 を使って gpt を呼びます。 同じ順伝播コードが、損失計算につながるか、サンプリングにつながるかで役割を変えます。

以上の入出力、7 ブロック、各種の流れを 1 枚にまとめると、次のようになります。

../_images/microgpt_overall_map.jpg

図18-1: microgpt 全体地図(入出力と 7 ブロック)。データの流れ、呼出(制御)、state_dict 参照/更新、内部の順序/利用を色分けして示す

18.3 ブロックから章への対応

ここまでで 7 ブロックの役割と全体の流れをつかみました。 各ブロックの中身を行単位で読むのは後続の章です。 下表で「どのブロックがどの章に対応するか」を確認し、興味のあるブロックから読み進めてください。

ブロック

内容の要約

詳細を読む章

B1, B2

docsucharsBOS、トークン化

第19章 microgpt の前処理

B3, B4

Valuestate_dict / params、初期化

第20章 microgpt の主要データ構造

(B5 の部品)

linear / softmax / rmsnorm

第21章 microgpt のユーティリティ関数

B5

gpt 本体(埋め込み、Attention、MLP、logits)

第22章 microgpt のモデル本体(gpt)

B6

学習ループ、損失、Adam

第23章 microgpt の学習ループ

B7

temperature、サンプリング、終了条件

第24章 microgpt の推論ループ

18.4 次に読む章

第19章 microgpt の前処理から、上表の順に細部へ進んでください。 Python 実装を Mojo へ移す話は 第25章 microgpt.py を Mojo で書き直す、MAX の紹介は 第26章 MAX を導入する意味 です。