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

llama.cpp发布b12220:Metal后端ggml_tri改用select,避免 ±inf变NaN

该版本修复了Metal内核用 0/1 比较结果相乘导致三角形外 ±inf被算成NaN的问题,改为与CPU内核一致地输出零;新增的test_tri_special覆盖四种三角形类型,据提交说明在旧内核下失败、新内核下通过。

AI解读:llama.cpp发布构建版本b12220,主要变更是Metal后端的ggml_tri算子不再把比较结果(0/1)与输入相乘,而是像CPU内核那样直接选择保留或写零。

据提交说明,旧Metal内核在三角形区域外的 ±inf会因乘以 0 变成NaN,而CPU内核在该位置写的是普通零,两者行为不一致。

提交新增了test_tri_special测试,向应被丢弃的单元填入 ±inf,覆盖全部四种三角形类型;提交者称该测试在旧内核上失败、在此次改动后通过。

发布页另外列出了macOS、Linux、Windows、Android等多平台预编译包,包括CUDA 12/13、Vulkan、ROCm 10.0、SYCL、OpenVINO等后端;macOS上启用KleidiAI的arm64包与openEuler包标注为DISABLED。

llama.cpp发布构建版本b12220,核心改动在Metal后端:ggml_tri内核改为按比较结果做select,而不是把输入乘以 0/1 的比较结果。

Metal的ggml_tri与CPU行为对齐

提交说明(PR #30711)描述,旧Metal内核通过乘以 0/1 的比较结果来屏蔽三角形区域外的单元,这会让区域外的 +inf或 -inf变成NaN;CPU内核在同一位置写的是普通零。改动后Metal内核像CPU一样做选择,直接输出零。

为验证这一边界情况,提交新增了test_tri_special,把 ±inf放进需要被丢弃的单元,覆盖全部四种三角形类型。提交者称,该测试在改动前的内核上失败,在改动后通过。提交中还删减了重复注释。

b12220发布页列出的构建产物

发布页按平台列出预编译包下载链接,覆盖macOS(Apple Silicon arm64、Intel x64)、iOS XCFramework、Ubuntu(x64、arm64、s390x,含CPU、Vulkan、CUDA 12.8、CUDA 13.5、ROCm 10.0、OpenVINO、SYCL FP32/FP16等变体)、Linux arm64骁龙(CPU、Adreno GPU、Hexagon NPU)、Android arm64、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm、OpenCL Adreno)以及UI包。

其中macOS Apple Silicon启用KleidiAI的arm64包和openEuler相关包在发布页标注为DISABLED,并链接到对应PR(#23780、#23705)。

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观