快速结论:这个报错通常发生在 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_multiplier、dry_base、dry_allowed_length、dry_penalty_last_n),问题即可消失。这是 Issue 中明确验证过的解决方案。
注意事项:该方案已在 llama-server b10380、RX 7900 XTX、Vulkan 后端上验证通过;但 Issue 中提到的 DRY 惩罚窗口(dry_penalty_last_n = 2048)覆盖提示词导致回声/复制任务被结构性惩罚这一说法,是用户推测的“可能值得讨论的上游问题”,尚未被官方维护者确认或修复。
问题场景
用户使用 llama.cpp 的 llama-server 在 AMD GPU(Vulkan 或 ROCm)上运行 Qwen3.6-27B 等模型,要求模型“完全重复”给定的 URL 时,生成结果出现字符替换(如 zsh 变成 zh、ssh、zshell)或插入空格。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.8、dry-base = 1.75、dry-allowed-length = 2、dry-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_multiplier、dry_base、dry_allowed_length、dry_penalty_last_n等 DRY 参数 - 对比 CPU 后端(
--n-gpu-layers 0)与 GPU 后端的输出差异 - 确认模型量化类型、KV cache 类型、GPU 数量、显式设备选择等不影响复现(Issue 中已排除多 GPU 问题)
解决步骤
- 检查预设配置:打开 llama-server 的路由模式预设文件,查找是否设置了
dry_multiplier、dry_base、dry_allowed_length、dry_penalty_last_n等全局采样参数。 - 移除 DRY 参数:从预设中删除所有 DRY 相关配置,保存并重启 llama-server。
- 验证修复:重新发送之前报错的请求,确认 URL 输出字节级一致。Issue 中验证了 Qwen3.6-27B Q4_K_XL 和 Gemma 4 31B Q4_K_XL 在 temp 0 下均恢复正常。
- 如需保留 DRY:如果确实需要 DRY,可优先尝试缩小
dry_penalty_last_n,使其不覆盖提示词;或者仅在单次请求中按需指定 DRY 参数,而不是全局设置。 - 自行复现(可选):可在任一硬件上通过请求体携带 DRY 参数来确认是该采样器导致的:在
/v1/chat/completions请求中加入dry_multiplier: 0.8、dry_base: 1.75、dry_allowed_length: 2、dry_penalty_last_n: 2048,输出会稳定复现同样的坏结果。
验证方法
在移除 DRY 参数后,重新运行 Issue 中的复现命令(重复 URL 的请求),检查输出是否与输入 URL 字节完全一致。另外可以临时在请求中重新加入 DRY 参数,确认错误能够确定性复现——Issue 中在 b10380 上重试 3/3 次均复现输出在 https://github.com/unixorn/ 处停止、finish_reason 为 stop,说明 DRY 是触发因素。若移除后输出正确、加回后又复现,即可确认已解决问题。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


