https://xenospectrum.com/thinking-machines-lab-llm-nondeterminism-batch-invariance/
He氏が突き止めた真犯人は、ハードウェアのミクロな挙動ではなく、ソフトウェアシステム全体のアーキテクチャに潜んでいた。その名は「バッチ不変性の欠如(lack of batch invariance)」である。
あなたのリクエストは孤独ではない:「バッチ処理」の仕組み
我々がChatGPTに質問を投げかけるとき、そのリクエストはサーバー内で単独で処理されているわけではない。LLMの推論サーバーは効率を最大化するため、ほぼ常に世界中の複数のユーザーから送られてきたリクエストを一つのかたまり、すなわち「バッチ」にまとめて処理する。
ここで重要なのは、このバッチのサイズが常に変動しているという事実だ。サーバーの負荷、つまりその瞬間にサービスを利用している他のユーザーの数は、個々のユーザーから見れば完全にランダムで予測不可能である。あなたの質問が、他の7人のリクエストと一緒に処理されることもあれば、次の瞬間には他の255人のリクエストとまとめて処理されることもあるのだ。
(略)
例えば、256件のリクエストを含む大きなバッチを処理するカーネルは、GPUの全コアをフル活用する高度に最適化されたアルゴリズムを選択する。一方で、8件しかない小さなバッチでは、同じアルゴリズムを使うと多くのコアが遊んでしまい効率が悪い。そのため、カーネルは複数のコアで一つの計算を分担するような、全く異なる戦略に切り替えるのだ。 この戦略変更こそが、非決定性を生む元凶となる。
犯行の構図:ランダムな負荷 → 変動するバッチサイズ → 変化する計算戦略 → 異なる結果