Prhub

#22810 [diffusion] CI: refactor diffusion ci and reduce redundancy

原始 PR 作者 mickqian 合并时间 2026-04-15 10:12 文件变更 18 提交数 10 评论 3 代码增减 +306 / -464

执行摘要

重构扩散模型 CI 测试,删除冗余文件并合并测试套件以提升效率。

PR body中明确说明动机为"streamline component accuracy tests"和"always check consistency and perf, no fail-fast",即简化组件准确性测试并确保始终验证一致性和性能,避免因单个测试失败而中断整个套件。

建议技术管理者关注此PR以了解扩散模型测试基础设施的演进方向,工程师可精读testcase_configs.py中的自动模态推断设计和test_server_common.py中的失败聚合机制,这些设计决策有助于提升测试健壮性和可维护性。

讨论亮点

无review评论,本次PR讨论较少,主要变更由作者自行推进和合并。

实现拆解

  1. 重构测试配置核心文件:修改python/sglang/multimodal_gen/test/server/testcase_configs.py,在DiffusionServerArgs类中移除硬编码的modality默认值,改为通过新增的_infer_modality_from_model_path函数自动推断模型模态(图像、视频或3D),并引入lru_cache提升性能。
  2. 合并和删除冗余测试文件:删除test_accuracy_2_gpu_a.pytest_accuracy_2_gpu_b.py,将原有2-GPU准确性测试用例整合到新文件;重命名test_accuracy_1_gpu_a.pytest_accuracy_1_gpu_b.pytest_component_accuracy_1_gpu.pytest_component_accuracy_2_gpu.py,统一命名规范。
  3. 新增准确性测试用例配置:创建accuracy_testcase_configs.py文件,定义ACCURACY_ONE_GPU_CASE_IDSACCURACY_TWO_GPU_CASE_IDS常量,并通过_select_accuracy_cases函数筛选启用的测试用例,减少配置分散。
  4. 优化测试执行逻辑:修改test_server_common.py,添加run_case_check函数和failures列表来聚合多个检查点的失败信息,避免单点失败导致整体测试中断,同时新增validate_mesh_output辅助函数以增强3D模型验证。
  5. 调整CI工作流和脚本:更新.github/workflows/pr-test-multimodal-gen.yml简化测试触发逻辑,并修改scripts/ci/utils/diffusion/diffusion_case_parser.py中的_extract_case_ids_from_list函数以适配新配置结构,确保CI管道与重构后的测试套件兼容。
文件 模块 状态 重要度
python/sglang/multimodal_gen/test/server/testcase_configs.py 测试配置 modified 7.29
python/sglang/multimodal_gen/test/server/test_server_common.py 测试公共 modified 6.43
python/sglang/multimodal_gen/test/server/accuracy_testcase_configs.py 准确性配置 added 6.39
.github/workflows/pr-test-multimodal-gen.yml CI 工作流 modified 5.04
python/sglang/multimodal_gen/test/server/test_accuracy_2_gpu_a.py 准确性测试 removed 6.42

关键符号

_infer_modality_from_model_path _select_accuracy_cases run_case_check validate_mesh_output _extract_case_ids_from_list

关键源码片段

python/sglang/multimodal_gen/test/server/testcase_configs.py test-coverage

核心测试配置文件,修改了 DiffusionServerArgs 类以支持自动模态推断,并新增缓存函数,影响所有扩散模型测试用例的配置解析。

@lru_cache(maxsize=None)
def _infer_modality_from_model_path(model_path: str) -> str:
    """根据模型路径自动推断模态类型(图像、视频或3D)。"""
    model_info = get_model_info(model_path) # 从注册表获取模型信息
    if model_info is None:
        raise ValueError(f"无法解析模型信息: {model_path!r}")
​
    task_type = model_info.pipeline_config_cls.task_type # 获取任务类型
    if task_type == ModelTaskType.I2M:
        return "3d" # 3D 模型任务
    if task_type.is_image_gen():
        return "image" # 图像生成任务
    return "video" # 默认为视频生成任务
python/sglang/multimodal_gen/test/server/test_server_common.py test-coverage

测试公共逻辑文件,引入 run_case_check 函数聚合多个验证步骤的失败信息,避免单点失败导致测试中断,提升测试健壮性。

def run_case_check(name: str, fn: Callable[[], None]) -> None:
    """运行单个检查点,捕获异常并记录失败信息。"""
    try:
        fn() # 执行检查函数
    except BaseException as exc:
        if isinstance(exc, (KeyboardInterrupt, SystemExit)):
            raise # 重新抛出中断异常
        failures.append((name, str(exc))) # 记录失败名称和消息

评论区精华

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

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

风险与影响

技术风险包括:

  1. 回归风险:删除或合并测试文件可能意外移除某些测试覆盖,导致未检测到的功能退化;例如,test_accuracy_2_gpu_a.py的移除需确保其用例已迁移到新位置。
  2. 配置错误风险:自动推断模态的逻辑依赖get_model_info函数,若模型信息解析失败可能引发运行时异常。
  3. 性能影响lru_cache的使用可能引入内存开销,但对于频繁调用的模型路径推断是合理权衡。
  4. CI稳定性:工作流简化可能影响测试触发条件,需验证CI任务仍能正确执行所有必要测试。

影响范围:

  1. 用户影响:对终端用户透明,主要影响开发者和CI流水线;测试执行更高效,但需注意重构后测试报告格式变化。
  2. 系统影响:提升扩散模块测试的维护性和可读性,减少冗余代码,长期利于团队协作;CI执行时间可能因测试合并而略有优化。
  3. 团队影响:工程师需适应新的测试文件结构和配置方式,但总体降低了测试套件复杂度。
测试覆盖变更 配置解析风险 CI 稳定性影响

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论