快速结论:这个报错发生在 llama.cpp 使用 DSpark 投机解码(--spec-type draft-dspark)进行长文本生成时,且与解码 token 数量无直接关联,是一个偶发性 CUDA 图捕获/更新问题。优先尝试添加环境变量 GGML_CUDA_DISABLE_GRAPHS=1 作为临时规避,或直接升级到包含 #26574 补丁的版本。
适用环境:llama.cpp(b10242、b10257);DeepSeek-V4-Flash-0731 UD-Q4_K_XL GGUF 模型 + dspark 侧车模型;Linux x86_64;2× Quadro RTX 8000 (48GB) + 3× Tesla V100-PCIE-32GB 多 GPU 配置(-sm layer + --tensor-split);驱动 580.173.02,CUDA runtime 13.0,nvcc 12.0,CMAKE_CUDA_ARCHITECTURES=70;75;K/V cache f16。
最快修复方案:暂无官方已验证的一步修复方案;但根据 Issue 证据,添加环境变量 GGML_CUDA_DISABLE_GRAPHS=1 可优先尝试作为规避手段(作者测试中)。最终确认的修复为 PR #26574(已包含在后续构建中)。
注意事项:--spec-draft-n-max 3 已被证实无法避免崩溃,只能降低频率;崩溃偶发,相同请求重跑可能成功。禁用 CUDA graphs 可能影响性能,但 GGML_CUDA_GRAPH_OPT=1 开启时未复现崩溃。
问题场景
在 llama.cpp 的 llama-server 中启用 DSpark 投机解码(--spec-type draft-dspark)运行 DeepSeek-V4-Flash-0731 模型,进行长思维链(reasoning)回答时触发。用户使用 5 块 GPU(2× Quadro RTX 8000 + 3× Tesla V100)并以 -sm layer 模式拆分模型,同时将草稿模型固定在主模型输出层所在设备(--device-draft CUDA4)。短代码回答(几百 token)不会崩溃。
报错原文
/home/mp/llama.cpp/ggml/src/ggml-cuda/ggml-cuda.cu:106: CUDA error
E CUDA error: an unsupported value or parameter was passed to the function
E current device: 0, in function ggml_cuda_mul_mat_cublas_impl at /home/mp/llama.cpp/ggml/src/ggml-cuda/ggml-cuda.cu:1541
E cublasSgemm_v2(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N, ne01, ne11, ne10, (const float *) alpha, (const float *) src0_ptr, s01, (const float *) src1_ptr, s11, (const float *) beta, (float *) dst_ptr, ne0)
崩溃前最后一条服务器日志(第 3 次崩溃):
I slot print_timing: id 0 | task 7 | n_decoded = 2518, tg = 20.42 t/s, tg_3s = 21.22 t/s
原因分析
可能原因:DSpark 投机解码的验证批次(verify-batch)shape 随序列长度增长而变化,导致 CUDA graph 捕获或更新时传入 cuBLAS 的矩阵维度/步长(ld)出现非法值(为 0 或低于 cuBLAS 最小值)。Decode 路径中出现 FP32 GEMM(cublasSgemm_v2)本身可疑,可能与 DSpark markov head 产生的退化 shape 有关。确认该问题与已解码 token 数量无直接关联——第 4 次崩溃在长提示(26,695 tokens)处理完成后仅解码 180 tokens 就触发;崩溃为偶发性,相同请求立即重跑可正常完成。
环境排查
- llama.cpp 构建版本:b10242、b10257(均复现)
- GPU:2× Quadro RTX 8000(Turing, arch 75)+ 3× Tesla V100(Volta, arch 70),多 GPU 层拆分
- 驱动与 CUDA:驱动 580.173.02,CUDA runtime 13.0,nvcc 12.0,
CMAKE_CUDA_ARCHITECTURES=70;75 - 模型:
DeepSeek-V4-Flash-0731UD-Q4_K_XL(5 个 split 文件)+dspark-DeepSeek-V4-Flash-0731-Q8_0.gguf侧车 - 启动参数:
--spec-type draft-dspark --spec-draft-n-max 5,-c 137728,K/V cache f16,--flash-attn on - 对比基线:Qwen MTP(
--spec-type draft-mtp)同机同配置从未崩溃
解决步骤
- 升级/打补丁(确认有效):拉取 PR #26574 的分支(或包含该补丁的后续发布版)重新编译。作者在修复分支上运行长时间测试(含
GGML_CUDA_GRAPH_OPT=1和并发 slot),原始崩溃硬件上不再出现cublasSgemm_v2中止。 - 临时规避(可优先尝试):在启动
llama-server前设置环境变量GGML_CUDA_DISABLE_GRAPHS=1,禁用 CUDA graphs 后作为过渡方案测试是否避免崩溃。此方案在 Issue 讨论中作为候选规避措施提出,但作者未明确回传测试结果。 - 已验证无效的方案:将
--spec-draft-n-max从 5 降为 3 —— 仅降低崩溃频率,无法避免(第 4 次崩溃即发生在 n-max 3 时)。 - 对比验证(确认非 DSpark 本身问题):如条件允许,使用 Qwen MTP(
--spec-type draft-mtp)长时间运行,确认同机同配置不触发此崩溃。
验证方法
使用原始崩溃配置(长思维链请求,多 GPU 层拆分,DSpark 投机解码)连续生成长回答;确认不再出现 ggml-cuda.cu:106 CUDA error / cublasSgemm_v2 / unsupported value 中止。可参考 PR #26574 评论中的测试方法:在原始崩溃硬件上开启 GGML_CUDA_GRAPH_OPT=1 并启用并发 slot 进行长时间压测。
参考来源
ggml-org/llama.cpp #26554
修复 PR:ggml-org/llama.cpp #26574
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


