efficientmoe/moe-infinity は、MoE(Mixture of Experts、複数のエキスパートの一部だけを活性化して計算量を削減するモデル構造)モデルを PyTorch でサービングするライブラリである。2026 年 10 月 26 日のコミット a0b48949a67082456befef910b9817b37f8a47b9 はここに Qwen3.5-MoE の paged attention(キー・バリューキャッシュを固定サイズのブロックに分割して管理する方式)サービングを追加した。このモデルファミリーは、一度に複数のトークンをデコードすると出力が壊れる状態だった。
追加された Qwen3_5MoePagedAttention は、ゲート付きフルアテンション層のみ HuggingFace のアテンション実装に差し替えて paged KV キャッシュに接続する。線形アテンション層の Gated DeltaNet とビジョンツアーは元のクラスをそのまま使い、キャッシュはフルアテンション層のインデックスだけでサイズを決め、キーを振って線形層には KV 領域を割り当てない。Gated DeltaNet の conv・recurrent 状態はシーケンスごとに別々に保管し、GPU には最大 max_batch_size 個のシーケンス(シーケンスあたりスナップショット 2 個)だけを残す。それ以外のシーケンスは最近使用が少ない順にホストメモリへ移し、次の forward で復活させる。
画像・動画プロンプトでは HuggingFace の get_rope_index で M-RoPE の位置を計算し、その後のデコードごとにシーケンスごとの rope delta を適用する。同じコミットは、ランナーとエンジンが互いを参照することで、エンジンが破棄された後も GPU KV ストア(32GB V100 でエンジンあたり 5.4GiB)が循環 GC まで残り続けていた問題を、弱参照ベースで修正し、V100 の test_engine.py における OOM 7 件が解消した。オフロードパスの修正により Qwen3.5-MoE 常駐バックボーン的配置は GPU 側へ変更された。モジュール boundary/、serving/linear_attention_state.py と 1162 行のテストファイルが新規追加された。
ただし線形アテンションの状態はキャッシュとして再利用できないため、prefix reuse、chunked prefill、speculative 実行は理由 hybrid_linear_attention_state_unsupported で無効化されており、decode CUDA graph も対象外である。互換性ドキュメントはこの機能を「Qwen3.5 paged serving tiny-checkpoint validated (CPU)」という水準でしか記載しておらず、GPU 実測の性能数値は示していない。実際のモデルで確認できる判断をするのは、まだ早い。