快速结论:该报错通常发生在 llama.cpp 使用 Vulkan 后端、开启多设备张量并行(-sm tensor)并加载模型时,进程在模型加载阶段触发 SIGSEGV;日志中会先出现 ggml-backend-meta: multi buffers are unsupported leading to vulkan segfault。优先排查上下文长度(-c)相关的缓冲区分配路径,而不是先怀疑模型文件本身。
适用环境:llama.cpp version 8863(97895129e),GNU 13.3.0,Linux x86_64;Ubuntu 24.04,内核 6.8.0-110-generic;Vulkan 后端;CPU 为 Intel Xeon E5-2630L v3;显卡为 2× AMD Radeon RX 480(Polaris10,各 4 GB,合计 8 GB VRAM);Mesa 25.2.8 / RADV 驱动;无 peer-to-peer,PCIe 3.0 x16。
最快修复方案:在启动命令中显式传入一个较小的上下文长度,例如 -c 2048,Issue 中确认该 workaround 可以避免崩溃。
注意事项:该 workaround 只绕过崩溃,并未从根源修复多缓冲区不支持的问题;小上下文会限制可用上下文长度。Issue 中未确认其他版本、其他后端或其他上下文值是否同样有效,也未给出根本修复补丁。Issue 关闭时间为 2026-09-23,相关修复状态需以仓库最新代码为准。
问题场景
用户在 Linux 上编译 llama.cpp,并尝试用 Vulkan 后端和双 AMD Radeon RX 480 运行 llama-cli。命令中启用了 -ngl 99、-dev Vulkan0,Vulkan1、-sm tensor 以及 -fa 1,模型为 unsloth/Llama-3.2-3B-Instruct-GGUF:Q4_K_M。程序在 Loading model... 阶段、尚未进入推理时发生段错误。
报错原文
ggml-backend-meta: multi buffers are unsupported leading to vulkan segfault
Thread 1 "llama-cli" received signal SIGSEGV, Segmentation fault.
0x00007ffff3970fb0 in ggml_backend_vk_graph_compute(ggml_backend*, ggml_cgraph*) () from /home/matto/llama.cpp/build/bin/libggml-vulkan.so.0
#0 __gnu_cxx::__atomic_add_dispatch (__val=1, __mem=0x39) at /usr/include/c++/13/ext/atomicity.h:111
#1 std::_Sp_counted_base::_M_add_ref_copy (this=0x31)
#5 ggml_vk_tensors_overlap (elementwise=false, b=, a=0x7ffe1f485480) at /home/matto/llama.cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp:14319
#6 ggml_backend_vk_graph_compute (backend=, cgraph=0x555559bbcc20) at /home/matto/llama.cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp:14690
原因分析
调试堆栈显示,崩溃发生在 ggml_vk_tensors_overlap() 内构造 std::shared_ptr<vk_buffer_struct> 时,访问了一个明显异常的对象地址(this=0x31),随后在原子引用计数自增阶段触发 SIGSEGV。结合报错中的 ggml-backend-meta: multi buffers are unsupported,可能原因是:在 tensor split 模式下,Vulkan 后端为多个设备拆分图计算时,调度层仍然把跨设备的多缓冲区当作单一缓冲区处理,导致缓冲区对象或 shared_ptr 引用链失效。显式指定较小的 -c 会改变缓冲区分配规模和图结构,从而避开崩溃点。该机制在 Issue 中未被最终确认,属于基于堆栈和 workaround 的推断。
环境排查
- 确认 llama.cpp 构建版本,Issue 中为 version 8863(97895129e)。
- 确认使用 Vulkan 后端编译,并能加载
libggml-vulkan.so.0。 - 确认显卡与驱动:2× AMD Radeon RX 480,Mesa 25.2.8 / RADV。
- 确认是否使用了
-dev Vulkan0,Vulkan1与-sm tensor组合。 - 确认崩溃时是否没有显式指定
-c,或指定的上下文长度较大。 - 确认模型路径和量化格式与 Issue 一致:Llama 3.2 3B,Q4_K_M GGUF。
解决步骤
- 先在不带
-sm tensor的情况下运行,确认问题是否只在张量并行模式下出现。 - 在启动命令中显式加上小上下文,例如
-c 2048,其他参数保持 Issue 中的配置不变。 - 如果仍然崩溃,用调试构建并开启 gdb 获取完整 backtrace,确认崩溃点是否仍在
ggml_vk_tensors_overlap或ggml_backend_vk_graph_compute。 - 如果必须使用多设备 tensor split,可关注仓库后续对
ggml-backend-meta多缓冲区支持的更新;在 Issue 关闭前未有根本修复方案被验证。
验证方法
使用相同命令加上 -c 2048 后,llama-cli 应能越过 Loading model... 阶段并进入交互,不再出现 Segmentation fault (core dumped)。若仍崩溃,则说明该 workaround 在当前构建或驱动组合下无效,需要回到 gdb backtrace 继续定位。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


