Vulkan: vk::DeviceLostError crash in ggml_vk_flash_attn on AMD gfx1102 (RADV PHOENIX)

用户在 llama.cpp 的 llama-server 中使用 Vulkan 后端( --device Vulkan0 )加载 GGUF 模型,并开启 Flash Attention 加速( -fa on )。在首次 decode 阶段(prompt processing 完成后,生成第一个 to

Vulkan: vk::DeviceLostError crash in ggml_vk_flash_attn on AMD gfx1102 (RADV PHOENIX)

Vulkan: vk::DeviceLostError crash in ggml_vk_flash_attn on AMD gfx1102 (RADV PHOENIX)

快速结论:此报错是 AMD RDNA3 架构(如 Radeon 780M、gfx1102)在 Vulkan 后端启用 Flash Attention 时触发的 GPU 设备丢失崩溃。优先排查方案是关闭 -fa on 参数,或切换至 ROCm 后端(但 ROCm 后端在 decode 阶段同样存在闪退问题)。

问题场景

用户在 llama.cpp 的 llama-server 中使用 Vulkan 后端(--device Vulkan0)加载 GGUF 模型,并开启 Flash Attention 加速(-fa on)。在首次 decode 阶段(prompt processing 完成后,生成第一个 token 时)触发崩溃。完整复现命令见 Issue 正文。

报错原文

radv/amdgpu: The CS has been cancelled because the context is lost. This context is guilty of a hard recovery.

terminate called after throwing an instance of 'vk::DeviceLostError'
  what():  vk::Queue::submit: ErrorDeviceLost

#6  ggml_vk_submit(std::shared_ptr<vk_context_struct>&, vk::Fence) [libggml-vulkan.so.0]
#7  ggml_vk_preallocate_buffers(ggml_backend_vk_context*, std::shared_ptr<vk_context_struct>) [libggml-vulkan.so.0]
#8  ggml_vk_flash_attn(...) [libggml-vulkan.so.0]
#9  ggml_vk_build_graph(...) [libggml-vulkan.so.0]

原因分析

可能原因:ggml_vk_flash_attn 在预分配缓冲区阶段(ggml_vk_preallocate_buffers)触发了 Vulkan 设备的硬恢复(hard recovery)。受害者上下文被销毁,导致后续 vk::Queue::submit 抛出 ErrorDeviceLost。这似乎是 AMD RADV 驱动在 RDNA3 架构(gfx1102)上与 Vulkan Flash Attention 实现的兼容性问题。关闭 -fa on 后两个后端均工作正常。

环境排查

  • GPU 型号:AMD Radeon Graphics (RADV PHOENIX) / gfx1102 (RDNA3 iGPU,Radeon 780M / APU Phoenix)
  • 驱动:RADV (Mesa),UMA 设备(uma: 1
  • 操作系统:Linux x86_64,Ubuntu(GNU 13.3.0)
  • llama.cpp 构建版本:8458 (4cb7e0bd6) 及之后版本(用户报告从更新后开始出现)
  • 模型架构:mistral3 (Ministral-3-14B-Instruct) 或 Qwen3.5 系列
  • 后端及参数:–device Vulkan0, -fa on, -ctk q8_0, -ctv q8_0

解决步骤

  1. 优先尝试:移除 -fa on 参数(或改为 -fa off)。这是 Issue 中确认有效的全局方案。
  2. 如果必须使用 Flash Attention,可尝试切换至 ROCm 后端(--device ROCm0)。但注意:ROCm 后端在第一次 decode token 时同样会崩溃,报 hipStreamSynchronize 错误(unspecified launch failure),这不是稳定替代方案。
  3. 检查是否使用了不兼容的模型架构(如 mistral3)。更换为其他架构的模型可能绕过问题,但 Issue 中未提供具体证据。
  4. 更新 Mesa/Vulkan RADV 驱动至最新版本。Issue 中未指定驱动版本,但已知 RDNA3 相关 bug 可能在新驱动中修复。
  5. 降低 batch size (-b) 或 ubatch size (-ub) 可能缓解问题,但 Issue 中未验证此方案。

验证方法

使用原复现命令(保留 -fa on)应触发 vk::DeviceLostError。移除 -fa on 后重新运行,模型应正常加载并完成 inference 而不崩溃。

参考来源

ggml-org/llama.cpp #20889

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 15099

发表回复

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