Misc. bug: Severe drop in prompt processing speed after b10780 on Vulkan, RDNA3

在 Vulkan 后端、RDNA3 显卡(Radeon 7900 XTX)上使用 llama.cpp 处理长提示词(约 5 万 token 级别)时,从 b10780 之后的版本开始出现严重的 prompt processing 速度下降;首要排查点是 b10781 起引入的 scratch buf

快速结论:在 Vulkan 后端、RDNA3 显卡(Radeon 7900 XTX)上使用 llama.cpp 处理长提示词(约 5 万 token 级别)时,从 b10780 之后的版本开始出现严重的 prompt processing 速度下降;首要排查点是 b10781 起引入的 scratch buffer 变更(对应 PR #28190)。

适用环境:llama.cpp llama-server 0.3.0-dev(build 10781 及之后);Linux;Vulkan 后端(--device Vulkan0);AMD Radeon RX 7900 XTX(RDNA3);Mesa 26.2.2;测试模型为 Qwen3.8-27B(Q4_K_M / Q4_K_S)并启用 MTP draft。

最快修复方案:暂无确认的一步修复方案。Issue 中明确验证有效的处理是回退到 build b10780(或相当版本),即可恢复原有 prompt processing 速度。

注意事项:回退只是规避,不是修复;Issue 未给出上游修复版本。关闭 MTP 只能减轻影响,不能完全恢复 b10780 的速度。报告者显存仍有约 6GB 空闲,故不能简单归因于 VRAM 超限。

问题场景

用户在 Linux 上以 Vulkan 后端运行 llama-server(--device Vulkan0),加载 Qwen3.8-27B GGUF 模型并启用 spec-type = draft-mtp(MTP 投机解码)与较大 batch(-b 2048 -ub 1024)。当提示词长度接近 5 万 token 时,b10781 及之后版本的用户会明显感觉到 prompt processing 变慢,而 b10780 及更早版本速度正常。另有用户报告推理期间桌面明显卡顿,只要 GPU 还在处理其他图形负载(例如打开 llama WebUI 页面),prompt processing 速度就会进一步骤降。

报错原文

Misc. bug: Severe drop in prompt processing speed after b10780 on Vulkan, RDNA3

b10798: prompt processing, n_tokens =  49985, progress = 1.00, t = 153.87 s / 324.85 tokens per second

b10781: prompt processing, n_tokens =  49985, progress = 1.00, t = 141.61 s / 352.97 tokens per second
        prompt processing, n_tokens =  49985, progress = 1.00, t = 132.14 s / 378.27 tokens per second

b10780: prompt processing, n_tokens =  49985, progress = 1.00, t =  75.82 s / 659.26 tokens per second
        prompt processing, n_tokens =  49985, progress = 1.00, t =  75.33 s / 663.57 tokens per second

原因分析

报告者把问题定位到 commit c7bda03(PR #28190)。根据 Issue 中的讨论,该提交启用了一个额外的 scratch buffer,会在提示词较长时给 GPU 带来额外显存压力(在该模型、该提示词长度下约 200MB,开启 MTP 时约 400MB)。

可能原因包括:这块新增缓冲区改变了 Vulkan 后端的内存分配/复用方式,在长 prompt 场景下触发更频繁的分配或同步,从而拖慢 prompt processing。报告者也观察到它与桌面/图形负载存在互相干扰:当 GPU 同时要渲染桌面或 WebUI 时,速度下降更严重,而 b10780 没有这种现象。

需要注意,报告者测试时显存仍有约 6GB 空闲(18307M/24473M VRAM,约 74.81%;GTT 1998M/32084M),因此单纯用“显存不够导致换页”解释并不成立,真正原因在 Issue 中仍属未完全确认。

环境排查

  • 确认 llama.cpp 构建版本:llama-server --version(受影响范围从 build 10781 开始,b10780 及更早正常)。
  • 确认使用的后端与设备:Vulkan(--device Vulkan0)。
  • 确认 GPU 型号:AMD Radeon RX 7900 XTX(RDNA3)。Issue 中另一位复现者同为 RX 7900 XTX。
  • 确认 Mesa 版本:报告者为 Mesa 26.2.2。
  • 确认是否启用 MTP:spec-type = draft-mtp、spec-draft-n-max、model-draft 等配置。
  • 确认提示词长度与 batch 参数(-b 2048 -ub 1024),因为该问题只在较深/较长 prompt 下明显。
  • 观察运行期间是否有其他 GPU 图形负载(桌面特效、llama WebUI 页面是否在前台渲染)。
  • 检查运行时的 VRAM / GTT 占用(例如报告中的 18307M / 24473M VRAM 74.81%),确认是否存在显存压力。

解决步骤

  1. 记录当前版本与复现条件:运行 llama-server --version 确认 build 号,并记录一次长 prompt 的 prompt eval 时间与 tokens/s。
  2. 回退到 b10780(或该提交之前的版本)后重新执行同样的长 prompt 测试,确认速度恢复到约 660 tokens/s 量级(报告者数据:b10780 约 75.8s / 659 tokens per second,b10781 约 141.6s / 352.97 tokens per second)。这是 Issue 中已验证的规避方式。
  3. 如必须停留在新版本,可先关闭 MTP 再测:报告者关闭 MTP 后 b10781 长 prompt 仍有下降(49989 token 时 327.45 tokens/s,而 b10780 为 679.35 tokens/s),说明关闭 MTP 只能部分缓解。
  4. 在测试过程中关闭桌面上不必要的 GPU 图形负载(例如把 llama WebUI 页面切到后台或最小化),对比前后 prompt processing 速度,确认是否为 GPU 争用叠加导致。
  5. 如需继续定位根因,可关注 PR #28190 所引入的 scratch buffer 在 Vulkan 后端的后续改动,在更新的 build 上按相同方法复测。

验证方法

使用与 Issue 相同的长提示词规模(约 49985 token)执行 prompt processing,比较 prompt eval 时间与 tokens per second。若在 b10780 上恢复到约 660 tokens/s 级别,或在 b10781 及之后的版本上恢复到与 b10780 接近的数值,即可认为问题已解决或已规避。同时可观察推理期间桌面/WebUI 是否仍然明显卡顿,以判断 scratch buffer 带来的 GPU 争用是否消失。

参考来源

ggml-org/llama.cpp #28752

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29025

发表回复

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