26. MAX を導入する意味

26.1. この章で学ぶこと

  • なぜ microgpt.py / Mojo 版のままでは速さに限界があるのか

  • MAX が解決しようとしている問題とは何か

  • Graph・Module・Weight という三つの中心概念

  • MAX と Mojo の役割分担


26.2. microgpt.py と Mojo 版の限界

microgpt.py を Mojo で書き直す で実装した Mojo 版は、すべての演算をスカラー単位でテープに追記していきます。

t.add(a, b)   → テープにノードを 1 個追記
t.mul(c, d)   → テープにノードを 1 個追記
...           → 推論 1 ステップで数千〜数万ノードが積み上がる

これは自動微分(学習)のためには正しい設計ですが、推論だけを速く動かしたい場合には非効率です。

実装

特徴

問題

Python 版

短く読みやすい

Python インタプリタのオーバーヘッド

Mojo 版 (Tape)

型安全・自動微分可能

スカラーループ、JIT/SIMD 最適化なし

MAX

グラフを先に構築してから実行

→ 次節で説明


26.3. MAX とは何か

MAX(Modular Accelerated Execution)は、モデルの計算をグラフとして表し、実行しやすい形へ整理する基盤です。

microgpt.py のような実行方式と MAX の実行方式を比べると次のようになります。

diagram

MAX では先に「何をどんな順で計算するか」というグラフを組み立て、その後でコンパイル・最適化してから実行します。このため:

  • 演算の融合(複数の小さな演算を1回のカーネルにまとめる)

  • SIMD/GPU への自動マッピング

  • メモリレイアウトの最適化

が可能になります。


26.4. 三つの中心概念

26.4.1. Graph — 計算の設計図

Graph は「何を入力にし、どんな演算を経て、何を出力するか」を実行前に定義する設計図です。

Graph
├── 入力ノード(TensorType で型・形状を宣言)
├── 演算ノード(ops.matmul, ops.relu, ...)
└── 出力ノード

グラフを定義しただけでは何も実行されません。InferenceSession に渡してコンパイルして初めて動きます。

26.4.2. Module — 層や重みを持つまとまり

Module は、PyTorch の nn.Module に近い概念です。層・重み・計算の流れをひとまとまりで表します。

microgpt の例で言えば、次のような単位を Module として整理できます。

GPTModule
├── wte  (Weight: トークン埋め込み)
├── wpe  (Weight: 位置埋め込み)
├── AttentionModule (サブモジュール)
├── MLPModule       (サブモジュール)
└── lm_head (Weight: 出力線形層)

26.4.3. Weight — 学習される値を明示する

Weight は、モデルの学習可能なパラメータを表します。入力テンソルと区別して明示することで、「どれが固定値でどれが更新される値か」がグラフ上で明確になります。


26.5. MAX と Mojo の役割分担

MAX と Mojo は競合ではなく、役割を分けて組み合わせる設計になっています。

diagram

役割

担当

モデル全体の計算グラフを組む

MAX(Python API)

標準にない演算を高速実装する

Mojo(custom ops)

学習(自動微分・Adam)

Mojo の Tape(または別途 MAX Engine)

推論の高速実行

MAX(InferenceSession)

典型的な進め方は「まず標準の MAX ops でグラフを組み、ボトルネックになった部分だけを Mojo の custom ops に置き換える」です。


26.6. まとめ

  • Python ループ / Mojo Tape のスカラー実行は学習には適しているが、推論の高速化には限界がある

  • MAX は計算グラフを先に構築し、コンパイル・最適化してから実行する

  • Graph(設計図)・Module(まとまり)・Weight(学習パラメータ)が三つの中心概念

  • MAX と Mojo は競合せず役割分担する

次章では MAX の Python API を使った具体的なコード例を示します。

26.7. 次に読む章

27 章MAX でコードを書く)へ進みます。