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

llama.cpp b12076修复Metal拷贝内核:目标第 0 维非连续时写入错误地址

该版本更新说明称,kernel_cpy_t_t此前用隐式元素大小步长、而非args.nb0来索引目标张量最内层维度;当拷贝到置换视图且nb0不等于类型大小时会写错地址,该问题由新增的cpy测试用例捕获。

AI解读:llama.cpp发布构建b12076,带一条Metal后端修复:目标张量第 0 维非连续时,拷贝内核写入了错误地址。

按更新说明,内核kernel_cpy_t_t用隐式元素大小步长索引目标最内层维度,未使用args.nb0;当目标为置换视图、nb0与类型大小不等时寻址出错。

该问题由 #31446 新增的test-backend-ops cpy用例捕获,该用例使用permute_dst = {1, 0, 2, 3}。

适用边界:目标在第 0 维连续时寻址逻辑不变,因此受影响的仅是拷贝到第 0 维非连续目标的情形。

该构建同时照常提供macOS、iOS、Linux、Android与Windows等多平台预编译包,其中KleidiAI版macOS arm64包与openEuler相关构建标注为DISABLED。

llama.cpp发布b12076,更新说明列出的变更是Metal后端的一个拷贝内核修复:当目标张量在第 0 维非连续时,旧实现会写入错误地址。

修复涉及的寻址错误与触发条件

更新说明称,kernel_cpy_t_t在索引目标张量最内层维度时,使用隐式元素大小步长,没有使用args.nb0。当拷贝写入置换视图、且nb0与类型大小不相等时,地址计算就会出错。

该问题由 #31446 新增的test-backend-ops cpy用例捕获,该用例的目标置换参数为permute_dst = {1, 0, 2, 3}。更新说明同时注明,当目标在第 0 维连续时,寻址行为与修复前相同。

  • 修复对象:Metal后端的cpy内核(PR #31581)。
  • 错误机制:目标最内层维度按隐式元素大小步长索引,而非args.nb0。
  • 触发条件:目标为置换视图,且nb0不等于类型大小。
  • 发现方式:#31446 引入的test-backend-ops cpy用例,permute_dst = {1, 0, 2, 3}。
  • 影响边界:目标在第 0 维连续时寻址不变。

发布产物的变化

该版本的更新说明还列出各平台的预编译包:macOS Apple Silicon(arm64)与Intel(x64)、iOS XCFramework、Ubuntu(x64/arm64/s390x,含CUDA 12.8、CUDA 13.4、ROCm 10.0、Vulkan、OpenVINO、SYCL等变体)、Android arm64、Windows(CPU/CUDA/Vulkan/OpenVINO/SYCL/ROCm)以及UI包。

其中macOS Apple Silicon的KleidiAI版本与openEuler相关构建在说明中标注为DISABLED,并分别链接到PR #23780 与 #23705。

  • macOS/iOS:arm64、x64、XCFramework;KleidiAI arm64版标注DISABLED。
  • Linux:Ubuntu x64/arm64/s390x及CUDA、ROCm、Vulkan、OpenVINO、SYCL变体。
  • Android:arm64通用包与Snapdragon(CPU/Adreno GPU/Hexagon NPU)包。
  • Windows:x64/arm64的CPU、CUDA 12.4/13.4、Vulkan、OpenVINO、SYCL、ROCm。
  • openEuler:相关构建标注DISABLED。

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观