快速结论:该报错通常出现在直接调用 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 正文提到transformersmain 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()。
解决步骤
- 先确认当前
transformers是否位于 d4f69a869d 或之后。如果否,该报错不属于本 Issue 覆盖范围。 - 检查所用 Whisper 检查点的
config.json中是否存在suppress_tokens。原始openai/whisper-*仓库普遍会设置该值。 - 可优先尝试 Issue 中建议的修复方向:让
_get_generation_parameters把配置类声明过的所有字段都视为默认值,例如跳过{f.name for f in dataclasses.fields(self)}中的键,避免把suppress_tokens这类None默认字段误判为用户修改。 - 如果无法修改源码,可临时回退到 d4f69a869d 之前的版本,或在调用
generate()时显式传入合适的generation_config,使检查分支不触发。此做法在 Issue 中没有作为已验证首选方案给出,只属于规避思路。 - 关注 #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
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


