llama.cpp Vulkan 後端用 subgroup reductions 最佳化 RMS Norm
llama.cpp 新建置 b11905 為 Vulkan 後端加入基於 subgroup reductions 的 RMS Norm 最佳化,並把 AMD 廠商加入 subgroup 歸約快速路徑。非 subgroup 路徑補齊 128/256/512 三種 block size,統一 BLOCK_SIZE,加入 unroll,以及跳過第二次 subgroup 的快速路徑。
原標題:b11905
閱讀原文
| 評分 | 45 / 42(平均 43,門檻 60) |
| 狀態 | 未入選 |
|---|
原文
vulkan: rms norm optimization using subgroup reductions ( #29882 )
RMS Norm Subgroup reductions optimizaton
Fix build error
Improved optimization
Make usage of BLOCK_SIZE consistent
Add fast path to skip 2nd subgroupAdd
Add AMD Vendor to subgroup reduction opt
Add comment clarifying rms_dict and merge_maps behavior
Add unroll
Rebase
Fixed syntax issue
Add 128/256/512 block sizes to non-subgroup path
Remove trailing whitespace
Website:
https://llama.app
Attestations:
https://github.com/ggml-org/llama.cpp/attestations/60062594
macOS/iOS:
macOS Apple Silicon (arm64)
macOS Apple Silicon (arm64, KleidiAI enabled) 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 libraries
Ubuntu x64 (CUDA 13) - CUDA 13.4 libraries
Ubuntu arm64 (CUDA 13) - CUDA 13.4 libraries
Ubuntu x64 (ROCm 10.0)
Ubuntu x64 (OpenVINO)
Ubuntu x64 (SYCL FP32)
Ubuntu x64 (SYCL FP16)
Linux arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - setup guide
Android:
Android arm64 (CPU)
Android arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - setup guide
Windows:
Windows x64 (CPU)
Windows arm64 (CPU)
Windows arm64 (OpenCL Adreno)
Windows x64 (CUDA 12) - CUDA 12.4 DLLs
Windows x64 (CUDA 13) - CUDA 13.4 DLLs
Windows arm64 (CUDA 13) - CUDA 13.4 DLLs
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
相關報導
llama.cpp releasesAI 評分41
llama.cpp 發布建置 b11526,主要修復 Vulkan 後端 rms_norm 工作組數量溢位(#30145)。該版本繼續為 macOS/iOS、Linux、Windows、Android 與 openEuler 提供多後端建置,覆蓋 CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL 以及驍龍平台的 Adreno GPU 與 Hexagon NPU;
llama.cpp releasesAI 評分43
llama.cpp 發布 b11564 建置,Vulkan 後端為 CM2 matmul 專門化量化塊大小,並改用三元表示式避免 switch 降低帶來的開銷,同時澄清了相關注釋。該版本照例附帶全平台建置,涵蓋 macOS/iOS、Linux、Windows、Android 與 openEuler,包括 CUDA 12/13、ROCm 10.0、Vulkan、SYCL、OpenVINO 等後端。
llama.cpp releasesAI 評分36
llama.cpp 發布 b11389 版本,修復了 Vulkan 後端在 RDNA4 架構上的矩陣向量運算調優問題(PR #29934)。該版本繼續提供覆蓋 macOS、Linux、Windows、Android 等平台的預編譯二進位制,包括 Vulkan、CUDA、ROCm、SYCL 等後端,其中 macOS Apple Silicon 的 KleidiAI 啟用版和 openEuler 建置被停用。
llama.cpp releasesAI 評分42
llama.cpp 建置 b11647 的 Vulkan 後端為 AMD 顯示卡最佳化了 f16/bf16 KV cache 的 strided 複製:先把 KV 一次性拷到 scratch,使跨記憶體通道的讀取分散,而不是集中在少數通道上。改動刪掉了專用的反量化 shader,改為複用已有的通用 copy pipeline——f16 分支只需要 strided copy,不需要 dequant;複製按源記憶體順序描述,讓跨步訪問落在順序寫入端。
llama.cpp releasesAI 評分43
llama.cpp 合併 PR #30106,修復 Vulkan 後端小矩陣乘法的分組錯誤。原實現把 warp tile 寬度 WM 固定為 32(8 寬子組時為 8),不隨 tile 的 BLOCK_SIZE 和 WARP 變化:使用 16 寬子組(Mali)時,同一工作組的第二個子組會寫入下一個 tile 的列;使用 8 寬子組時,部分 _id tile 有行未計算。現在改為按子組推導 WM,保證每個子組一個 warp tile;