Prhub

#23517 [diffusion] CI: do not retry consistency failures

原始 PR 作者 mickqian 合并时间 2026-04-23 12:39 文件变更 1 提交数 1 评论 3 代码增减 +16 / -0

执行摘要

修改扩散模型测试套件,一致性检查失败时不再重试。

PR标题和提交信息直接表明动机是“CI: do not retry consistency failures”。虽然没有详细的PR body描述,但从变更内容可以推断,目的是防止CI在遇到扩散模型测试中的一致性检查失败(例如“Consistency check failed for”或“GT not found for”)时进行重试,因为这些失败通常不是由瞬态问题(如网络超时、内存不足)引起的,重试无法解决问题,反而浪费CI资源。

该PR变更简单直接,适合快速浏览以了解测试重试策略的调整。值得关注的设计决策是:将一致性检查失败明确排除在重试逻辑之外,这反映了对失败类型的分类处理(瞬态 vs. 非瞬态),有助于优化CI资源使用。

讨论亮点

该PR没有review评论或讨论,表明变更直接、无争议,可能由熟悉该模块的维护者快速合并。

实现拆解

  1. 新增一致性检查失败检测函数:在python/sglang/multimodal_gen/test/run_suite.py中新增_is_consistency_failure函数,通过解析测试输出摘要和完整输出来识别包含特定错误模式(如“Consistency check failed for”、“GT not found for”、“--- MISSING GROUND TRUTH DETECTED ---”)的失败。
  2. 修改可重试失败判断逻辑:在同一个文件的_is_retryable_failure函数开头添加条件检查,如果_is_consistency_failure返回True,则直接返回False,表示该失败不可重试。这确保了CI不会对一致性检查失败进行重试。
  3. 测试配套调整:此变更属于测试基础设施的调整,没有修改核心模型或运行时逻辑,仅影响测试运行时的重试行为。
文件 模块 状态 重要度
python/sglang/multimodal_gen/test/run_suite.py 扩散测试 modified 5.22

关键符号

_is_consistency_failure _is_retryable_failure

关键源码片段

python/sglang/multimodal_gen/test/run_suite.py test-coverage

这是唯一被修改的文件,包含了测试套件中重试逻辑的核心调整,直接影响 CI 对扩散模型测试失败的处理方式。

def _is_consistency_failure(full_output: str) -> bool:
    """
    检测测试输出中是否包含一致性检查失败的错误信息。
    这类失败通常是由于缺少基准真值(Ground Truth)或数据不一致引起的,
    不属于瞬态问题(如OOM、超时),因此不应在CI中重试。
    """
    summary_lines = _extract_short_test_summary(full_output)
    for line in summary_lines:
        if "Consistency check failed for" in line or "GT not found for" in line:
            return True # 在摘要行中找到一致性失败模式
​
    return (
        "Consistency check failed for " in full_output
        or "GT not found for " in full_output
        or "--- MISSING GROUND TRUTH DETECTED ---" in full_output
    ) # 在完整输出中检查其他相关模式
​
​
def _is_retryable_failure(full_output: str) -> bool:
    """
    判断测试失败是否可重试。如果是一致性检查失败,则直接返回False,
    避免CI对非瞬态问题进行无效重试。
    """
    if _is_consistency_failure(full_output):
        return False # 一致性失败不可重试
​
    # 原有的重试逻辑保持不变,处理其他类型的失败(如性能断言、OOM 等)
    summary_lines = _extract_short_test_summary(full_output)
    is_perf_assertion = (
        "multimodal_gen/test/server/test_server_utils.py" in full_output
        and "AssertionError" in full_output
    )
    is_aggregated_retryable_failure = _summary_has_retryable_failure(summary_lines)
    is_flaky_ci_assertion = (
        "SafetensorError" in full_output
        or "FileNotFoundError" in full_output
        or "TimeoutError" in full_output
    )
    is_oom_error = (
        "out of memory" in full_output.lower() or "oom killer" in full_output.lower()
    )
​
    return (
        is_perf_assertion
        or is_aggregated_retryable_failure
        or is_flaky_ci_assertion
        or is_oom_error
    )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

技术风险较低

  • 回归风险:修改仅限于测试重试逻辑,不影响扩散模型的核心功能或性能。但如果_is_consistency_failure函数误判(例如将其他类型的失败错误地标记为一致性失败),可能导致本应重试的瞬态失败被跳过,增加CI假阴性风险。不过,函数使用的错误字符串模式(如“Consistency check failed for”)相对特定,误判可能性较小。
  • 兼容性:无兼容性问题,因为不涉及API或数据格式变更。
  • 性能:无性能影响,仅增加少量字符串匹配开销,在测试上下文中可忽略。

影响范围有限但直接

  • 对用户:无直接影响,因为这是内部CI逻辑调整。
  • 对系统:优化CI行为,减少对非瞬态失败的无意义重试,可能缩短CI运行时间并节省计算资源。
  • 对团队:提高CI效率,避免因一致性检查失败导致的重复测试运行,但需要确保开发人员理解此类失败不会被自动重试,可能需要手动干预。
误判风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论