开源llama.cpp Releases·原文 2026年11月2日

llama.cpp b12034修复WebGPU显存分配非单调导致的CI中止

该版本合并PR #31422,让WebGPU后端在flash attention与MMVQ路径下按行数为scratch区域分配显存,使分配尺寸随批长度单调,从而避免GGML_SCHED_NO_REALLOC构建因意外重分配而中止。

AI解读:llama.cpp发布b12034版本,核心变更是WebGPU后端的显存分配修复,对应PR #31422。

问题根源:flash attention vec路径和MMVQ路径会在dst之后追加一块scratch区域,但get_alloc_size只在当前批次走这两条路径时才计入该区域,导致分配尺寸对批长度不单调。

后果是:在n_ubatch(tiled路径、无scratch)或单token下预留的图,无法覆盖 2 至 19 个query行的批次;启用GGML_SCHED_NO_REALLOC的构建会因意外重分配而中止。

修复方式:把行数传给两条路径的判定函数,并让scratch尺寸按行数计算,上限取短路径所服务的最长批次。

该版本同时附带各平台预编译包,覆盖macOS、iOS、Linux、Android、Windows与UI等构建目标;部分平台构建标记为DISABLED。

llama.cpp发布b12034版本,其中WebGPU后端的显存分配修复是版本说明中的主要变更,对应PR #31422,提交信息称其目的是修复CI。

WebGPU分配尺寸随批长度不单调的问题

按PR描述,flash attention vec路径与MMVQ路径会在dst之后追加一块scratch区域,但get_alloc_size只在当前批次走这两条路径时才把该区域计算在内。因此分配尺寸不随批长度单调变化:在n_ubatch(tiled路径、无scratch)或单token情况下预留的图,无法覆盖 2 至 19 个query行的批次;启用GGML_SCHED_NO_REALLOC的构建会因这次意外重分配而中止。

  • PR编号为 #31422,标题为保持scratch分配尺寸在批长度上单调。
  • 涉及路径:flash attention vec与MMVQ。
  • 受影响的构建条件:GGML_SCHED_NO_REALLOC。
  • 受影响批次范围:2 至 19 个query行。

修复做法与附带改动

PR的修改方式是把行数传给上述两条路径的判定函数,并让scratch尺寸按行数计算,上限取短路径所服务的最长批次。同一PR还包含把MMVQ pipeline key对齐clang-format 22的格式调整,以及针对评审意见命名矩阵向量行阈值的改动。

  • 将行数传入两条路径的判定函数。
  • scratch尺寸按行数计算,并限制在短路径最长批次范围内。
  • 格式调整:MMVQ pipeline key对齐clang-format 22。
  • 按评审意见命名mat-vec行阈值。

发布产物范围

b12034的发布页同时提供多平台预编译包,涵盖macOS Apple Silicon与Intel、iOS XCFramework、Ubuntu(CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL)、Android arm64、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm)以及UI包。发布说明中,macOS Apple Silicon启用KleidiAI的构建与openEuler构建被标注为DISABLED。

  • Linux侧包含Ubuntu 26.04 s390x的CPU与zDNN构建。
  • Linux arm64提供Snapdragon的CPU、Adreno GPU、Hexagon NPU包,并附安装指南链接。
  • Windows提供arm64的OpenCL Adreno包。

信息来源

llama.cpp Releases原始来源