(microgpt の構造)= # microgpt の構造 ## この章で学ぶこと - `microgpt.py` を **7 つのブロック**(準備から推論まで)として俯瞰する - 各ブロックが **データと制御の流れ**でどうつながるかをつかむ - 詳細は {numref}`microgpt の前処理` 以降でブロックごとに読む前提の「地図」を手に入れる {numref}`microgpt の仕様` では仕様と入出力を振り返りました。この章では **全体の骨格**だけを示します。長いコードの引用は置かず、短い説明と「どの章を読めばよいか」の対応表に留めます。 ## 全体地図(入出力と 7 ブロック) 左に学習用の入力(文書集合と `input.txt`)、右に学習で更新される重みと、推論で得られる生成列を置きます。中央には、{numref}`microgpt の仕様` でも触れた **B1〜B7** を配置しています。`Value`(計算グラフ)と `state_dict`(学習対象パラメータの束)は **データストア**を円筒形のノードで示します。 :::: {container} mermaid-flow-half ```{mermaid} flowchart TB IN[(input.txt / 文書集合)] OUTS[(生成されたトークン列 / 文字列)] subgraph prep["準備(B1 / B2)"] direction TB B1["B1 データセット"] B2["B2 トークナイザー"] C1[モデルパラメータ初期化] B1 --> B2 B2 --> C1 end B3[("B3 自動微分値 / 計算グラフ(Value)")] B4[("B4 重みの束 state_dict(学習で更新)")] subgraph gpt5["B5 gpt モデル"] direction TB EMB[トークン・位置の埋め込み] subgraph layerL["層ループ(n_layer)"] direction TB subgraph headL["ヘッドループ(n_head)"] direction TB SLICE[Q/K/V のヘッドごとの切り出し] AW["スケール付き内積 → softmax(注意重み)"] WV[V の重み付き和] SLICE --> AW AW --> WV end MERGE[ヘッド結合と attn_wo・残差] MLPB[MLP(rmsnorm → fc1 → ReLU → fc2・残差)] headL --> MERGE MERGE --> MLPB end LOG[lm_head で logits] EMB --> layerL layerL --> LOG end subgraph train6["B6 学習"] subgraph trainL["学習ループ"] T1[文書取得・トークン化] T2[順伝播 gpt・損失] T3[逆伝播 Value.backward] T4[Adam で state_dict 更新] T1 --> T2 T2 --> T3 T3 --> T4 end end subgraph infer7["B7 推論ループ"] I0[K/V キャッシュと初期トークン] subgraph posL["位置ループ"] I1[順伝播・logits] I2[temperature 付き softmax・サンプル] I3[終了判定(BOS 等)] I1 --> I2 I2 --> I3 end end IN --> prep prep --> |docs uchars| train6 prep -->|初期化| B4 B4 --> |参照| gpt5 B3 -.-> |利用| gpt5 B3 -.-> |利用| train6 train6 --> |呼出| gpt5 gpt5 --> |logits| train6 train6 -->|更新| B4 infer7 --> |呼出| gpt5 gpt5 --> |logits| infer7 B4 --> |参照| infer7 infer7 --> OUTS ``` :::: **図:** 依存の目安。実装では `gpt` が学習と推論の両方から呼ばれ、学習ループが `B4` を更新します。 ## ブロックから章への対応 | ブロック | 内容の要約 | 詳細を読む章 | |----------|------------|--------------| | B1, B2 | `docs`、`uchars`、`BOS`、トークン化 | {numref}`microgpt の前処理` | | B3, B4 | `Value`、`state_dict` / `params`、初期化 | {numref}`microgpt の主要データ構造` | | (B5 の部品) | `linear` / `softmax` / `rmsnorm` | {numref}`microgpt のユーティリティ関数` | | B5 | `gpt` 本体(埋め込み、Attention、MLP、logits) | {numref}`microgpt のモデル本体(gpt)` | | B6 | 学習ループ、損失、Adam | {numref}`microgpt の学習ループ` | | B7 | `temperature`、サンプリング、終了条件 | {numref}`microgpt の推論ループ` | ## 次に読む章 {numref}`microgpt の前処理`({ref}`microgpt の前処理`)から、上表の順に細部へ進んでください。Python 実装を Mojo へ移す話は {numref}`microgpt.py を Mojo で書き直す`、MAX の紹介は {numref}`MAX を導入する意味` です。