大規模言語モデルの推論高速化において、専門家混合(MoE)モデルの実行効率を引き上げる手法が、オープンソースコミュニティのllama.cppプロジェクトに導入された。OpenCLバックエンド向けに、入力トークン不足で生じる「詰め物(パディング)」の計算を命令レベルで省略し、無駄な演算を削減する。性能数値の華やかさよりも、端末側の省電力化やクラウドの演算資源最適化に寄与する設計変更だ。
32トークン単位のタイル構造に潜む無駄
MoEモデルの推論では、各層でトークンが適切な専門家(エキスパート)に振り分けられる。低負荷時や端末推論では、一つの専門家に割り当てられるトークン数が少なく、32トークン単位で演算するOpenCLカーネル内部では、実際のデータよりパディングが大半を占めるケースが頻発する。今回の変更は、タイルの上半分16スロットが全てパディングと判定された場合、後半の行列積演算を丸ごとスキップする。数値上の結果はパディング部分を計算しないだけで同一になる。
4分の1単位のきめ細かいスキップ制御
最初の変更がタイルの半分単位だったのに対し、後続の最適化では8列単位でのスキップ判定に細分化された。16列処理する演算を、8列処理の4回呼び出しに分解し、後方の完全パディンググループだけを個別に省略する。パディングは常に末尾に固まる性質を利用し、有効トークン数をスキップ粒度に合わせて切り上げる簡潔な設計だ。デフォルトで8列単位のスキップが有効化され、環境変数で16列単位や無効化も選択可能になる。
数値競争から省電力・演算資源最適化への転換
これらの最適化はピーク性能を引き上げる類のものではない。むしろ、無負荷時の消費電力を下げ、少ないトークン数でもGPUの演算器を過剰に使わないようにする。macOS Apple SiliconやAndroidのAdreno GPUを含む幅広いプラットフォームのOpenCLビルドに一律で適用されており、特定ハードウェアの専用最適化ではない。性能向上よりも、エッジAIやクラウドのサーバーレス推論における運用コスト低減に重きを置いた変更である。
推論エンジン分化を促すカーネルレベルの改良
llama.cppは多様なバックエンドを単一のコードベースでサポートする戦略をとっており、今回のOpenCL向け変更は、その戦略の延長線上にある。一方で、vLLMやTensorRT-LLMのような専用推論エンジンが別の粒度で最適化を進める中、カーネル内部の命令スキップという低レイヤでの改良は、性能を競うというよりも、動作環境の裾野を広げる方向に作用する。この差別化は、推論エンジン間の競争軸が、ピーク性能一辺倒から、電力効率や対応プラットフォームの広さに移りつつあることを示している。