
Eval bug: Qwen3-Embedding model crashes on startup with GGML_ASSERT(block_num_y % num_subgroups == 0) failed.
快速结论:该报错在启动 Qwen3-Embedding GGUF 模型(尤其是 Q8_0 或 Q4_K_M 量化格式)时出现,优先排查 GGML_SYCL 后端下的多列矩阵-向量乘法函数(reorder_mul_mat_vec_*_sycl)的线程块对齐问题。关闭 SYCL 优化(GGML_SYCL_DISABLE_OPT=1)可临时绕过。
问题场景
用户使用 llama-server 加载 Qwen3-Embedding GGUF 模型(0.6B-Q8_0 或 4B-Q4_K_M),启动进程中触发断言失败。涉及 Intel Arc 系列显卡(B70 / B570),编译工具链为 IntelLLVM 2026.0.0,GGML backend 为 SYCL。该问题同时影响 reorder_mul_mat_vec_q4_0_q8_1_sycl、reorder_mul_mat_vec_q8_0_q8_1_sycl、reorder_mul_mat_vec_q3_k_q8_1_sycl、reorder_mul_mat_vec_q4_k_q8_1_sycl、reorder_mul_mat_vec_q5_k_q8_1_sycl、reorder_mul_mat_vec_q6_k_q8_1_sycl 这六个函数。
报错原文
GGML_ASSERT(block_num_y % num_subgroups == 0) failed
/home/rich/builds/llama.cpp/ggml/src/ggml-sycl/mmvq.cpp:1106: GGML_ASSERT(block_num_y % num_subgroups == 0) failed
原因分析
问题根因在于 SYCL 后端中多列矩阵-向量乘法函数的线程块数量(block_num_y)不是子组数量(num_subgroups)的整数倍,导致 GPU 工作组分配时断言失败。PR #22035 曾尝试修复该问题,但未能覆盖所有六个多列函数,且修复方式可能与运行时子组大小(WARP_SIZE)不一致。Issue 中 AI 分析建议将 block_num_y 的计算方式改为向上取整并与 num_subgroups 相乘,但该方案未经社区正式合并。
此外,用户测试显示设置环境变量 GGML_SYCL_DISABLE_OPT=1 可以绕过该断言,表明优化路径中可能存在额外的未对齐分支。
环境排查
- llama.cpp 版本:确认当前版本是否为 commit
8f83d6c27(version 9562)或d6d0ce821(version 9581),及构建时间是否晚于 2026-06-22。 - Intel 编译器版本:IntelLLVM 2026.0.0
- GPU 型号:Intel Arc Pro B70 / B570
- GGML backend 配置:CMake 编译时是否启用
GGML_SYCL=ON与GGML_SYCL_F16=ON - 量化格式:Q8_0 或 Q4_K_M(已验证触发)
解决步骤
- 可优先尝试:在启动命令前设置环境变量
export GGML_SYCL_DISABLE_OPT=1以禁用 SYCL 优化路径,临时绕过断言。 - 若问题依然存在,建议升级至最新 master 分支(至少 >= commit d6d0ce821),并尝试重新构建:
cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx - 若要彻底修复,需修改
ggml/src/ggml-sycl/mmvq.cpp中六个reorder_mul_mat_vec_*_sycl函数,将 block_num_y 循环上界改为:constexpr size_t num_subgroups = WARP_SIZE; const int block_num_y = ceil_div(nrows, GGML_SYCL_MMV_Y * (int)num_subgroups) * (int)num_subgroups;然后重新编译。
验证方法
启动 llama-server 并加载相同的 Qwen3-Embedding 模型,观察日志中不再出现 GGML_ASSERT(block_num_y % num_subgroups == 0) failed 且模型成功加载到 GPU 端(日志中应显示已使用 -ngl 99)。使用 --embedding 模式并发送测试 embedding 请求确认推理正常。



