llama.cpp b11528修复张量并行部分卸载时的KV缓存视图断言
该版本在meta后端接受宿主张量视图节点,修复了使用 --split-mode tensor配合部分卸载时KV缓存视图触发的断言;同时重新启用K2 Horizon的sm tensor。
AI解读:这次改动针对的是张量并行加部分卸载这一种组合:当KV缓存产生宿主张量视图时,meta后端此前会断言失败。开发者若在 --split-mode tensor下只把部分层放到GPU,可能正好撞上这个断言。
修复方式是在元后端接受“宿主张量视图”这类节点。发布说明解释,视图与其view_src共享内存,ggml-alloc不会把视图分配在它所属分片的缓冲区里,调度器会把源拷贝进分片,使用视图的算子读取该副本;视图节点本身是noop,不需要单独分片。
断言出现在两处:ggml_backend_meta_get_split_state() 解引用了tensor->buffer->context;图重建时用ggml_backend_meta_buffer_simple_tensor() 映射了每个节点。发布说明称接受这类视图节点也泛化了此前的s_copy_main临时方案。
发布说明还列出同一批次中的另一项改动:为K2 Horizon重新启用sm tensor。其余内容为各平台预编译包下载链接,包括macOS、iOS、Linux、Android和Windows。
作者标注Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next。上述解释均来自该发布说明,未提供修复前后的性能或稳定性对比数据。
llama.cpp发布b11528。发布说明列出的主要代码改动是meta后端处理宿主张量视图(#30217),修复了在使用 --split-mode tensor配合部分卸载时KV缓存视图触发的断言。
修复发生在哪种使用条件下
发布说明把触发条件写得很窄:使用 --split-mode tensor且采用部分卸载时,KV缓存视图会让meta后端断言。改动是让元后端接受这类节点——当它们是宿主张量的视图时不再拒绝。
发布说明解释原因:视图与其view_src共享内存,因此ggml-alloc从不在视图落入的分片缓冲区中分配视图;调度器把源拷贝进分片,使用该视图的算子读取这份拷贝。视图节点自身是noop,不需要自己的分片。
但此前meta后端在meta分片里留下这样的节点时会断言。发布说明点出两处:ggml_backend_meta_get_split_state() 解引用了tensor->buffer->context;图重建把每个节点都经ggml_backend_meta_buffer_simple_tensor() 映射。接受宿主张量视图节点也泛化了先前的s_copy_main临时方案。
同批次的另一项改动与发布物
发布说明还提到为K2 Horizon重新启用sm tensor,并有一条cont: 添加TODO与引用。
b11528附带多平台预编译二进制:macOS(arm64、x64)、iOS XCFramework、Ubuntu(x64/arm64/s390x的CPU,以及Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO、SYCL FP32/FP16)、Linux arm64(Snapdragon的CPU、Adreno GPU、Hexagon NPU)、Android arm64、Windows(CPU、OpenCL Adreno、CUDA 12.4/13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0)以及UI包。
发布说明中macOS Apple Silicon的KleidiAI版本标注为DISABLED,openEuler各构建也标注为DISABLED。改动标注Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next。