执行摘要
- 一句话:为 NPU 扩散模型新增 7 个测试用例与性能基线
- 推荐动作:建议合并此 PR,但后续应关注
perf_baselines_npu.json 的基线稳定性,并计划恢复 COSMOS3_NANO 的 NPU 测试。重构后的采样参数提取模式值得推广到其他共享配置中。
功能与动机
PR 作者在描述中指出『需要扩展测试覆盖』(原文:Need to extend test coverage.),旨在提升 NPU 平台扩散模型测试的覆盖范围,确保新增模型在 NPU 上的基本功能与性能可被 CI 持续验证。
实现拆解
- 引入 use_modelscope 辅助函数并新增测试用例:在
testcase_configs_npu.py 中将原有手动拼接路径统一为 use_modelscope 调用,降低路径定义冗余;随后在 ONE_NPU_CASES 和 TWO_NPU_CASES 列表中新增 ERNIE-Image、GLM-Image、FLUX.2-klein-4B、Z-Image、JoyAI-Image-Edit、LTX-2、MOVA-360p 的测试用例,覆盖 T2I、TI2I、TI2V 等多种任务类型。
- 提取公共采样参数:在
testcase_configs.py 中新增 COSMOS3_NANO_CI_sampling_params 常量,将原来内联在 GPU 测试用例中的参数提取出来,便于多平台复用。
- 重构 GPU 测试配置:在
gpu_cases.py 中引用新常量替换内联定义,去除重复。
- 更新 NPU 性能基线:在
perf_baselines_npu.json 中为新增的 ERNIE-Image、GLM-Image、Z-Image 等模型添加端到端耗时、去噪步耗时等基线数据,作为 CI 性能回归检测的依据。
- 更新 GT commit 并移除失败用例:在
test_utils.py 中更新 NPU 使用的测试数据基线提交 ID;根据提交历史,由于运行时失败,移除了 COSMOS3_NANO 的 NPU 测试。
关键文件:
python/sglang/multimodal_gen/test/server/ascend/testcase_configs_npu.py(模块 NPU 测试配置;类别 test;类型 test-coverage;符号 use_modelscope): 主要修改:引入 use_modelscope 辅助函数,新增 7 个 NPU 扩散测试用例(ERNIE-Image、GLM-Image、FLUX.2-klein-4B、Z-Image、JoyAI-Image-Edit、LTX-2、MOVA-360p)
python/sglang/multimodal_gen/test/server/ascend/perf_baselines_npu.json(模块 性能基线;类别 test;类型 test-coverage): 为新增的 NPU 扩散测试添加性能基线数据(ernie_image_t2i_1npu、glm_image_t2i_1npu、z_image_t2i_1npu 等),并调整 MOVA 用例名称
python/sglang/multimodal_gen/test/server/testcase_configs.py(模块 测试配置;类别 test;类型 test-coverage): 新增 COSMOS3_NANO_CI_sampling_params 公共常量,供 GPU 与 NPU 测试共享
python/sglang/multimodal_gen/test/server/gpu_cases.py(模块 GPU 测试;类别 test;类型 test-coverage): 引用新常量 COSMOS3_NANO_CI_sampling_params 替换内联参数,简化代码
python/sglang/multimodal_gen/test/test_utils.py(模块 测试工具;类别 test;类型 test-coverage): 更新 NPU 测试数据基线 commit ID,确保测试数据与新增模型匹配
关键符号:use_modelscope
关键源码片段
python/sglang/multimodal_gen/test/server/ascend/testcase_configs_npu.py
主要修改:引入 use_modelscope 辅助函数,新增 7 个 NPU 扩散测试用例(ERNIE-Image、GLM-Image、FLUX.2-klein-4B、Z-Image、JoyAI-Image-Edit、LTX-2、MOVA-360p)
import os
from sglang.multimodal_gen.test.server.testcase_configs import (
DiffusionSamplingParams,
DiffusionServerArgs,
DiffusionTestCase,
T2I_sampling_params,
)
# Modelscope 模型缓存根目录
MODELSCOPE_MODEL_WEIGHTS_DIR = "/root/.cache/modelscope/hub/models/"
def use_modelscope(name: str):
"""返回 modelscope 模型权重完整路径"""
return os.path.join(MODELSCOPE_MODEL_WEIGHTS_DIR, name)
# 定义所有模型权重路径,统一通过 use_modelscope 生成
ERNIE_IMAGE_WEIGHTS_PATH = use_modelscope("PaddlePaddle/ERNIE-Image")
FLUX_1_DEV_WEIGHTS_PATH = use_modelscope("black-forest-labs/FLUX.1-dev")
# ... 其他路径定义 ...
EXTRAS_DISABLE_WARMUP = ["--warmup-mode", "request"]
# 单 NPU 测试用例
ONE_NPU_CASES: list[DiffusionTestCase] = [
# ERNIE-Image T2I 测试,关闭一致性校验
DiffusionTestCase(
"ernie_image_t2i_1npu",
DiffusionServerArgs(model_path=ERNIE_IMAGE_WEIGHTS_PATH,
extras=EXTRAS_DISABLE_WARMUP),
T2I_sampling_params,
run_consistency_check=False,
),
# FLUX.1-dev T2I 测试(保留旧用例)
DiffusionTestCase(
"flux_image_t2i_npu",
DiffusionServerArgs(model_path=FLUX_1_DEV_WEIGHTS_PATH,
extras=EXTRAS_DISABLE_WARMUP),
T2I_sampling_params,
),
# ... 其他新用例 ...
]
评论区精华
PR 提交后 CI 在 multimodal-gen-test-1-b200 任务中失败,但作者和审核者 ping1jing2 确认失败与 PR 无关(PR body 中说明『...... it isn't connected with this PR.』),审核者通过 /tag-and-rerun-ci 触发重试后批准合并。
- CI failure unrelated to this PR (other): 审核者批准合并,未要求额外修改。
风险与影响
- 风险:
- 性能基线可靠性:
perf_baselines_npu.json 中的基线数据来自单次运行,若 NPU 环境存在波动可能导致后续 CI 误报性能回归。建议在稳定环境采集多次数据取中位数。
- 覆盖盲区:因运行时失败移除了 COSMOS3_NANO 的 NPU 测试,该模型在 NPU 上的覆盖率暂时缺失。需在模型适配问题解决后重新添加。
- GT commit 更新:
test_utils.py 中 GT commit 变更影响所有 NPU 扩散测试的数据一致性,需确保新 commit 包含正确的预期输出。
- 影响:
- 用户/系统:无用户可见变更,仅影响 CI 测试流水线。NPU 扩散模型的回归检测能力显著增强。
- 团队:为 NPU 团队提供了 7 个新增模型的自动化验证,减少手动测试成本。重构后的
COSMOS3_NANO_CI_sampling_params 可在 GPU 和 NPU 之间共享,提升配置一致性。
- 影响程度:中等正向影响,测试覆盖扩大有助于提前发现回归缺陷。
- 风险标记:基线数据依赖单次运行, COSMOS3_NANO NPU 测试移除, GT commit 变更影响数据一致性
关联脉络
- PR #29403 feat: sync npu nightly test improvements from Ascend testcases: 同为 NPU 测试套件增强,当前 PR 在此基础上进一步增加了扩散模型测试覆盖。
参与讨论