Prhub

#22150 Fix flaky test_load_weights_from_remote_instance in CI

原始 PR 作者 hnyls2002 合并时间 2026-04-05 22:46 文件变更 1 提交数 4 评论 24 代码增减 +2 / -3

执行摘要

修复 CI 中 test_load_weights_from_remote_instance 测试因 transfer_engine 后端挂起的不稳定问题。

根据PR body和评论,原始CI不稳定性是因为test_load_weights_from_remote_instance测试中random.choice随机选择'transfer_engine'后端,该后端在Engine模式下存在bug,导致rank 1永不完成。ShangmingCai指出根本原因是'engine server doesn't need to start the bootstrap server anymore after refactoring',因此需要设置remote_instance_weight_loader_start_seed_via_transfer_engine为false。

建议工程师精读此PR,了解CI不稳定性根因和修复策略。重点关注remote_instance_weight_loader_start_seed_via_transfer_engine参数的作用,以及测试中随机行为的管理。对于技术管理者,此PR展示了快速修复CI问题的有效方法,但需注意后续测试重构的必要性。

讨论亮点

review中gemini-code-assist[bot]指出debug代码(如time.sleep(30))必须移除以避免性能影响,并建议恢复随机选择以保持测试覆盖率。ShangmingCai在评论中确认根本原因并应用修复,同时批准PR。决策结论是移除debug代码并设置参数为False,但测试随机行为暂时保留以待后续重构。

实现拆解

修改仅涉及一个文件test/registered/distributed/test_load_weights_from_remote_instance.py。关键改动点包括:1) 在init_process_dst函数中,将remote_instance_weight_loader_start_seed_via_transfer_engine从条件判断改为硬编码False;2) 移除与transfer_engine相关的条件逻辑。此外,在测试函数中保留了TODO注释,计划未来重构以减少随机行为。

文件 模块 状态 重要度
test/registered/distributed/test_load_weights_from_remote_instance.py testing modified 5.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

init_process_dst test_load_weights_from_remote_instance

评论区精华

debug 代码移除 测试

gemini-code-assist[bot] 指出 debug 代码如 time.sleep(30) 必须移除,以避免性能影响和遵守编码规范。

结论:debug 代码在最终提交中被 revert,确保代码清洁。 · 已解决

测试覆盖率 测试

gemini-code-assist[bot] 建议恢复随机选择以保持测试覆盖率,但 PR 中暂时 hardcode 了参数。

结论:TODO 注释添加,计划未来重构测试以减少随机行为。 · pending

风险与影响

风险包括:1) 测试覆盖率降低,因为hardcode了参数设置,可能掩盖其他后端问题;2) 如果没有彻底移除debug代码(如model_runner.py中的sleep),可能导致性能下降;3) 对transfer_engine后端的根本问题未深入修复,仅通过参数规避。具体到文件,test_load_weights_from_remote_instance.py的修改可能影响其他测试场景。

对用户无直接影响,因为变更仅涉及内部CI测试。对系统,修复了CI不稳定性,提升测试成功率,减少资源浪费。对团队,提高开发效率,避免因flaky测试导致的CI失败和调试时间。影响范围限于分布式权重加载测试,程度中等。

缺少测试覆盖 硬编码参数 未彻底修复后端 bug

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

本PR通过将remote_instance_weight_loader_start_seed_via_transfer_engine参数硬编码为False,修复了CI中test_load_weights_from_remote_instance测试因transfer_engine后端导致的挂起问题,提升了测试稳定性和CI可靠性。变更简单直接,但揭示了后端重构后的配置不一致性。

功能与动机

CI中分布式权重加载测试间歇性失败,原因是测试随机选择transfer_engine后端,而该后端在Engine模式下存在bug,导致rank 1初始化时挂起。根据开发者ShangmingCai的评论:"The root cause is that the engine server doesn't need to start the bootstrap server anymore after refactoring",因此需要调整参数设置以避免不必要的服务器启动。

实现拆解

仅修改了test/registered/distributed/test_load_weights_from_remote_instance.py文件:

  • init_process_dst函数中,将remote_instance_weight_loader_start_seed_via_transfer_engine从基于后端的条件判断改为固定False
    python remote_instance_weight_loader_start_seed_via_transfer_engine=False,
  • 移除了原有的条件逻辑,简化了代码。
  • 在测试函数中添加了TODO注释,计划未来重构以减少随机行为。

评论区精华

  • debug代码移除:gemini-code-assist[bot]指出在model_runner.py中添加的time.sleep(30)必须移除,以免影响性能。最终提交中该代码已被revert。
  • 测试覆盖率:reviewer建议恢复随机选择以保持覆盖,但PR中暂时hardcode参数,并添加TODO注释:"refactor this test to have less random behavior"。

风险与影响

  • 风险:硬编码参数可能降低测试覆盖率,掩盖transfer_engine后端的其他问题;如果debug代码未彻底移除,可能导致性能下降。
  • 影响:对用户无直接影响,但修复了CI不稳定性,提升团队开发效率;测试资源浪费减少,CI成功率提高。

关联脉络

本PR与近期多个CI测试修复PR相关,如PR #22140(修复夜间测试)和PR #22137(移除不稳定测试),共同反映了团队对提升CI稳定性的持续努力。这些变更凸显了在重构后保持配置一致性和测试可靠性的重要性。

参与讨论