概要
- LLM(大規模言語モデル)推論の再現性 は科学的進歩の基盤だが、現実には困難
- 推論の非決定性 は「並列処理+浮動小数点演算」説だけでは説明しきれない
- 浮動小数点の非結合性 が根本原因だが、それ自体は非決定性の直接要因ではない
- 多くのGPUカーネルは決定的 に設計されており、推論の非決定性は他の要因による
- LLM推論で本当に再現性を得るには、より深い理解と工夫が必要
LLM推論の非決定性の本質
- LLM(大規模言語モデル)推論 では、同じ質問を複数回しても 異なる結果 が返る現象
- サンプリング処理 により確率的にトークンが選ばれるため、これは自然な挙動
- temperatureを0に設定 しても、APIやOSS推論ライブラリ(vLLM、SGLang等)で 完全な決定性は得られない 現実
- 「並列処理+浮動小数点」仮説 がよく語られるが、これだけでは 全てを説明できない
- 同じデータで同じ行列積を繰り返しても、GPU上でビット単位で一致する結果 が得られる事例も存在
浮動小数点演算の非結合性
- 浮動小数点数 では、加算の順序によって 結果が異なる(非結合性)
- 有限の精度と丸め誤差 のため、$(a + b) + c \neq a + (b + c)$ となる現象
- 異なるスケール(指数)の値を加算 すると、情報の一部が失われる(丸め)
- 加算順序の違い で、同じ配列を何通りもの結果にできる実例
- この性質自体は非決定性の根本原因 だが、なぜ順序が変わるかは別の問題
カーネル実装と加算順序
- 並列処理+浮動小数点仮説 は「atomic add(アトミック加算)」の存在を前提
- atomic add はコアの終了順に依存し、 毎回異なる結果 になることがある
- LLMのforward pass では、通常 atomic addは使われていない
- バッチ並列性 や ツリー型リダクション 等の工夫で、 決定的な計算が可能
- scatter_addやFlashAttention backward など一部の操作を除き、 forward passは決定的
LLM推論の再現性獲得のために
- forward passが決定的 であっても、 API利用者視点では非決定的に見える 理由の存在
- 本質的な非決定性の要因 は、カーネルの実装や要求のタイミング、外部要因など多岐
- 本当に再現性のある推論 を得るには、 推論エンジンやシステム全体の設計理解 が必須
- 決定的なアルゴリズムと環境制御 による再現性確保の重要性
- LLM推論の再現性 は、単なる浮動小数点演算や並列処理だけでは語りきれない複雑な問題