Eval bug: [Vulkan] GGML_ASSERT(wg0 device->properties.limits.maxComputeWorkGroupCount on Intel Arc A770 when running Qwen 3.8 flash next

该报错通常发生在 Vulkan 后端下运行 Qwen 3.8 Flash Next(qwen4exp)模型,且预填充批大小(ubatch)与 KV 缓存深度乘积过大导致线程组调度超出 GPU 驱动上限时。优先排查并降低 ubatch 或上下文长度,使 n_ubatch × n_ctx 保持在约 33

快速结论:该报错通常发生在 Vulkan 后端下运行 Qwen 3.8 Flash Next(qwen4exp)模型,且预填充批大小(ubatch)与 KV 缓存深度乘积过大导致线程组调度超出 GPU 驱动上限时。优先排查并降低 ubatch 或上下文长度,使 n_ubatch × n_ctx 保持在约 33M 以下。

适用环境:llama.cpp(约 b10760-10775 构建版本)、Vulkan 后端、Windows 11;已确认受影响的显卡为 Intel Arc A770 16GB(原始报告)及 Arc Pro B65 32GB / B70(评论确认)。驱动版本 32.0.101.8974。模型为 Qwen 3.8 Flash Next(qwen4exp 架构)。

最快修复方案:暂无确认的一步修复方案。评论中经验证的可行方法是限制 n_ubatch × n_ctx 小于约 3300 万,例如使用 -ub 1024 -c 30720 可以稳定运行。

注意事项:该问题仍标记为 unconfirmed,官方维护者在 b10775 构建上无法复现(因其测试参数恰好位于临界值以下)。降低 ubatch 会显著降低 prefill 吞吐(评论显示 ub 4096 时可达到约 280 pp/token,而 ub 1024 性能更低),仅建议作为规避手段,非最终修复。

问题场景

用户在 Windows 上使用 llama.cpp 的 Vulkan 后端,以 Intel Arc A770 16GB(搭配 i5-13600K)运行 Qwen 3.8 Flash Next(qwen4exp)模型的 llama-cli / llama-server 推理。当上下文长度在 25% 以上且 batch 超过 512/512 时进程崩溃;或在较高 batch size 下即使较短上下文也会触发。后续评论在 Arc Pro B65/B70 上以 llama-bench 完整复现。

报错原文

C:\llama.cpp\ggml\src\ggml-vulkan\ggml-vulkan.cpp:8290: GGML_ASSERT(wg0 device->properties.limits.maxComputeWorkGroupCount[0] && wg1 device->properties.limits.maxComputeWorkGroupCount[1] && wg2 device->properties.limits.maxComputeWorkGroupCount[2]) failed

原因分析

这不是模型计算路径的正确性问题,而是 Vulkan 后端调度尺寸限制。触发崩溃的 dispatch 其线程组数量大致随 n_ubatch × kv_len / 512 增长;当该值超过 GPU 驱动报告的 maxComputeWorkGroupCount[*](此驱动为 65535)即约 ub × kv ≈ 33M 时,ggml-vulkan.cpp 中的断言失败。该 dispatch 是 qwen4exp 架构特有的,评论确认 dense Qwen3.8 或 qwen3next 在相同 ub/ctx 下不会触发。

环境排查

  • Vulkan 后端是否启用:输出中应包含 ggml_vulkan: Found N Vulkan devices
  • Intel 显卡及驱动版本:受影响设备为 Arc A770、Arc Pro B65/B70,驱动 32.0.101.8974 上确认触发
  • llama.cpp 版本:b10760(0f3a71be1)、b10775(67a17c17c)均受影响
  • 模型架构:确认加载的是 qwen4exp/Qwen3.8 Flash Next 而非 dense 版本
  • 关键运行参数:-ub(ubatch)、-c(context)、-d(llama-bench 的 KV 深度)乘积关系

解决步骤

  1. 确认当前运行的 ubatch 和 context 设置,计算 n_ubatch × n_ctx 是否接近或超过 33,000,000。
  2. 可优先尝试:将 ubatch 降至 1024 并保持 context 不超过 30720(即 -ub 1024 -c 30720),评论验证在该配置下直至 28K 深度均可稳定运行。
  3. 如果性能优先,可尝试 -ub 2048 并将 context 限制在约 14K tokens 以内,或 -ub 4096 配约 8K context。
  4. 若在 llama-bench 中复现,请使用类似 -d 16384(使 ub × depth > 33M),低于该临界值的测试不会触发;具体命令参考:llama-bench.exe -m Qwen3.8-Flash-Next-UD-Q3_K_XL-00001-of-00003.gguf -ngl 99 -ncmoe 25 -fa 1 -b 4096 -ub 4096 -d 16384 -p 512 -n 0 -r 1 --no-warmup
  5. 等待上游 fix:评论建议参考 #26595 的分块 dispatch 方式(通过 row_base 风格 push constant 拆分调度),使单次 launch 不超过每维线程组上限。

验证方法

将 ubatch/context 参数调整至 ub × kv < 33M 后重新运行原推理命令或 llama-bench,应不再出现 GGML_ASSERT(wg0 <= ...) 崩溃。对比临界值附近的参数可确认边界:例如 ub 1024 配 d 30720+ 应触发,而 ub 1024 配 d 约 30720 以内应稳定通过。修改前建议记录原 ub 与最大可运行 context 的对应关系以便确认。

参考来源

ggml-org/llama.cpp #28247

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22508

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注