tests/models/sam_hq/test_modeling_sam_hq.py::SamHQModelIntegrationTest may fail since a lot of cases are lack of set_seed()

用户在 Hugging Face Transformers 库中运行 SAM-HQ 模型的集成测试(非单元测试)时触发问题。测试命令为 pytest tests/models/sam_hq/test_modeling_sam_hq.py::SamHQModelIntegrationTest ,预期所

快速结论:该报错发生在运行 SAM-HQ 模型集成测试时,由于权重加载 bug 导致 `positional_embedding` 被随机初始化,造成测试结果不稳定。优先排查 `_keys_to_ignore_on_load_missing` 是否被错误保留在模型配置中。

问题场景

用户在 Hugging Face Transformers 库中运行 SAM-HQ 模型的集成测试(非单元测试)时触发问题。测试命令为 pytest tests/models/sam_hq/test_modeling_sam_hq.py::SamHQModelIntegrationTest,预期所有 CUDA 测试通过,实际结果为 11 失败、3 通过。

报错原文

tests/models/sam_hq/test_modeling_sam_hq.py::SamHQModelIntegrationTest may fail since a lot of cases are lack of set_seed()

pytest tests/models/sam_hq/test_modeling_sam_hq.py::SamHQModelIntegrationTest

actual: 11 failed, 3 passed

原因分析

可能有两个层面的原因:

  • 表面原因:`positional_embedding` 在模型加载时使用 torch.randn() 随机初始化,且被添加到 _keys_to_ignore_on_load_missing 列表中,导致每次测试的输出结果不一致(flaky)。
  • 根本原因(已确认):提交 0b369802cf 移除了 _tied_weights_keys(正确操作),但错误地保留了 _keys_to_ignore_on_load_missing,导致 prompt_encoder.shared_embedding.positional_embedding 无法从 checkpoint 加载,而是每次随机初始化。

此问题也可能会影响 tests/models/sam/test_modeling_sam.py 中的类似测试。

环境排查

  • 确认 Transformers 版本为 latest main 分支(即包含提交 0b369802cf 的版本)
  • 确认测试运行时是否使用了 CUDA 设备(GPU)
  • 检查模型配置文件中的 _keys_to_ignore_on_load_missing 是否包含 prompt_encoder.shared_embedding.positional_embedding

解决步骤

  1. 首选方案(已由 PR #43463 修复):从模型配置中移除 _keys_to_ignore_on_load_missing,确保 positional_embedding 能够从 checkpoint 正常加载,而非随机初始化。这是正确的修复方式——从 checkpoint 加载权重,而非用 set_seed() 掩盖随机初始化问题。
  2. 临时方案(PR #43211 的中间尝试):在测试类的 setUp() 方法中添加 set_seed(0),强制每次测试使用相同的随机种子。该方案符合 KISS 和 DRY 原则,仅需 8 行代码变更,但未被采用为最终修复。
  3. 如果遇到类似问题但无法立即更新 Transformers 版本,可先尝试方案 2 作为临时工作区。

验证方法

  1. 更新 Transformers 到包含 PR #43463 或 #43420 修复的版本。
  2. 重新运行测试命令:pytest tests/models/sam_hq/test_modeling_sam_hq.py::SamHQModelIntegrationTest
  3. 确认所有测试通过,输出无随机性波动(即使多次运行结果也应一致)。
  4. 可选:验证 SAM(非 HQ)模型的类似测试 tests/models/sam/test_modeling_sam.py 是否也通过。

参考来源

huggingface/transformers #42890

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16235

发表回复

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