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包。