ValueError: You have modified the pretrained model configuration to control generation We detected the following values set – {‘suppress_tokens’: [1, 2, 7, 8, 9, …]}. This strategy to contro

该报错通常出现在直接调用 WhisperForConditionalGeneration.generate() 、且没有显式传入 generation_config 的场景。优先排查 transformers 是否处于 #48282 之后的版本,以及模型 config.json 中是否带有 supp

快速结论:该报错通常出现在直接调用 WhisperForConditionalGeneration.generate()、且没有显式传入 generation_config 的场景。优先排查 transformers 是否处于 #48282 之后的版本,以及模型 config.json 中是否带有 suppress_tokens。

适用环境:Issue 中确认的环境为:transformers main(33ab420a77,2026-10-09),首个坏提交 d4f69a869d(#48282);Python 3.10;torch 2.11.0;CPU 可复现,CUDA(A10G)也可复现。

最快修复方案:暂无确认的一步修复方案;Issue 中给出的可优先尝试方案是:在 _get_generation_parameters 中把配置类声明过的所有字段都视为默认值处理(例如跳过 {f.name for f in dataclasses.fields(self)} 中的键),恢复 #48282 之前的行为。

注意事项:该修复属于 Issue 作者提出的可能修复方向,不保证即最终合并实现;回退或修改 transformers 源码前建议先确认版本与提交,避免引入其他生成参数检查行为的变化。

问题场景

用户使用 transformers 加载原始 openai/whisper-* 检查点,例如 openai/whisper-tiny,并直接调用 model.generate(...),没有传入自定义 generation_config。在首次出现问题的提交 d4f69a869d(#48282)及之后版本中,即使代码里没有修改任何配置,也会在 generate() 阶段抛出该异常。

报错原文

ValueError: You have modified the pretrained model configuration to control generation We detected the following values set - {'suppress_tokens': [1, 2, 7, 8, 9, ...]}. This strategy to control generation is not supported anymore. Please use and modify `model.generation_config` ...

原因分析

最可能的原因是 PreTrainedConfig._get_generation_parameters 对“配置字段默认值”的判断方式在 #48282 后发生了变化。此前默认值相当于 self.__class__().to_dict(),包含所有配置字段;#48282 之后改为 self.default_config_fields(),只保留默认值不是 None 的字段。

WhisperConfig.suppress_tokens 的默认值为 None,而原始 openai/whisper-* 仓库的 config.json 中设置了 suppress_tokens。因此该值被误判为用户修改,导致没有显式传入 generation_config 的 generate() 调用触发异常。

任何其他在配置类中声明了生成参数字段、默认值为 None、且在 config.json 中被设置的配置,也可能受到同样影响。

环境排查

  • 确认 transformers 版本或提交:问题从 d4f69a869d(#48282)开始出现,Issue 正文提到 transformers main at 33ab420a77 可复现。
  • 确认 Python 版本:Issue 中为 Python 3.10。
  • 确认 PyTorch 版本:Issue 中为 torch 2.11.0。
  • 确认推理设备:CPU 和 CUDA(A10G)均复现。
  • 确认模型:原始 openai/whisper-* 检查点,其 config.json 包含 suppress_tokens。
  • 确认调用方式:是否在未传入 generation_config 的情况下直接调用 generate()。

解决步骤

  1. 先确认当前 transformers 是否位于 d4f69a869d 或之后。如果否,该报错不属于本 Issue 覆盖范围。
  2. 检查所用 Whisper 检查点的 config.json 中是否存在 suppress_tokens。原始 openai/whisper-* 仓库普遍会设置该值。
  3. 可优先尝试 Issue 中建议的修复方向:让 _get_generation_parameters 把配置类声明过的所有字段都视为默认值,例如跳过 {f.name for f in dataclasses.fields(self)} 中的键,避免把 suppress_tokens 这类 None 默认字段误判为用户修改。
  4. 如果无法修改源码,可临时回退到 d4f69a869d 之前的版本,或在调用 generate() 时显式传入合适的 generation_config,使检查分支不触发。此做法在 Issue 中没有作为已验证首选方案给出,只属于规避思路。
  5. 关注 #48282、#49269 以及后续修复 PR 的合并状态,确认修复是否进入所使用的版本。

验证方法

使用 Issue 中的最小复现代码验证:加载 openai/whisper-tiny 后直接调用 model.generate(torch.zeros(1, 80, 3000), max_new_tokens=4)。在 d4f69a869d 之前会返回 tensor([[291]]);修复后应恢复为不抛异常并能正常返回生成结果。也可检查 _get_generation_parameters 是否不再将 checkpoint 中原本就存在的 suppress_tokens 报告为用户修改。

参考来源

huggingface/transformers #49456

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28726

发表回复

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