オープンソースの大規模言語モデル推論フレームワーク「llama.cpp」のOpenCL実装が大幅に改良された。Flash Attentionカーネルが刷新され、16ビット浮動小数点数(f16)と32ビット浮動小数点数(f32)に加え、新たに4ビット(q4_0)と8ビット(q8_0)の量子化テンソルに直接対応。さらに、ブロック単位でマスクを分類する前処理カーネルが追加され、不要な計算を飛ばす仕組みが導入された。これにより、Qualcomm AdrenoやARM MaliといったモバイルGPU上で動作するローカルLLMの応答速度と電力効率が一段と改善する見込みだ。
Flash Attentionカーネルが量子化テンソルを直接処理
今回の中核的変更は、OpenCLバックエンドのFlash Attentionカーネルがq4_0およびq8_0形式の量子化テンソルを直接扱えるようになった点である。従来は高精度な浮動小数点形式に変換(デキューント)してからアテンション計算を行う必要があったが、新たに追加された専用のデキューントカーネルが前段で効率的にデータを準備し、量子化された重みを保ったまま計算パイプラインを完結させる。これにより、4ビット量子化モデルをAdreno GPU上で動作させる際のメモリ帯域負荷が低減し、バッテリー駆動のスマートフォンやARグラスといった電力制約の厳しいデバイスでも、長文コンテキストの処理が実用的になる。
ブロック分類が生む「飛ばす」設計の計算効率
新たに追加された3つの前処理カーネルは、アテンションマスクの状態をブロック単位で「完全マスク」「部分マスク」「マスクなし」の3種類に事前分類する仕組みを持つ。メインのアテンションカーネルはこの分類結果を参照し、完全にマスクされたブロックの計算をスキップし、マスクのないブロックではマスク参照処理そのものを省略する。とくにパディングの多い可変長バッチ推論や、プロンプトの左右でマスク領域が偏るシナリオにおいて、この条件分岐削減がGPU占有率を引き上げる。GQA(Grouped Query Attention)を採用する最新モデルとの組み合わせでも効果を発揮しやすい設計だ。
ARMからAMDまで、広がるOpenCLアクセラレーションの層
この改良はllama.cppがサポートする幅広いプラットフォームに影響を及ぼす。Windows on ARMのAdreno GPU、AndroidのARM Mali、UbuntuのVulkanとROCm、さらにはSYCL経由のIntel GPUまで、OpenCL系バックエンドを利用するあらゆる環境が対象となる。注目すべきは、Apple SiliconのKleidiAI最適化パスとは別に、あえて汎用的なOpenCLレイヤーでも高度なアテンション最適化を実現した点である。これはQualcommやArmのGPUが搭載されたChromebookやWindows Copilot+ PCといった新興カテゴリで、CUDA非依存の競争力あるAI推論環境を構築する動きと軌を一にする。
タイルチューニングとSOA化が示す、モバイルAIの成熟
今回の変更には、Flash Attention向けのタイルサイズをGPUごとに調整可能にするチューニングテーブルとオーバーライド機能も含まれる。GPUアーキテクチャごとに最適なワークグループサイズが異なるモバイル環境で、開発者が性能を引き出しやすくする配慮である。また、q4_0形式のMoE(Mixture of Experts)テンソルをStructure of Arraysレイアウトに変更する修正も含まれ、専門家選択ルーティングのメモリアクセスパターンが改善された。これらは単なる機能追加ではなく、モバイル推論フレームワークが単体の最適化から、チップレベルでの計算資源管理へと設計の重心を移している兆候と言える。
浮動小数点の厳密さが守る推論の品質ライン
並行して、-cl-finite-math-only オプション使用時に無限大の処理が破綻するバグが修正された。このコンパイルオプションはNaNや無限大が発生しないと仮定して数値計算を高速化するものだが、アテンション計算のマスク処理で無限大が正しく扱われないと、ソフトマックス正規化の結果が歪み、生成テキストの品質が劣化する可能性があった。推論速度を追求するあまり、品質に関わる数値的厳密さを損なわないという設計判断は、性能向上が一分一秒を争う段階から、信頼性を担保しつつ効率化する成熟フェーズへの移行を示唆している。