プレリリース / 継続的ビルド: これは実験的なビルドであり、安定版リリースではありません。
metal : few-row MMA mat-mul(#29869) * metal : スペキュラティブデコーディング向けの few-row MMA mat-mul とバッチ化コピー スペキュラティブデコーディングは各ステップで少数のドラフトトークンを検証します。テンソル API を使わない場合、Metal はこれらの mat-mul を mat-vec カーネルで実行していましたが、その処理時間は src1 の行数が増えるごとに増大するため、M3 Ultra 上での DFlash2 デコーディングは逐次デコーディングより遅くなっていました。 - 8x8 simdgroup マトリクス上で 2..16 src1 行に対応する mat-mul カーネルを追加:各ウェイトは全行に対して一度だけ非量子化され、threadgroup の simdgroup が K を分割します。Q4_0、Q8_0、Q5_K には専用カーネルがあり、F32、F16、Q4_1、Q5_0、Q5_1、Q4_K、Q6_K は 16 個のウェイト非量子化器にわたる汎用パスを使用し、Q4_0 の 2 行時には mat-vec カーネルの 2 行バリアントを使用します - テンソル API を使わない場合、MTLGPUFamilyApple7+ のみで使用し、その適用は M3 Ultra 上で mat-vec カーネルより高速になる行数からとします(F32: 6、F16、Q4_K、Q5_0、Q5_1: 3、その他の型: 2) - fusion table: MUL_MAT + ADD は MMA store 内で同一形状の residual を加算し、同一の 2 つのテンソル間の同一レイアウトの隣接する f32 コピーは最大 16 個まで 1 回の dispatch で実行されます - fusion チェックと ggml_graph_optimize はデバイスの props を参照するため、reorder は MUL_MAT + ADD を、それを融合できるデバイス上でのみ、すべての src1 行数に対してパックします - reorder がグループをパックする際、views は GGML_METAL_FUSION_MAX にカウントされないため、views を挟んだ 16 個の再帰状態スナップショットコピーが 1 つのグループのまま維持されます - encoder は融合されたグループの内部ノードの並行性をチェックし、書き込まれた views をその extent で追跡し、CPY の宛先を読み込みとしてカウントしません - CONCAT は行数が少ない場合、長い行を threadgroup 間で分割します - テスト: test-backend-ops における few-row の MUL_MAT、MUL_MAT_ADD、CPY_BATCH、CONCAT のケース(コピー順序のための prepare_graph フック付き)、test-metal-graph-optimize、test-metal-cpy-batch-alias * metal : CPY_BATCH 融合とメモリレンジ変更の削除 レビューでの提案に従い、カーネルとテストを含むバッチ化コピーの融合を削除し、 メモリレンジの変更を元に戻します。 メモリレンジ、グラフの reorder、CPY encoder は再び master と同じものになります。 * cont : クリーンアップ * cont : has_tensor ゲートを削除 * cont : オペランド/residual ロジックのクリーンアップ * cont : Q4_0 ne11=2 の特殊ケースを削除 * cont : kernels/mul_mv_mma.metal を追加 * cont : mma パイプライン選択ロジックを統合 * cont : 融合ロジックをデバイスの props から分離 --------- Co-authored-by: Georgi Gerganovウェブサイト: - https://llama.app
証明(Attestations): - https://github.com/ggml-org/llama.cpp/attestations/52722020
macOS/iOS 向け: - macOS Apple Silicon(arm64) 版 - macOS Apple Silicon(arm64、KleidiAI 有効) 無効 - 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 Graph 向け) - openEuler aarch64(310p 向け) - openEuler aarch64(910b、ACL Graph 向け)
UI: - UI