开源llama.cpp Releases·原文 2026年10月29日

llama.cpp b11972修复控制向量层索引越界与多模态M-RoPE位置写入越界

该版本在common中按模型层数限制控制向量的方向张量索引,并在mtmd中将Qwen-VL、GLM、PaddleOCR、Qwen2.5-VL编码器的M-RoPE位置循环改为按完整merge块填充;PaddleOCR在构图阶段新增merge对齐图像的约束。

AI解读:common侧的问题是:方向张量的层索引从张量名解析时没有上界,缓冲区大小和写入偏移用int计算;索引很大时两者溢出,累加会写到缓冲区起始位置之前。修复方式是把模型层数传给加载器,像已有的零索引检查一样拒绝超过层数的索引,并改用size_t计算大小。

mtmd侧的问题是:Qwen-VL、GLM、PaddleOCR、Qwen2.5-VL编码器的位置循环在stride为n_merge的范围内硬编码 2x2 merge,当patch网格不是merge的整数倍时会写出positions缓冲区之外。修复改为按完整merge块迭代、内层走n_merge步,使写入受patch数量约束,对齐网格上的位置结果不变。

PaddleOCR还新增一项限制:在构图时要求图像与merge对齐,Qwen-VL系列此前已有同样的要求。

b11972同时提供macOS、iOS、Linux、Android、Windows的预编译包,涵盖CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL以及Snapdragon的Adreno GPU与Hexagon NPU等后端;macOS的KleidiAI构建与openEuler构建标注为DISABLED。

llama.cpp发布b11972版本,提交 #31336 修复了两处缓冲区越界写入问题:common中控制向量层索引缺少上界,以及mtmd中四个视觉编码器的M-RoPE位置填充循环。

上述修复说明来自该版本的发布说明,未附带上游复现步骤或性能数据。

控制向量层索引按模型层数设限

发布说明称,common中方向张量的层索引是从张量名解析出来的,此前没有上界;缓冲区大小和写入偏移都用int计算。索引过大时两个值都会溢出,累加操作会写到缓冲区起始位置之前。

修复把模型层数传给加载器,参照已有的零索引检查,拒绝超过层数的索引,并改用size_t计算大小。

M-RoPE位置循环改为按完整merge块填充

mtmd侧的问题出在Qwen-VL、GLM、PaddleOCR和Qwen2.5-VL编码器的位置循环:循环在stride为n_merge的范围内硬编码 2x2 merge,当patch网格不是merge的整数倍时,写入会超出positions缓冲区。

修复改为按完整merge块迭代、内层走n_merge步,使写入受patch数量约束;发布说明称在对齐网格上位置结果与修改前相同。

PaddleOCR增加图像对齐约束

发布说明称,PaddleOCR现在在构图阶段要求图像与merge对齐,Qwen-VL系列此前已有这一要求。

预编译包的覆盖范围

b11972提供macOS Apple Silicon与Intel、iOS XCFramework、Linux(Ubuntu x64/arm64/s390x,含Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO、SYCL FP32/FP16、Snapdragon)、Android arm64、Windows x64/arm64的预编译包。

发布说明中,macOS的KleidiAI构建和openEuler构建标注为DISABLED。

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观