llama.cppプロジェクトはビルドb10751をリリースし、CUDAにおけるMoE(Mixture of Experts)の加重エクスパート集約用の融合カーネルを導入しました。この最適化は、2つの物理カーネルを実行していた以前のベースラインを置き換え、中間のグローバルメモリトラフィックを削減するために単一の加重集約カーネルを使用します。

  • 融合カーネルは1つのランタイムkカーネルを通じてk=2..15のエクスパートを処理し、非スケーリングおよびスケーリングされたエクスパート重み付けグラフの両方をサポートします。
  • 同じ集約順序を維持しながら、構造的な演算シーケンス、形状、ストライド、左から右へのADDチェーンに一致します。
  • アロケーターとの統合により、エクスパート、ルーター重み、およびオプションのスケーリングが融合先が書き込まれるまで存続することが保証されます。
  • 認識できないまたは安全でないグラフは既存の演算ごとのパスにフォールバックし、これはGGML_CUDA_MOE_WEIGHTED_REDUCTION=0で無効にできます。

この変更により、エクスパート結合フェーズ中のメモリ帯域幅の使用を最小限に抑えることで、CUDA上のMoEモデルのパフォーマンスが向上します。