AMD GPU token substitution corruption on Qwen3.6-27B (both Vulkan and ROCm)

这个报错通常发生在 llama.cpp 的 llama-server 以路由模式启动、同时全局设置了 DRY 采样器参数时,模型输出会与提示词产生字符级替换或插入错误,看起来像 AMD GPU 后端(Vulkan/ROCm)精度问题。优先排查 llama-server 预设中的 DRY 采样参数,而

快速结论:这个报错通常发生在 llama.cpp 的 llama-server 以路由模式启动、同时全局设置了 DRY 采样器参数时,模型输出会与提示词产生字符级替换或插入错误,看起来像 AMD GPU 后端(Vulkan/ROCm)精度问题。优先排查 llama-server 预设中的 DRY 采样参数,而不是 GPU 后端。

适用环境:该 Issue 已确认的环境包括 AMD Radeon RX 7900 XTX(RDNA3,Vulkan RADV 26.1.6)、ROCm 容器、Linux 内核 6.17.9、llama.cpp 版本 b10298 / b10380。最终确认根因是用户自定义的 DRY 采样器配置,并非 GPU 后端缺陷。

最快修复方案:从 llama-server 预设中移除或关闭 DRY 采样器参数(dry_multiplierdry_basedry_allowed_lengthdry_penalty_last_n),问题即可消失。这是 Issue 中明确验证过的解决方案。

注意事项:该方案已在 llama-server b10380、RX 7900 XTX、Vulkan 后端上验证通过;但 Issue 中提到的 DRY 惩罚窗口(dry_penalty_last_n = 2048)覆盖提示词导致回声/复制任务被结构性惩罚这一说法,是用户推测的“可能值得讨论的上游问题”,尚未被官方维护者确认或修复。

问题场景

用户使用 llama.cppllama-server 在 AMD GPU(Vulkan 或 ROCm)上运行 Qwen3.6-27B 等模型,要求模型“完全重复”给定的 URL 时,生成结果出现字符替换(如 zsh 变成 zhsshzshell)或插入空格。CPU 后端运行同样请求输出正确,GPU 后端稳定复现错误,导致误判为 AMD GPU 后端精度问题。

报错原文

AMD GPU token substitution corruption on Qwen3.6-27B (both Vulkan and ROCm)

Examples:
| `awesome-zsh-plugins` | `awesome-zh-plugins` |
| `awesome-zsh-plugins` | `awesome-zshell-plugins` |
| `awesome-zsh-plugins` | `awesome-ssh-plugins` |
| `froggeric` | `frogger` |
| `helix-assist` | `helix-Assist` |

原因分析

可能原因并非 GPU 后端计算精度问题,而是用户的 llama-server 路由模式预设中全局设置了 DRY(Deletion Repetition Yield)采样参数:dry-multiplier = 0.8dry-base = 1.75dry-allowed-length = 2dry-penalty-last-n = 2048。其中 dry-penalty-last-n = 2048 的窗口覆盖了提示词中的 URL,任何回声/复制任务都会触发 DRY 的指数惩罚,导致 argmax 在近并列 token 上被翻转,表现为字符替换或空格插入。Issue 作者最终确认这是用户采样器配置错误,而非 GPU 后端缺陷。

另一个可能原因是 temperature: 0.0 并不会禁用 DRY——DRY 是 argmax 之前施加的 logit 惩罚,所以使用 greedy 解码的请求仍然会有 DRY 生效。CPU 后端恰好没有翻车,GPU 因为 logit 余量较窄而被惩罚翻转,这使得问题看起来像后端计算问题。

环境排查

  • 确认 llama.cpp 版本(Issue 中为 b10298,最终验证为 b10380)
  • 检查 llama-server 是否以路由模式启动,是否在预设中设置全局采样参数
  • 检查预设中是否存在 dry_multiplierdry_basedry_allowed_lengthdry_penalty_last_n 等 DRY 参数
  • 对比 CPU 后端(--n-gpu-layers 0)与 GPU 后端的输出差异
  • 确认模型量化类型、KV cache 类型、GPU 数量、显式设备选择等不影响复现(Issue 中已排除多 GPU 问题)

解决步骤

  1. 检查预设配置:打开 llama-server 的路由模式预设文件,查找是否设置了 dry_multiplierdry_basedry_allowed_lengthdry_penalty_last_n 等全局采样参数。
  2. 移除 DRY 参数:从预设中删除所有 DRY 相关配置,保存并重启 llama-server。
  3. 验证修复:重新发送之前报错的请求,确认 URL 输出字节级一致。Issue 中验证了 Qwen3.6-27B Q4_K_XL 和 Gemma 4 31B Q4_K_XL 在 temp 0 下均恢复正常。
  4. 如需保留 DRY:如果确实需要 DRY,可优先尝试缩小 dry_penalty_last_n,使其不覆盖提示词;或者仅在单次请求中按需指定 DRY 参数,而不是全局设置。
  5. 自行复现(可选):可在任一硬件上通过请求体携带 DRY 参数来确认是该采样器导致的:在 /v1/chat/completions 请求中加入 dry_multiplier: 0.8dry_base: 1.75dry_allowed_length: 2dry_penalty_last_n: 2048,输出会稳定复现同样的坏结果。

验证方法

在移除 DRY 参数后,重新运行 Issue 中的复现命令(重复 URL 的请求),检查输出是否与输入 URL 字节完全一致。另外可以临时在请求中重新加入 DRY 参数,确认错误能够确定性复现——Issue 中在 b10380 上重试 3/3 次均复现输出在 https://github.com/unixorn/ 处停止、finish_reasonstop,说明 DRY 是触发因素。若移除后输出正确、加回后又复现,即可确认已解决问题。

参考来源

ggml-org/llama.cpp #26754

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18298

发表回复

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