AISpot

llama.cpp CUDA 後端融合 FFN gate/up 矩陣乘與 GLU

llama.cpp releases版本更新地端推論開源

llama.cpp 的 CUDA 後端把稠密 FFN 的 gate 與 up 兩次矩陣乘合併為一次 mul_mat_q 呼叫,並在寫回階段直接計算 GLU,主要加速 prompt 處理。權重按每 8 行交錯裝載,使每個執行緒同時持有 up 值與對應的 gate 值,MMA 迴圈、warp 佈局與 vec_dot 保持原樣,寫回只輸出一半行。

官方合併的 CUDA 核心級融合最佳化:少一次核心啟動、寫回行數減半,覆蓋主流 K-quant 與 IQ4_XS,對在 NVIDIA 顯示卡上跑 llama.cpp 做長 prompt 推理的人直接相關。

原標題:b11879
閱讀原文

評分55 / 58(平均 56,門檻 60)
狀態未入選

原文

CUDA: fuse FFN gate/up matmuls and GLU in MMQ with interleaved gate/up rows ( #29948 ) cuda: fuse FFN gate/up and GLU in MMQ with interleaved gate/up rows For prompt processing, run the gate and up matmuls of a dense FFN as one mul_mat_q launch and apply the GLU in the write-back. The loaders take the gate weights as a second pointer and fill the weight tile with up and gate rows interleaved in chunks of 8, so each thread holds an up value and the matching gate value (rows r and r + 8 of an MMA tile). The MMA loop is unchanged: same tile, warp layout, vec_dot and one sum[] per thread. The fused write-back computes the GLU from registers and writes half the rows. The fused path uses the regular tiling (no stream-k) with the column tiles innermost so that neighbouring blocks share weight tiles. Enabled for Q4_K, Q5_K, Q6_K, Q8_0 and IQ4_XS on NVIDIA Turing and newer. cuda: assert the fused MMQ gate argument and trim redundant comments cuda: move the fused MMQ hint check to should_fuse and add TODOs cuda: pass prec_src1 to the fused MMQ write-back cuda: fuse only with efficient tiling and no fallback, merge the GLU write-back cuda: require has_fusion explicitly, drop the fusion-only src1 precision check cuda: launch the fused MMQ kernel through the stream-k kernel with one block per tile cuda: inline the MMQ tiling-efficiency check tests: one fused gate/up MMQ case per type and GLU op cuda: always launch the fused MMQ kernel with one block per tile tests: shorten the fused gate/up MMQ test comment cuda: select the fused MMQ loader and write-back in ggml_cuda_mmq_get_util_funcs cuda: run the fused MMQ kernel on the plain tiling path cuda: put the column tiles innermost in the MMQ plain tiling path Website: https://llama.app Attestations: https://github.com/ggml-org/llama.cpp/attestations/59646971 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 評分40

llama.cpp CUDA 後端融合 Qwen4Exp 四段運算元鏈

llama.cpp 建置 b11721 在 CUDA 後端把 Qwen4Exp 的 SCALE → SIGMOID → SCALE → hc_post 鏈融合成單個 kernel,由四個 kernel 縮減為一個,程式碼移植自 Vulkan 的 HC_POST_GATE 融合(#29520)。實現上 dsv4_hc_post_f32 新增 gated 模板標誌,直接用原始權重計算 scale_out·sigmoid(scale_in·p);

llama.cpp releases● 精選AI 評分74

llama.cpp 修復 Metal 後端 MUL_MAT+ADD 融合錯誤

llama.cpp 合併 PR #30100,修復 Metal 後端 MUL_MAT+ADD 融合中殘差運算元的選擇錯誤:當 ADD 的兩個運算元都是矩陣乘法輸出(x = W1@u + W2@v)時,舊邏輯會選中自身從未寫入的輸出緩衝區,導致結果錯誤。Clef 決策模型因此在 Metal 上機率趨近均勻,billing 輸出 0.28,而 CPU 後端為 0.977,且同一檔案在 CPU 上結果正確,說明並非量化問題。