2025/09/18 14:05 Model Flop Utilization Beyond 6ND

やっほー、ロボ子!今日はMFU、つまりModel FLOPs Utilizationについて話すのじゃ!

MFUですか、博士。GPUの使用率を把握するための効率指標とのことですが、具体的にどう役立つのでしょうか?

それがね、ロボ子。Googleによると、AIデータセンターの電力使用量は年間450TWhで、コストは200億ドルを超えるらしいのじゃ。MFUを理解することで、この莫大な計算資源を最適化できる可能性があるのじゃよ!

なるほど、コスト削減に繋がるのですね。MFUの計算式は`F_i = 2 * N * D`(推論時)と`F_t = 6 * N * D`(トレーニング時)とのことですが、この`6ND`という数字はどのように導き出されるのでしょうか?

ふむ、ロボ子、良い質問じゃ!これはね、3つの仮定に基づいているのじゃ。まず、全てのパラメータがmultiply-add(2 FLOPs)に貢献すると仮定する。次に、backwardはforwardの2倍のコストがかかると仮定する(合計で3倍)。最後に、全てがcompute boundであると仮定するのじゃ。

なるほど。しかし、記事には「大規模なトレーニングは推論boundになる傾向がある」とありますが、これはどういうことでしょうか?

良いところに気がついたのじゃ、ロボ子!トレーニングの初期段階ではパラメータの更新に多くの計算が必要だけど、学習が進むにつれて、データの読み込みや転送がボトルネックになることがあるのじゃ。これが推論boundになるということじゃ。

推論時の`2ND`という式も、多くの交絡変数があるため、真のMFUを捉えにくいとのことですが、具体的にはどのような点が問題なのでしょうか?

ふむ、例えば、シーケンス長が長くなると、注意機構のO(N^2)スケーリングを考慮する必要があるのじゃ。また、Mixture-of-expertモデル(MoE)では、総パラメータ数ではなく、アクティブなパラメータ数を考慮する必要があるのじゃ。

並列処理についても考慮が必要とのことですが、具体的にはどのような並列処理がMFUに影響を与えるのでしょうか?

テンソル並列、パイプライン並列、データ並列、コンテキスト並列、エキスパート並列など、色々な種類があるのじゃ。これらの並列処理を考慮しないと、正確なMFUを計算できないのじゃ。

推論時のMFUは動的に変化するとのことですが、それはなぜでしょうか?

推論では、リクエストのバッチを待たずに継続的に処理が行われるからじゃ。また、Prefillとdecodeは異なるハードウェアで実行されることが多いから、MFUが異なる場合があるのじゃ。

KV-cacheを使用する場合、シーケンス長は新しいトークンのみを考慮すればよいとのことですが、これはどういうことでしょうか?

KV-cacheは、過去のトークンの情報を保存しておく仕組みじゃ。だから、新しいトークンを生成する際には、過去のトークンを再計算する必要がないのじゃ。

Speculative decodingは、無駄なトークンを生成する可能性があるため、MFUの計算に注意が必要とのことですが、具体的にはどのような点に注意すべきでしょうか?

Speculative decodingは、高速化のために、予測的にトークンを生成する技術じゃ。しかし、予測が外れると、無駄な計算が発生してしまうのじゃ。だから、MFUを計算する際には、この無駄な計算を考慮する必要があるのじゃ。

vLLMにMFUを組み込むためのアプローチとして、単純な`~6ND~ 2ND`アプローチとPyTorchグラフを使用するアプローチがあるとのことですが、それぞれのメリットとデメリットは何でしょうか?

単純なアプローチは実装が簡単だけど、精度が低い。PyTorchグラフを使用するアプローチは精度が高いけど、実装が複雑になるのじゃ。

MFUは最適性能の理論的な指標として有用だが、モデルやハードウェアを跨いでの比較はできないとのことですが、それはなぜでしょうか?

MFUはあくまで理論値であり、実際の性能はモデルのアーキテクチャやハードウェアの特性に大きく依存するからじゃ。だから、MFUだけでモデルやハードウェアの優劣を判断することはできないのじゃ。

MFUをモジュール、オペレーション、またはカーネルごとにキャプチャしたり、rooflineモデルを組み込んだりすることで、改善できる可能性があるとのことですが、これは具体的にどのような改善に繋がるのでしょうか?

ボトルネックを特定しやすくなるのじゃ!例えば、特定のモジュールのMFUが低い場合、そのモジュールを最適化することで、全体の性能を向上させることができるのじゃ。

なるほど、MFUは奥が深いですね。勉強になりました、博士!

どういたしまして、ロボ子!最後に一つ、MFUを上げようと頑張りすぎて、自分の脳みそのFLOPsを使い果たさないように気をつけるのじゃぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。