Eval bug: DRY sampling appears to have no effect

用户使用 llama.cpp 的 llama-server 命令行工具(版本 6081,commit d31192b4),搭配 Qwen3 7B Q4_K_M 的 GGUF 模型(POIROT-ECE),在 Linux 系统上通过 CUDA 后端(NVIDIA GeForce RTX 4090 La

Eval bug: DRY sampling appears to have no effect

Eval bug: DRY sampling appears to have no effect

快速结论:用户在运行 llama-server 并使用 DRY 采样器时,遇到模型无限重复单词/短语的问题,即使将 dry-multiplier 调至 10 也无效。优先排查 --dry-penalty-last-n 参数设置过小(如 32),并尝试将其设置为 -1(使用全上下文长度)或较大的值(如数千 tokens)。

问题场景

用户使用 llama.cpp 的 llama-server 命令行工具(版本 6081,commit d31192b4),搭配 Qwen3 7B Q4_K_M 的 GGUF 模型(POIROT-ECE),在 Linux 系统上通过 CUDA 后端(NVIDIA GeForce RTX 4090 Laptop GPU)运行推理。启动命令中开启了 DRY 采样器(--samplers "penalties;dry;top_n_sigma;top_k;typ_p;top_p;min_p;xtc;temperature"),并设置了 --dry-base 1.75--dry-multiplier 4--dry-penalty-last-n 32。即使将 multiplier 提升至 10,模型仍不断重复单个词或短语。

报错原文

Fits 链接  links 链接  Fits  Fits  fits  Fits  Fit  Fits _fit  Fits fits  Fits Fit  Fits fit  Fits  fits  Fit  fits _fit  Fits fits  Fits Fit  fits fit  Fits  fits  Fit  fits _fit  Fits fits  Fits Fit  fits fit  Fits  fits  Fit  fits _fit  Fits fits  Fits Fit  fits fit  Fits  fits  Fit  fits _fit  Fits fits  Fits Fit  fits fit  Fits

(输出为无限重复的单词/短语序列,无其他错误日志)

原因分析

最可能原因:--dry-penalty-last-n 32 的值设置过低(仅 32 个 tokens),导致 DRY 惩罚仅在极短的上下文窗口内生效,无法有效抑制长序列重复。根据社区建议,DRY 采样器设计上可以处理更长的上下文,建议将该参数设置为 -1(使用全上下文)或至少数千 tokens,以产生显著效果。

可能原因(参数权衡):DRY 惩罚的实际效果取决于 dry_multiplier × dry_base^(seq_len - dry_allowed_length),而不仅仅是 dry-multiplier。虽然用户 multiplier 设置较高(4~10),但 dry-base 为 1.75,且 dry-penalty-last-n 极小,可能导致整体惩罚强度不足。社区指出,multiplier 低于 0.8 时 “无效” 的说法仅适用于 base=1.75 的默认场景,通过调整 base(如 2.0~3.0)可在较低 multiplier 下获得更强惩罚。

环境排查

  • 确认 llama.cpp 版本:6081(d31192b4),编译工具 GCC 15.1.1。
  • 确认 CUDA 环境和显卡:NVIDIA GeForce RTX 4090 Laptop GPU。
  • 确认模型类型:Qwen3 7B Q4_K_M 的 GGUF 文件(POIROT-ECE),属于 merge 模型。
  • 确认启动参数中 --dry-penalty-last-n 的值(当前为 32)。
  • 确认 --dry-base--dry-multiplier 的组合(base=1.75, multiplier=4~10)。

解决步骤

  1. 调整 --dry-penalty-last-n 参数:将其设置为 -1(表示使用整个上下文长度)或至少数千 tokens(如 --dry-penalty-last-n 8192)。这是社区反馈中最优先尝试的方案。
  2. 调整 DRY 参数组合:在保持或增大 dry-penalty-last-n 后,可尝试降低 multiplier 并提高 base(如 --dry-multiplier 0.8 --dry-base 2.0),以得到更强的整体惩罚效果。更激进的组合如 --dry-multiplier 0.6 --dry-base 2.5 也可在测试中尝试。
  3. 验证其他采样器顺序:确保 --samplers 列表中 DRY 采样器的位置正确(当前为第二个,在 penalties 之后,top_n_sigma 之前)。如果问题仍存在,可尝试将 DRY 移至更靠前或靠后的位置,但无明确证据表明此顺序有误。
  4. 使用默认 DRY 参数对照测试:尝试 oobabooga 的原始推荐组合:--dry-multiplier 0.8 --dry-base 1.75(配合较大的 dry-penalty-last-n),观察是否仍有重复问题。

验证方法

执行相同的启动命令(仅修改 --dry-penalty-last-n 为 -1 或较大值),并生成多个 prompt 测试输出。如果模型不再出现无限重复单个单词/短语的现象,且文本内容符合预期,则问题解决。若仍有轻微重复,进一步调整 --dry-base--dry-multiplier 的组合。

参考来源

ggml-org/llama.cpp #15066

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 11173

发表回复

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