快速结论:当你在 Transformers v5 下加载并生成翻译结果时,如果模型 checkpoint 中本该共享(tied)的两份权重序列化值不一致,v5 会放弃绑定权重并给出警告,导致输出无意义或翻译错误;优先排查权重绑定与 checkpoint 完整性,而不是先怀疑推理代码。
适用环境:Issue 中确认到的环境包括:Transformers 5.3.0.dev0(出问题)与 4.57.6(正常);Python 3.14.2;PyTorch 2.11.0+cu130 (CUDA);GPU 为 NVIDIA RTX 2000 Ada Generation Laptop GPU;Linux 6.8.0-101-generic-x86_64-with-glibc2.39;safetensors 0.7.0;huggingface_hub 1.8.0(v5)与 0.36.2(v4)。Accelerate、DeepSpeed 均未安装;问题在 CPU 和 GPU 下均可复现。以上是 Issue 明确给出的信息,未列出的依赖项不做推断。
最快修复方案:暂无确认的一步修复方案。Issue 中确认的方向是:该模型 checkpoint 本身对同一权重存在两个不同值,v5 不再强行绑定权重,需要在 Hub 上重新保存权重(去掉多余的 lm_head.weight);对单个用户而言,可优先尝试回退到 4.57.6,或在重新导出/校平权重后再用 v5 加载。
注意事项:Issue 中明确说明,如果 checkpoint 确实损坏,框架侧没有可做的修复;直接设置 tie_word_embeddings=False 并不能修好已经出问题的模型,反而会破坏原本正常的模型。是否只有部分 Marian/T5 类模型受影响、以及受影响的模型范围,Issue 中没有给出完整结论,属于待确认范围。
问题场景
用户在 Transformers v5(5.3.0.dev0)下使用 MarianMTModel 加载 Helsinki-NLP 的翻译模型(如 Helsinki-NLP/opus-mt-fr-en、Helsinki-NLP/opus-mt-es-en、Helsinki-NLP/opus-mt-tc-big-cat_oci_spa-en),执行 model.generate(**inputs) 做中英/多语翻译时,得到无意义或错误的翻译输出。相同代码在 4.57.6 下正常。问题在 GPU 和 CPU、以及不同系统/显卡上都可复现。
后续评论指出,同样的问题也可能影响其他 T5 类衍生模型,例如 facebook/nllb-200-distilled-1.3B,以及 MADLAD-MT-3B 相关的 Hub 讨论。
报错原文
[v5] Issues with tied weights on translation models in v5
The tied weights mapping and config for this model specifies to tie model.shared.weight to lm_head.weight, but both are present in the checkpoints with different values, so we will NOT tie them. You should update the config with `tie_word_embeddings=False` to silence this warning.
原因分析
最可能的原因是模型 checkpoint 中同时保存了 lm_head.weight 和 model.shared.weight,而这两个张量的值并不相同。配置里声明了需要绑定这两份权重,但 v5 在加载时检测到值不一致,出于谨慎不再强制绑定(v4 会无条件绑定)。绑定失效后,模型用于解码的权重与你预期的不一致,导致翻译输出异常。
Issue 中维护者用以下方式验证了这一点:读取 pytorch_model.bin 后打印两个权重,可以看到它们数值明显不同。因此这不是单纯的加载路径问题,而是 checkpoint 序列化层面存在冗余且不一致的权重。
环境排查
- 确认 Transformers 版本:出现问题的为 5.3.0.dev0,可对照 4.57.6 是否正常。
- 确认 Python 版本:Issue 中为 3.14.2。
- 确认 PyTorch / CUDA:2.11.0+cu130,实际运行在 CPU 还是 GPU 上。
- 确认
huggingface_hub版本:v5 环境下为 1.8.0,v4 环境下为 0.36.2。 - 确认
safetensors版本:0.7.0。 - 确认加载的 checkpoint 文件内是否同时存在
lm_head.weight与model.shared.weight,且两者值不同。 - 确认问题模型是否为 Marian/T5 系带
tie_word_embeddings的翻译模型。
解决步骤
- 先用维护者提供的检查方式确认 checkpoint 是否真的存在不一致的权重:读取
pytorch_model.bin,分别打印state_dict["lm_head.weight"]与state_dict["model.shared.weight"],比较两者是否相同。 - 如果两份权重值不同,说明该模型 checkpoint 对绑定权重存在冲突,v5 不会强制绑定,输出异常属预期行为,不是加载或推理代码写错。
- 对单个模型,可优先尝试重新导出/重新保存权重,只保留其中一份权重(Issue 中建议去掉多余的
lm_head.weight),再上传到 Hub。报告者使用convert_marian_to_pytorch.py重新转换原始 Marian 模型后,确认state_dict["lm_head.weight"] == state_dict["model.shared.weight"],并进行少量翻译测试正常。 - 如果暂时无法重新导出模型,可优先尝试回退到 4.57.6 运行同一脚本作为临时规避。
- 不要指望用
tie_word_embeddings=False解决问题:Issue 中报告者实测该设置不能修复已出问题的模型,还会让原本正常的模型出错。 - 若受影响的模型范围较广,Issue 建议把问题反馈给 OPUS / 模型发布方,由其批量重新保存权重,而不是逐个提 PR。
验证方法
按上述方式检查后,如果 state_dict["lm_head.weight"] 与 state_dict["model.shared.weight"] 的值一致,并且用 v5 重新做同一组翻译时能得到接近预期的输出(例如 Bonjour → Hello),即可认为该模型的绑定权重问题已解决。Issue 中报告者重新转换 cat+oci+spa 模型后,少量翻译结果正常,即属于这种验证结果。
参考来源
huggingface/transformers #45005
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![How to install faster-whisper [guide]](https://www.chat-gpts.plus/wp-content/uploads/2026/10/1240-4be1f140-768x403.jpg)
![[Bug]: OpenAI-compatible Embeddings API intermittently crashes with multimodal cache assertion (`Expected a cached item for mm_hash`) on Qwe](https://www.chat-gpts.plus/wp-content/uploads/2026/10/33865-8d61767c-768x403.jpg)
