Misc. bug: Flaky Vulkan unit test results on some Intel Battlemage Linux systems

该报错是 llama.cpp 的 Vulkan 后端在特定 Intel Battlemage 独立显卡(如 G31)上运行单元测试时出现的偶发性失败,优先排查 Mesa 驱动版本,降级到 Mesa 26.0.x 或升级到包含修复提交的 Mesa 26.2.x 可解决。

快速结论:该报错是 llama.cpp 的 Vulkan 后端在特定 Intel Battlemage 独立显卡(如 G31)上运行单元测试时出现的偶发性失败,优先排查 Mesa 驱动版本,降级到 Mesa 26.0.x 或升级到包含修复提交的 Mesa 26.2.x 可解决。

适用环境:llama.cpp(version 10039+)、Linux(Ubuntu 26.04)、Intel Battlemage G31 独立显卡(设备 ID e223)、Mesa 26.1.x / 26.0.x。

最快修复方案:暂无在原始 Issue 中明确验证适用于所有环境的一步修复方案,但在 Mesa 26.0.3-1ubuntu1 上测试 10/10 无失败,降级到该版本可优先尝试。

注意事项:此问题在 Issue 中被标记为可能的环境问题,且与 Mesa 驱动相关;在不同显卡(如 B570、Arc Pro B70)或 iGPU 上表现不一致,修复方案可能因 Mesa 版本和具体硬件而有所不同。

问题场景

用户在 Linux 系统上运行 llama.cpp 自带的 Vulkan 后端单元测试工具 test-backend-ops,指定 -o MUL_MAT 参数测试矩阵乘法算子时,测试结果不稳定(flaky),在 10 次运行中出现约 7 次失败。这些失败的测试用例在单独运行时不会触发,只有批量执行时才会出现。

报错原文

Failing tests:
  MUL_MAT(type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[1,3],nr=[4,1],per=[0,2,1,3],k_v=0,o=1)
  MUL_MAT(type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[1,3],nr=[4,1],per=[0,2,1,3],k_v=0,o=1)
  Backend Vulkan0: FAIL

Misc. bug: Flaky Vulkan unit test results on some Intel Battlemage Linux systems

原因分析

根据 Issue 讨论链中的后续反馈,此问题很可能源自 Mesa 图形驱动程序而非 llama.cpp 本身。报告者指出,在 Mesa 26.1.5(kisak-mesa PPA)下失败率为 70%,而使用 Mesa 26.0.3 则完全没有失败。类似的问题也已在 Mesa 邮件列表和 GitLab 上被报告(包括 Adreno 平台),表明这可能是一个 Mesa 驱动层面的通用缺陷。Issue 最终被标记为“可能的环境问题”而关闭,并在 Mesa 的后续合并请求中得到了修复。

环境排查

  • 确认 Linux 内核版本:报告中为 Ubuntu 26.04 的 7.0.0-27-generic7.0.0-28-generic
  • 确认 Mesa 版本:运行 glxinfo | grep "OpenGL version"vulkaninfo | grep driverVersion,报告问题时的版本为 Mesa 26.1.4 / 26.1.5。
  • 确认显卡型号和 PCI 设备 ID:报告中为 Battlemage G31,设备 ID e223(如 lspci -v | grep -A 8 VGA)。
  • 确认 llama.cpp 版本:通过 llama-cli --version 查看(问题复现时为 version 10039)。

解决步骤

  1. 第一步(可优先尝试):降级 Mesa 驱动。如果当前使用 Mesa 26.1.x(尤其是来自 kisak-mesa PPA),建议降级到 Ubuntu 官方仓库的 Mesa 26.0.3-1ubuntu1 版本。根据报告者测试,该版本在相同硬件上 10/10 运行全部通过。
  2. 第二步:等待或升级到包含修复的 Mesa 版本。Issue 中提到 Mesa 合并请求 gitlab.freedesktop.org/mesa/mesa/-/merge_requests/43694 修复了相关问题。报告者在 Arc Pro B70 上使用 kisak-mesa 26.2.2 已验证修复生效。建议升级到 Mesa 26.2.2 或更高版本。
  3. 第三步:使用参数缩小测试范围。在等待驱动修复期间,如需复现或规避问题,可以使用更短的测试命令来减少批量测试的负载,例如:test-backend-ops -p "type_a=f32,type_b=f32,.*n=1,k=128" -o MUL_MAT
  4. 第四步:单独运行失败用例进行交叉验证。如果单个用例单独执行均通过,可确认是批量执行时的偶发问题,进一步佐证为驱动层调度或资源管理问题。

验证方法

在调整 Mesa 版本后,重新执行原始完整测试命令 test-backend-ops -p "type_a=f32,type_b=f32" -o MUL_MAT,并重复运行至少 10 次。如果返回结果全部为 OK,且不再出现 Backend Vulkan0: FAIL 字样,即可确认问题已解决。

参考来源

ggml-org/llama.cpp #25767

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22199

发表回复

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