Eval bug: WebGPU hy_v4 crashes on macOS in test-llama-archs and test-save-load-state

该报错出现在 macOS + WebGPU(Dawn)后端运行 llama.cpp 测试套件时,主要集中在 hy_v4 架构的评测与保存/加载状态测试中,进程直接崩溃(SIGSEGV / SIGBUS)。优先排查 WebGPU 后端对 hy_v4 架构的支持情况,以及 CI 中 Dawn 依赖与构建

快速结论:该报错出现在 macOS + WebGPU(Dawn)后端运行 llama.cpp 测试套件时,主要集中在 hy_v4 架构的评测与保存/加载状态测试中,进程直接崩溃(SIGSEGV / SIGBUS)。优先排查 WebGPU 后端对 hy_v4 架构的支持情况,以及 CI 中 Dawn 依赖与构建配置是否与本地一致。

适用环境:llama.cpp version 0.4.0-dev (build 10902, commit df03399b8);操作系统 macOS 26.6.2 (25G83);硬件为 GitHub-hosted macOS ARM64 runner,Apple M1 (Virtual);GGML 后端为 WebGPU(使用 Dawn);Runner image 为 macos-26-arm64。问题在 Ubuntu WebGPU 任务中未复现。

最快修复方案:暂无确认的一步修复方案。在 Issue 讨论中,针对 hy_v4 的修复做法是将 WebGPU 下的 HY_V4 arch 测试禁用(见讨论摘要提及的 #28855),但后续 macOS WebGPU CI 仍在 DeepSeek V4 相关测试中出现 SIGTRAP,因此该做法并非最终完整修复。

注意事项:Issue 已关闭,但讨论中后续崩溃转移到了 test-recurrent-state-rollback-dsv4 与 test-save-load-state(DeepSeek V4 相关,SIGTRAP)。讨论中还提到失败可能与 #28091(precompiled headers)引入的变更有关,并怀疑已由 #28882 解决,但这些因果关系在 Issue 中没有给出明确的技术验证,属于可能原因。请勿把“禁用 HY_V4 测试”当作对所有 macOS WebGPU 崩溃的通用解决方案。

问题场景

在 macOS ARM64(GitHub-hosted runner,Apple M1 Virtual,macOS 26.6.2)上,使用 WebGPU(Dawn)作为 GGML 后端构建 llama.cpp,并运行主测试套件(ctest -L main)。触发崩溃的具体场景是测试由 test-llama-archs 生成的合成 Hy4 MoE GGUF fixture(build/tests/test-models/hy_v4-moe.gguf)以及 test-save-load-state 对同一模型进行初始评估。表现为 hy_v4 架构执行阶段进程崩溃,而 hy_v3 在同一环境下的 WebGPU 测试正常通过。

报错原文

|           hy_v3|            WebGPU|   MoE|  OK (8.82e-08)|       OK|
|           hy_v3|Apple M1 (Virtual)|   MoE|  OK (0.00e+00)|       OK|
|           hy_v4|            WebGPU|   MoE|
Test #27: test-llama-archs ...........................***Exception: SegFault

Start 33: test-save-load-state
Test command: /Users/runner/work/llama.cpp/llama.cpp/build/bin/test-save-load-state --models /Users/runner/work/llama.cpp/llama.cpp/build/tests/test-models/

main: model /Users/runner/work/llama.cpp/llama.cpp/build/tests/test-models/hy_v4-moe.gguf
load: adding 128 dummy tokens
run_save_load_tests_for_model: no prompt provided, generating 100 (n_batch) random tokens
run_save_load_tests_for_model: the input prompt is 100 tokens
Test #33: test-save-load-state .......................Bus error***Exception

96% tests passed, 2 tests failed out of 54

The following tests FAILED:
    27 - test-llama-archs (SEGFAULT)
    33 - test-save-load-state (Bus error)

Errors while running CTest
Process completed with exit code 8

原因分析

根据 Issue 描述,首次失败出现在提交 49c0dc82b849344f945b14ab997386bd793369aemodel : add Tencent Hy 4 (hy_v4) preview architecture support (#28127)),该提交前的 WebGPU 运行通过。因此最可能的原因是 WebGPU(Dawn)后端对新增的 hy_v4 MoE 架构支持不完整,导致在 hy_v4 执行阶段触发 SIGSEGV 与 SIGBUS。由于 Ubuntu WebGPU 任务通过同一套测试,问题更像是 macOS + Dawn 组合下的特定缺陷,而非模型文件或测试本身的问题。

可能原因(证据不充分):讨论中进一步定位到 #28091(precompiled headers 相关改动)之后的提交开始失败,但作者本人也表示不理解该改动为何会影响 WebGPU 测试;另有参与者指出该问题可能已由 #28882 解决。这些都未在 Issue 中给出明确根因说明。

环境排查

  • 确认 llama.cpp 版本与 commit:是否为 0.4.0-dev (build 10902, commit df03399b8),或已包含 hy_v4 支持的后续提交。
  • 确认 GGML 后端配置:GGML_WEBGPU=ONGGML_METAL=OFFGGML_BLAS=OFF 是否与 CI 一致。
  • 确认 WebGPU 实现与依赖:是否使用 Dawn,以及 CMAKE_PREFIX_PATH=dawn 是否正确指向 Dawn 安装路径。
  • 确认操作系统与硬件:macOS 版本(Issue 中为 macOS 26.6.2)、是否 Apple Silicon / M1 虚拟化环境、Runner image 版本。
  • 确认测试套件范围:是否执行 ctest -L main,以及是否包含 hy_v4 与 DeepSeek V4 相关测试。
  • 若已应用任何针对 hy_v4 的测试禁用补丁,确认该补丁基于哪个 commit,因为讨论显示失败点可能随 rebase 发生转移。

解决步骤

  1. 按 Issue 中给出的 CI 配置复现:先执行 workflow 的 Dawn Dependency 步骤,然后设置 export CMAKE_PREFIX_PATH=dawn
  2. 使用与 Issue 相同的构建参数配置并构建:cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DGGML_WEBGPU=ON -DGGML_METAL=OFF -DGGML_BLAS=OFF,随后 cmake --build build
  3. 进入 build 目录运行 ctest -L main --verbose --timeout 900,确认失败测试编号与类型(test-llama-archs 为 SegFault,test-save-load-state 为 Bus error)。
  4. 若需要临时恢复 CI 通过,可优先尝试讨论中提到的做法:为 WebGPU 禁用 HY_V4 arch 测试(对应 #28855)。注意该做法只是绕过 hy_v4 崩溃,Discussion 摘要显示后续仍可能在 DeepSeek V4 相关测试(test-recurrent-state-rollback-dsv4、test-save-load-state,SIGTRAP)中失败。
  5. 检查是否已包含 #28882 中的修复;讨论中认为该 PR 可能解决了由 #28091 引入的问题,但未在 Issue 中给出确认性结论。
  6. 如果仍崩溃,按讨论中的 bisect 思路,在 1dfe94e04875bbab710c1fbcb092ae2901b16d1b(通过)与 3bcfeb700fce9ff38a050dcd3f6a856319e948ba(失败)之间进一步缩小提交范围,注意该区间与 #28091 相关。

验证方法

在 macOS ARM64 + WebGPU 环境下重新运行 ctest -L main --verbose --timeout 900,确认 test-llama-archs 不再出现 SegFault、test-save-load-state 不再出现 Bus error,且 hy_v4 相关测试能够正常完成或被显式跳过(而不是终止进程)。若目标只是恢复 CI,则至少应确认失败列表为空、CTest 退出码为 0。

参考来源

ggml-org/llama.cpp #28722

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 23469

发表回复

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