
Eval bug: Unable to load Qwen MoE model with MTP and -sm tensor
快速结论:当同时使用 --spec-type draft-mtp(MTP 投机解码)和 --split-mode tensor(张量并行拆分)时,加载 Qwen MoE 模型(含 MTP 头)报 GGML_ASSERT(buffer) failed 或 split_state 断言失败。优先排查:先单独去掉 -sm tensor 或 --spec-type draft-mtp,看是否能正常加载;目前该组合在多个量化版本下均被证实有问题,且不限于 MoE 模型。
问题场景
用户使用 llama-server(版本 9219, commit 45b455e66),在 Linux + CUDA 后端、3 张 A6000(Ampere 架构)的环境下,加载 Qwen3.5-35B-A3B-MTP-GGUF 或 Qwen3.6-27B-UD-GGUF 模型时触发。问题复现命令:
./llama-server -m ~/models/qwen3.6/MTP/Qwen3.6-35B-A3B-UD-Q8_K_XL.gguf --split-mode tensor -ngl 999 --ctx-size 262144 --host 0.0.0.0 --port 8081 --parallel 1 --flash-attn on --spec-type draft-mtp --spec-draft-n-max 2
即同时启用 --split-mode tensor(多 GPU 张量并行)和 --spec-type draft-mtp(MTP 投机解码)时必现。相同参数对 Qwen3.6-27B 密集模型 Q8 量化版本成功,但对 Q6 量化版本仍失败。
报错原文
以下为两种不同断言的报错原文:
GGML_ASSERT(buffer) failed
# 完整 backtrace:
/llama.cpp/ggml/src/ggml-backend.cpp:119: GGML_ASSERT(buffer) failed
...
ggml_backend_meta_alloc_ctx_tensors_from_buft
llama_kv_cache::llama_kv_cache(...)
llama_model::create_memory(...)
llama_context::llama_context(...)
llama_init_from_model
以及另一种场景:
GGML_ASSERT(split_state.ne[j] * tensor->src[i]->ne[src_ss[i].axis] == sum * tensor->ne[split_state.axis]) failed
/llama.cpp/ggml/src/ggml-backend-meta.cpp:1015: GGML_ASSERT(split_state.ne[j] * tensor->src[i]->ne[src_ss[i].axis] == sum * tensor->ne[split_state.axis]) failed
原因分析
可能原因:llama.cpp 在创建 MTP 投机解码上下文时,与张量并行(-sm tensor)的显存分配逻辑存在冲突。具体表现为在调用 llama_kv_cache 和 create_memory 时,ggml 后端无法正确分配 buffer(断言 buffer 为空),或拆分成 assert 时 tensor shape 不匹配。该问题在多个模型提供商(unsloth、AesSedai)的 GGUF 上均被复现,因此不是模型格式问题。
注意:Issue 讨论中用户尝试回退到 commit 39cf5d61915769124b7efbbfa69c46f19a6363ee 后问题仍然存在,说明该 Bug 并非由近期某个特定 commit 引入(或该 commit 未完全修复)。
环境排查
- llama.cpp 版本:version 9219 (45b455e66),构建于 GNU 12.2.0 for Linux x86_64
- Python / PyTorch 版本:Issue 未提及,但在使用
llama-server时通常不依赖 Python 运行时 - CUDA 后端:GGML backends 设为 CUDA
- GPU 数量与架构:3× A6000 (Ampere 架构)
- 模型量化版本:已测试 Q6_K 和 Q8_K 两种量化(UD 量化),均触发错误
- 模型架构:Qwen MoE 模型含 MTP heads(35B-A3B-MTP);密集模型 Qwen27B 在 Q6_K 量化下也会触发第二个断言错误
解决步骤
- 临时绕过(可优先尝试):去除
--split-mode tensor参数,使用默认的--split-mode layer(逐层拆分),或单 GPU 运行(不指定-sm)。经验证,此时模型可以正常加载。 - 替代方案:如果不使用 MTP 投机解码,可以不加
--spec-type draft-mtp参数,仅使用--split-mode tensor。Issue 报告者确认“仅开-sm tensor且不启用 MTP”可以成功加载 MoE 模型。 - 等待上游修复:截至 Issue 关闭(标签
bug-unconfirmed),该问题尚未被确认 Bug 或合并修复。建议关注ggml-org/llama.cpp后续更新,或尝试切换到--split-mode none或更新版本的llama.cpp。 - 验证模型完整性:可先用单 GPU + 无 MTP 模式加载相同模型,确认模型文件本身无损坏。
验证方法
使用以下命令(去掉 --split-mode tensor)能正常启动 llama-server 且无断言崩溃,即可证明问题与张量并行 + MTP 的组合相关:
./llama-server -m ~/models/qwen3.6/MTP/Qwen3.6-35B-A3B-UD-Q8_K_XL.gguf -ngl 999 --ctx-size 262144 --host 0.0.0.0 --port 8081 --parallel 1 --flash-attn on --spec-type draft-mtp --spec-draft-n-max 2
或者仅去掉 --spec-type draft-mtp 也能正常启动,则进一步确认是两者共存的兼容性问题。

![[Bug]: Image Recognition Regression in Chat Assistant after Authorization Fix](https://www.chat-gpts.plus/wp-content/uploads/2026/06/6822-f34e0198-768x403.jpg)

