Eval bug: vulkan Llama cpp prefers shared memory over dedicated memory

该问题通常出现在 Windows 上使用 Vulkan 后端运行 llama.cpp 时:显卡有充足的专用显存,但 llama.cpp 优先把模型放进显存可见的共享内存(ReBAR 相关机制),导致推理速度明显变慢。优先排查 ReBAR 与驱动行为,并尝试关闭 llama.cpp 使用 host-v

快速结论:该问题通常出现在 Windows 上使用 Vulkan 后端运行 llama.cpp 时:显卡有充足的专用显存,但 llama.cpp 优先把模型放进显存可见的共享内存(ReBAR 相关机制),导致推理速度明显变慢。优先排查 ReBAR 与驱动行为,并尝试关闭 llama.cpp 使用 host-visible VRAM 的路径。

适用环境:llama.cpp-win-x86_64-vulkan-avx2(1.24.1);Windows 10(后续评论中有用户提到 Windows 11 仍未解决);Vulkan 后端;AMD RX 9070(评论中另有用户报告 9060 XT 16GB、Adrenaline 25.9.1 也存在类似现象);模型为 ministral-8b-instruct-2410-q5_k_m.gguf(约 5.72 GB)。Issue 最初的复现环境是通过 LM Studio 使用 Vulkan llama.cpp。

最快修复方案:可优先尝试设置用户环境变量 GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM=1,然后重启 LM Studio 等基于 llama.cpp 的应用。该方案在 Issue 后续评论中由用户确认解决了“模型落到共享内存、生成极慢”的现象,但并非维护者给出的最终修复。

注意事项:维护者认为这更可能是 AMD 驱动在 RDNA4 / Windows 下的问题,并明确表示 Vulkan 后端无法像 ROCm 那样直接分配 GPU 显存;该设置属于 llama.cpp 侧绕过 ReBAR / 共享内存分配的行为,是否在所有驱动版本和所有模型尺寸上生效尚未验证。Issue 中关于“开启 Resizable BAR 可规避”的说法仅为用户报告,且需要主板 / BIOS 支持。

问题场景

用户在 Windows 10 上使用 LM Studio 调用 llama.cpp 的 Vulkan 后端,显卡为 AMD RX 9070(16 GB 专用显存),加载约 5.72 GB 的 ministral-8b-instruct-2410-q5_k_m.gguf 模型。实际推理速度约为纯 CPU 的一半,观察到的现象是模型被分配到约 8 GB 的共享内存,而不是 16 GB 的专用显存;大于 8 GB 共享内存的模型无法加载。用户还在评论中提到,通过 ROCm 加载时模型会先进入专用显存,但随后崩溃。

报错原文

Eval bug: vulkan Llama cpp prefers shared memory over dedicated memory

Issue 正文说明没有提供日志输出(“There are no logs”),问题主要以显存占用截图和推理速度下降来体现。

原因分析

维护者回复称,此前已收到 RDNA4 在 Windows 上的类似报告,但“这种行为不在我们的控制范围内”,并推测是 AMD 驱动的问题,因为在其他代际显卡上表现正常。可能原因是:Vulkan 后端在 Windows 驱动下选择了 host-visible 的显存路径(与 ReBAR / 共享内存机制相关),而 AMD 驱动没有按预期优先使用专用显存。Issue 中用户提出开启 Resizable BAR 作为 workaround,但这只是用户侧观察,未得到维护者确认。维护者也解释了为什么不能照搬 ROCm 的直接显存分配方式:Vulkan 的内存机制与硬件之间隔了更多抽象层。

环境排查

  • 确认是否使用 llama.cpp 的 Vulkan 后端,而不是 CUDA / ROCm 后端。
  • 确认 llama.cpp 版本(Issue 为 vulkan-avx2 1.24.1)以及调用它的应用(如 LM Studio)版本。
  • 确认操作系统版本(Issue 为 Windows 10,评论中有 Windows 11 仍复现)。
  • 确认 AMD 显卡型号与驱动版本(Issue 为 RX 9070;评论中 9060 XT 16GB 在 Adrenaline 25.9.1 上仍复现)。
  • 确认模型大小与显存 / 共享内存占用情况,观察模型加载后主要落在专用显存还是共享内存。
  • 确认主板与 BIOS 是否支持并开启 Resizable BAR;Issue 中用户使用 i7 6700k,需要修改 BIOS 才能开启。
  • 确认是否设置了 GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM=1 环境变量,以及设置后是否重启过应用。

解决步骤

  1. 先记录当前模型加载后的显存占用和生成速度,作为对照。
  2. 在 Windows 中打开“编辑账户的环境变量”,在用户变量中新建:名称为 GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM,值为 1。设置为用户环境变量,以便 LM Studio 等基于 llama.cpp 的应用能够读取。
  3. 完全退出并重新启动 LM Studio 或其他 llama.cpp 前端,使环境变量生效。
  4. 重新加载同一模型,观察模型是否优先占用专用显存、生成速度是否恢复。
  5. 如果仍无效,可进一步排查驱动:更新 AMD 驱动后重试;若主板支持,检查 Resizable BAR 状态(Issue 中用户报告开启 ReBAR 是 workaround,但后续评论中 9060 XT 用户表示在 Adrenaline 25.9.1 上开关 ReBAR 仍无效)。
  6. 若问题持续,可考虑向 AMD 驱动团队反馈,因为维护者认为根因在驱动侧。

验证方法

重启应用后加载同一模型,对比设置前后任务管理器或显卡监控中的专用显存 / 共享内存占用:若模型主要占用专用显存,且生成速度不再接近或低于纯 CPU,则说明规避生效。Issue 中用户反馈设置该环境变量后,模型不再落到共享内存,生成速度恢复正常;同时注意该 Issue 最终因 stale 被关闭,AMD 驱动侧的根因是否修复未在讨论中确认。

参考来源

ggml-org/llama.cpp #12748

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29926

发表回复

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