llama.cpp Releases更新日

[Pre-release / 連続ビルド] b11569

[Pre-release / 連続ビルド] metal : duplicate ids を含む mul_mat_id を修正 (#30373) * metal : mul_mat_id の制限とカーネル名を修正 * metal : duplicate ids を含む mul_mat_id を修正 kernel_mul_mm_id_map0 はトークンごとに最大 1 件のマッチと、エキスパートごとに ne21…

Pre-release / 連続ビルド: これは実験的なビルドであり、安定版リリースではありません。

metal : duplicate ids を含む mul_mat_id を修正 (#30373) * metal : mul_mat_id の制限とカーネル名を修正 * metal : duplicate ids を含む mul_mat_id を修正 kernel_mul_mm_id_map0 はトークンごとに最大 1 件のマッチと、エキスパートごとに ne21 エントリーの固定容量を想定していました。そのため、ids に重複が含まれる場合に誤った 出力行や欠落した出力行が発生し、次のエキスパートのスライスへオーバーフローする 可能性がありました。 代わりに、(token, slot) エントリーのエキスパートごとのコンパクトなリストを構築します: - pass 1 は各エキスパートのエントリー数を数え、thread 0 がエキスパートスライスの オフセットを計算する(tpe は [base, count] を保持するようになる) - pass 2 はトークンごとに 1 回の無条件ストアでエントリーを書き込む(発散するレーンの 条件付きストアは非常に遅いため)、マッチしなかったトークンのダミー値は決して読まれない スライスのパディングスロットに置かれる - 重複は稀な分岐によって処理される - kernel_mul_mm_id は自身のエキスパートの base/count を読み、グリッドに収まらない エントリータイルをループ処理する ids バッファは ne20*ne21 + ne02(エントリー + パディング)のサイズとする。 883/883 test-backend-ops MUL_MAT_ID テストがパスし、llama-bench は以前の 動作の実行間ばらつきの範囲内です。 Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD * metal : mul_mat_id map0 の ne02 を関数定数にする kernel_mul_mm_id_map0 の id ループに FOR_UNROLL を使用し、ne02 を関数定数 FC_mul_mm_id_map0_ne02(FC_MUL_MM + 7)にすることで、cnt/bas/sids の threadgroup オフセットと prefix-sum の上限がコンパイル時に畳み込まれるようにします。 パイプライン名は ne02 をエンコードするようになり(ssm_conv の nc/silu 定数と同じ規約)、 map0 パイプラインは定数値を設定してコンパイルされます。ne02 は ggml_metal_kargs_mul_mm_id_map0 の一部ではなくなり - ディスパッチグリッドは 引き続きホスト側でテンソルの ne[2] から取得されます。 測定可能なパフォーマンスの変化なし: 883/883 test-backend-ops MUL_MAT_ID テストが パスし、op レベルおよび llama-bench の結果は実行間ばらつきの範囲内です。 Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD * cont : クリーンアップ + TODO * metal : prepass から mul_mat_id エントリータイルをディスパッチ vulkan 実装(#29998)のアプローチに従います: エキスパート x ne21 エントリータイルに わたるグリッドを起動して大部分の threadgroup を早期終了させる代わりに、 kernel_mul_mm_id_map0 が行マップも出力するようにします - これは、合計タイル数に 加えて、処理すべき仕事を持つ 32 エントリータイルごとの (expert, first entry, valid rows) ディスクリプタ 1 件です。 kernel_mul_mm_id はタイル数の静的上限(全エントリーの完全タイル + エキスパートごとに 最大 1 件の部分タイル)で起動され、自身のディスクリプタを読んで 1 つのタイルを処理します - テイルは早期終了します。これにより、グリッドを超える重複 ids をカバーするために必要だった ラウンドループが削除され(レジスタ圧力: th_max 768 -> 通常の mul_mm レベルに戻る)、 重複は上限内でより多くのディスクリプタを生成するだけなので暗黙的に処理されるようになります。 典型的な形状ではグリッドが約 8-16 倍縮小します(例: 128 エキスパート、8 使用、512 トークン: 2048 エントリータイルの代わりに 128 タイル、うち 94% は終了するためだけに起動されていた) さらに、mm カーネル kargs で ne21 が不要になりました。 883/883 test-backend-ops MUL_MAT_ID テストがパスします。llama-bench (Qwen3.6-35B-A3B Q8_0)はすべての pp サイズで master より高速になり (pp2048/4096/8192 +2%、pp512 +0.5%)、tg32 は変化なしです。 Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD * cont : smem アサートを追加

Website: - https://llama.app

Attestations: - https://github.com/ggml-org/llama.cpp/attestations/55057952

macOS/iOS: - macOS Apple Silicon (arm64) - macOS Apple Silicon (arm64、KleidiAI 有効) 無効 (DISABLED) - macOS Intel (x64) - iOS 向け XCFramework

Linux: - Ubuntu x64 (CPU) - Ubuntu arm64 (CPU) - Ubuntu s390x (CPU) - Ubuntu x64 (Vulkan) - Ubuntu arm64 (Vulkan) - Ubuntu x64 (CUDA 12) - CUDA 12.8 ライブラリ - Ubuntu x64 (CUDA 13) - CUDA 13.4 ライブラリ - Ubuntu arm64 (CUDA 13) - CUDA 13.4 ライブラリ - Ubuntu x64 (ROCm 10.0) - Ubuntu x64 (OpenVINO) - Ubuntu x64 (SYCL FP32) - Ubuntu x64 (SYCL FP16) - Linux arm64 (Snapdragon: CPU、Adreno GPU、Hexagon NPU) - セットアップガイド

Android: - Android arm64 (CPU) - Android arm64 (Snapdragon: CPU、Adreno GPU、Hexagon NPU) - セットアップガイド

Windows 向け: - Windows x64(CPU 向け) - Windows arm64(CPU 向け) - Windows arm64(OpenCL Adreno 向け) - Windows x64(CUDA 12 向け) - CUDA 12.4 DLL ファイル - Windows x64(CUDA 13 向け) - CUDA 13.4 DLL ファイル - Windows arm64(CUDA 13 向け) - CUDA 13.4 DLL ファイル - Windows x64(Vulkan 向け) - Windows arm64(Vulkan 向け) - Windows x64(OpenVINO 向け) - Windows x64(SYCL 向け) - Windows x64(ROCm 10.0 向け)

openEuler: - DISABLED - openEuler x86 (310p) - openEuler x86 (910b、ACL グラフ) - openEuler aarch64 (310p) - openEuler aarch64 (910b、ACL グラフ)

UI: - UI

原文の出典

llama.cpp Releases

内容について

原文の公開と権利は出典元に帰属します。

機械翻訳 · 原文をご参照ください