From 1c23954cb9e7073525f4306ca4c59f852f1d5c97 Mon Sep 17 00:00:00 2001 From: Elizaveta Martirosian Date: Tue, 7 Jul 2026 00:40:26 +0300 Subject: [PATCH] [NPU] Add new diffusion tests (#29331) Co-authored-by: Elizaveta Martirosian --- .../server/ascend/perf_baselines_npu.json | 375 ++++++++++++++++++ .../server/ascend/testcase_configs_npu.py | 103 ++++- .../multimodal_gen/test/server/gpu_cases.py | 17 +- .../test/server/testcase_configs.py | 16 + .../sglang/multimodal_gen/test/test_utils.py | 2 +- 5 files changed, 486 insertions(+), 27 deletions(-) diff --git a/python/sglang/multimodal_gen/test/server/ascend/perf_baselines_npu.json b/python/sglang/multimodal_gen/test/server/ascend/perf_baselines_npu.json index 0706a3f5e..f2076b1f7 100644 --- a/python/sglang/multimodal_gen/test/server/ascend/perf_baselines_npu.json +++ b/python/sglang/multimodal_gen/test/server/ascend/perf_baselines_npu.json @@ -323,6 +323,381 @@ "expected_e2e_ms": 34362.34, "expected_avg_denoise_ms": 610.41, "expected_median_denoise_ms": 615.39 + }, + "ernie_image_t2i_1npu": { + "stages_ms": { + "InputValidationStage": 0.07, + "PromptEnhancementStage": 8787.2, + "TextEncodingStage": 35.87, + "TimestepPreparationStage": 32.74, + "LatentPreparationStage": 0.2, + "DenoisingStage": 47471.93, + "DecodingStage": 42.24 + }, + "denoise_step_ms": { + "0": 93.3, + "1": 229.78, + "2": 982.46, + "3": 984.1, + "4": 982.02, + "5": 982.42, + "6": 982.01, + "7": 982.12, + "8": 981.92, + "9": 982.08, + "10": 982.39, + "11": 982.14, + "12": 982.37, + "13": 982.06, + "14": 982.0, + "15": 982.53, + "16": 981.83, + "17": 982.41, + "18": 981.97, + "19": 981.93, + "20": 982.14, + "21": 981.71, + "22": 982.36, + "23": 981.97, + "24": 981.92, + "25": 982.12, + "26": 981.87, + "27": 982.38, + "28": 981.92, + "29": 981.95, + "30": 982.28, + "31": 981.94, + "32": 981.95, + "33": 982.2, + "34": 981.71, + "35": 982.29, + "36": 981.84, + "37": 982.2, + "38": 981.98, + "39": 981.93, + "40": 982.3, + "41": 982.27, + "42": 982.15, + "43": 981.96, + "44": 981.82, + "45": 982.11, + "46": 981.79, + "47": 982.17, + "48": 982.01, + "49": 981.89 + }, + "expected_e2e_ms": 56379.07, + "expected_avg_denoise_ms": 949.3, + "expected_median_denoise_ms": 982.02 + }, + "glm_image_t2i_1npu": { + "stages_ms": { + "GlmImageAR": 69299.14, + "GlmImageBeforeDenoisingStage": 94.01, + "DenoisingStage": 24325.65, + "DecodingStage": 290.05 + }, + "denoise_step_ms": { + "0": 548.52, + "1": 819.64, + "2": 819.1, + "3": 819.05, + "4": 819.51, + "5": 819.38, + "6": 818.79, + "7": 819.04, + "8": 818.91, + "9": 819.87, + "10": 819.65, + "11": 825.78, + "12": 812.68, + "13": 819.45, + "14": 820.37, + "15": 820.32, + "16": 819.2, + "17": 821.85, + "18": 817.57, + "19": 819.32, + "20": 819.99, + "21": 819.73, + "22": 819.84, + "23": 819.79, + "24": 820.7, + "25": 819.27, + "26": 819.59, + "27": 820.06, + "28": 819.45, + "29": 820.13 + }, + "expected_e2e_ms": 94017.76, + "expected_avg_denoise_ms": 810.55, + "expected_median_denoise_ms": 819.55 + }, + "z_image_t2i_1npu": { + "stages_ms": { + "InputValidationStage": 0.08, + "TextEncodingStage": 246.13, + "LatentPreparationStage": 0.23, + "TimestepPreparationStage": 29.16, + "DenoisingStage": 36649.71, + "DecodingStage": 6.28 + }, + "denoise_step_ms": { + "0": 732.97, + "1": 732.49, + "2": 732.47, + "3": 732.93, + "4": 732.5, + "5": 732.51, + "6": 732.18, + "7": 733.07, + "8": 733.17, + "9": 734.29, + "10": 734.49, + "11": 735.74, + "12": 733.51, + "13": 732.76, + "14": 733.39, + "15": 732.44, + "16": 731.72, + "17": 731.76, + "18": 732.76, + "19": 731.88, + "20": 732.23, + "21": 731.63, + "22": 731.59, + "23": 732.4, + "24": 732.18, + "25": 732.54, + "26": 732.08, + "27": 732.09, + "28": 732.08, + "29": 732.44, + "30": 732.18, + "31": 731.93, + "32": 732.05, + "33": 732.32, + "34": 733.97, + "35": 736.5, + "36": 735.63, + "37": 733.37, + "38": 734.09, + "39": 732.9, + "40": 732.78, + "41": 732.26, + "42": 731.74, + "43": 732.48, + "44": 732.14, + "45": 732.64, + "46": 733.53, + "47": 733.48, + "48": 732.59, + "49": 732.1 + }, + "expected_e2e_ms": 36940.12, + "expected_avg_denoise_ms": 732.82, + "expected_median_denoise_ms": 732.5 + }, + "flux_2_klein_4b_t2i_1npu": { + "stages_ms": { + "InputValidationStage": 0.07, + "TextEncodingStage": 232.96, + "ImageVAEEncodingStage": 0.01, + "LatentPreparationStage": 0.57, + "TimestepPreparationStage": 29.26, + "DenoisingStage": 992.79, + "DecodingStage": 10.76 + }, + "denoise_step_ms": { + "0": 37.78, + "1": 35.77, + "2": 34.34, + "3": 34.91 + }, + "expected_e2e_ms": 1317.11, + "expected_avg_denoise_ms": 35.7, + "expected_median_denoise_ms": 35.34 + }, + "joyai_image_edit_ti2i_1npu": { + "stages_ms": { + "InputValidationStage": 20.04, + "ImageEncodingStage": 1239.81, + "ImageVAEEncodingStage": 370.97, + "LatentPreparationStage": 0.33, + "TimestepPreparationStage": 34.12, + "DenoisingStage": 105471.23, + "DecodingStage": 2762.97 + }, + "denoise_step_ms": { + "0": 229.17, + "1": 2429.69, + "2": 2706.14, + "3": 2707.12, + "4": 2702.84, + "5": 2704.71, + "6": 2704.96, + "7": 2706.45, + "8": 2705.75, + "9": 2703.3, + "10": 2705.13, + "11": 2704.95, + "12": 2704.57, + "13": 2705.43, + "14": 2702.58, + "15": 2705.44, + "16": 2705.74, + "17": 2706.63, + "18": 2705.73, + "19": 2703.79, + "20": 2704.97, + "21": 2707.3, + "22": 2705.92, + "23": 2708.38, + "24": 2703.5, + "25": 2704.63, + "26": 2706.51, + "27": 2704.44, + "28": 2706.82, + "29": 2704.59, + "30": 2704.36, + "31": 2707.21, + "32": 2704.87, + "33": 2708.24, + "34": 2703.86, + "35": 2704.19, + "36": 2706.7, + "37": 2705.72, + "38": 2706.74, + "39": 2704.96 + }, + "expected_e2e_ms": 109909.47, + "expected_avg_denoise_ms": 2636.6, + "expected_median_denoise_ms": 2705.05 + }, + "mova_360p_ti2va_2npu": { + "stages_ms": { + "InputValidationStage": 19.09, + "TextEncodingStage": 512.61, + "ImageVAEEncodingStage": 588.51, + "MOVALatentPreparationStage": 0.34, + "MOVATimestepPreparationStage": 0.52, + "MOVADenoisingStage": 91033.05, + "MOVADecodingStage": 586.86 + }, + "denoise_step_ms": { + "0": 1816.84, + "1": 1818.1, + "2": 1819.39, + "3": 1817.58, + "4": 1820.35, + "5": 1816.92, + "6": 1811.79, + "7": 1826.0, + "8": 1816.3, + "9": 1817.59, + "10": 1816.24, + "11": 1815.25, + "12": 1815.69, + "13": 1817.23, + "14": 1817.59, + "15": 1820.19, + "16": 1820.93, + "17": 1823.82, + "18": 1848.39, + "19": 1819.37, + "20": 1818.51, + "21": 1815.18, + "22": 1821.84, + "23": 1816.08, + "24": 1817.98, + "25": 1817.91, + "26": 1818.12, + "27": 1816.79, + "28": 1815.43, + "29": 1818.44, + "30": 1817.64, + "31": 1818.73, + "32": 1814.81, + "33": 1818.24, + "34": 1817.88, + "35": 1816.15, + "36": 1818.26, + "37": 1814.76, + "38": 1816.17, + "39": 1817.48, + "40": 1817.83, + "41": 1817.71, + "42": 1811.81, + "43": 1820.49, + "44": 1817.3, + "45": 1814.35, + "46": 1820.92, + "47": 1824.75, + "48": 1822.46, + "49": 1822.08 + }, + "expected_e2e_ms": 92840.23, + "expected_avg_denoise_ms": 1818.63, + "expected_median_denoise_ms": 1817.77, + "estimated_full_test_time_s": 175.6 + }, + "ltx_2_ti2va_2npu": { + "stages_ms": { + "InputValidationStage": 3.8, + "TextEncodingStage": 1029.19, + "LTX2TextConnectorStage": 56.3, + "LTX2SigmaPreparationStage": 0.19, + "TimestepPreparationStage": 33.52, + "LTX2AVLatentPreparationStage": 0.45, + "LTX2ImageEncodingStage": 93.32, + "LTX2AVDenoisingStage": 29672.06, + "LTX2AVDecodingStage": 560.9 + }, + "denoise_step_ms": { + "0": 544.81, + "1": 746.36, + "2": 746.01, + "3": 774.46, + "4": 717.7, + "5": 749.83, + "6": 746.58, + "7": 784.74, + "8": 708.78, + "9": 746.72, + "10": 746.38, + "11": 784.14, + "12": 708.74, + "13": 746.85, + "14": 746.57, + "15": 751.14, + "16": 742.59, + "17": 747.19, + "18": 746.26, + "19": 750.58, + "20": 742.55, + "21": 746.34, + "22": 760.44, + "23": 736.36, + "24": 741.97, + "25": 746.3, + "26": 782.28, + "27": 714.3, + "28": 741.96, + "29": 746.25, + "30": 784.82, + "31": 711.85, + "32": 742.0, + "33": 746.24, + "34": 746.13, + "35": 750.84, + "36": 741.81, + "37": 746.2, + "38": 746.08, + "39": 752.12 + }, + "expected_e2e_ms": 31484.37, + "expected_avg_denoise_ms": 741.58, + "expected_median_denoise_ms": 746.28 } } } diff --git a/python/sglang/multimodal_gen/test/server/ascend/testcase_configs_npu.py b/python/sglang/multimodal_gen/test/server/ascend/testcase_configs_npu.py index 8b5cffdbd..fa5be7047 100644 --- a/python/sglang/multimodal_gen/test/server/ascend/testcase_configs_npu.py +++ b/python/sglang/multimodal_gen/test/server/ascend/testcase_configs_npu.py @@ -6,28 +6,58 @@ from sglang.multimodal_gen.test.server.testcase_configs import ( DiffusionServerArgs, DiffusionTestCase, T2I_sampling_params, + TI2V_sampling_params, ) -MODEL_WEIGHTS_DIR = "/root/.cache/modelscope/hub/models/" +MODELSCOPE_MODEL_WEIGHTS_DIR = "/root/.cache/modelscope/hub/models/" -FLUX_1_DEV_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "black-forest-labs/FLUX.1-dev" + +def use_modelscope(name: str): + return os.path.join(MODELSCOPE_MODEL_WEIGHTS_DIR, name) + + +COSMOS3_NANO_WEIGHTS_PATH = use_modelscope("nv-community/Cosmos3-Nano") +ERNIE_IMAGE_WEIGHTS_PATH = use_modelscope("PaddlePaddle/ERNIE-Image") +FLUX_1_DEV_WEIGHTS_PATH = use_modelscope("black-forest-labs/FLUX.1-dev") +FLUX_2_DEV_WEIGHTS_PATH = use_modelscope("black-forest-labs/FLUX.2-dev") +FLUX_2_KLEIN_4B_WEIGHTS_PATH = use_modelscope("black-forest-labs/FLUX.2-klein-4B") +GLM_IMAGE_WEIGHTS_PATH = use_modelscope("ZhipuAI/GLM-Image") +JOYAI_IMAGE_EDIT_WEIGHTS_PATH = use_modelscope( + "jd-opensource/JoyAI-Image-Edit-Diffusers" ) -FLUX_2_DEV_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "black-forest-labs/FLUX.2-dev" +LTX_2_WEIGHTS_PATH = use_modelscope("Lightricks/LTX-2") +MOVA_360_WEIGHTS_PATH = use_modelscope("openmoss/MOVA-360p") +QWEN_IMAGE_WEIGHTS_PATH = use_modelscope("Qwen/Qwen-Image") +WAN2_1_T2V_1_3B_DIFFUSERS_WEIGHTS_PATH = use_modelscope( + "Wan-AI/Wan2.1-T2V-1.3B-Diffusers" ) -QWEN_IMAGE_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "Qwen/Qwen-Image") -WAN2_1_T2V_1_3B_DIFFUSERS_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "Wan-AI/Wan2.1-T2V-1.3B-Diffusers" -) -WAN2_2_T2V_A14B_DIFFUSERS_W8A8_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "Eco-Tech/Wan2.2-T2V-A14B-Diffusers-w8a8" +WAN2_2_T2V_A14B_DIFFUSERS_W8A8_WEIGHTS_PATH = use_modelscope( + "Eco-Tech/Wan2.2-T2V-A14B-Diffusers-w8a8" ) +Z_IMAGE_WEIGHTS_PATH = use_modelscope("Tongyi-MAI/Z-Image") EXTRAS_DISABLE_WARMUP = ["--warmup-mode", "request"] ONE_NPU_CASES: list[DiffusionTestCase] = [ # === Text to 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, + ), + DiffusionTestCase( + "glm_image_t2i_1npu", + DiffusionServerArgs( + model_path=GLM_IMAGE_WEIGHTS_PATH, + extras=EXTRAS_DISABLE_WARMUP, + ), + T2I_sampling_params, + run_consistency_check=False, + ), DiffusionTestCase( "flux_image_t2i_npu", DiffusionServerArgs( @@ -36,6 +66,24 @@ ONE_NPU_CASES: list[DiffusionTestCase] = [ ), T2I_sampling_params, ), + DiffusionTestCase( + "flux_2_klein_4b_t2i_1npu", + DiffusionServerArgs( + model_path=FLUX_2_KLEIN_4B_WEIGHTS_PATH, + extras=EXTRAS_DISABLE_WARMUP, + ), + T2I_sampling_params, + run_consistency_check=False, + ), + DiffusionTestCase( + "z_image_t2i_1npu", + DiffusionServerArgs( + model_path=Z_IMAGE_WEIGHTS_PATH, + extras=EXTRAS_DISABLE_WARMUP, + ), + T2I_sampling_params, + run_consistency_check=False, + ), # === Text to Video (T2V) === DiffusionTestCase( "wan2_1_t2v_1.3b_1_npu", @@ -47,6 +95,16 @@ ONE_NPU_CASES: list[DiffusionTestCase] = [ prompt=T2V_PROMPT, ), ), + # === Text+Image to Image (TI2I) + DiffusionTestCase( + "joyai_image_edit_ti2i_1npu", + DiffusionServerArgs( + model_path=JOYAI_IMAGE_EDIT_WEIGHTS_PATH, + extras=EXTRAS_DISABLE_WARMUP, + ), + run_consistency_check=False, + run_component_accuracy_check=False, + ), ] TWO_NPU_CASES: list[DiffusionTestCase] = [ @@ -87,6 +145,29 @@ TWO_NPU_CASES: list[DiffusionTestCase] = [ prompt=T2V_PROMPT, ), ), + # === Text+Image to Video+Audio (TI2V) + DiffusionTestCase( + "ltx_2_ti2va_2npu", + DiffusionServerArgs( + model_path=LTX_2_WEIGHTS_PATH, + num_gpus=2, + ulysses_degree=2, + extras=EXTRAS_DISABLE_WARMUP, + ), + TI2V_sampling_params, + run_consistency_check=False, + ), + DiffusionTestCase( + "mova_360p_ti2va_2npu", + DiffusionServerArgs( + model_path=MOVA_360_WEIGHTS_PATH, + num_gpus=2, + tp_size=2, + dit_layerwise_offload=True, + extras=EXTRAS_DISABLE_WARMUP, + ), + run_consistency_check=False, + ), ] DEFAULT_EST_TIME_SECONDS = 300.0 diff --git a/python/sglang/multimodal_gen/test/server/gpu_cases.py b/python/sglang/multimodal_gen/test/server/gpu_cases.py index a0cc77b4e..a4ef3b579 100644 --- a/python/sglang/multimodal_gen/test/server/gpu_cases.py +++ b/python/sglang/multimodal_gen/test/server/gpu_cases.py @@ -16,6 +16,7 @@ from sglang.multimodal_gen.test.server.testcase_configs import ( MODELOPT_WAN22_NVFP4_B200_ENV_VARS, MODELOPT_WAN22_NVFP4_MODEL, T2V_PROMPT, + COSMOS3_NANO_CI_sampling_params, DiffusionSamplingParams, DiffusionServerArgs, DiffusionTestCase, @@ -165,21 +166,7 @@ ONE_GPU_CASES: list[DiffusionTestCase] = [ model_path=DEFAULT_COSMOS3_NANO_MODEL_NAME_FOR_TEST, modality="image", ), - DiffusionSamplingParams( - prompt="A red cube on a white table, product photo.", - output_size="832x480", - output_format="png", - extras={ - "num_inference_steps": 35, - "seed": 0, - "max_sequence_length": 128, - "flow_shift": 10.0, - "extra_args": { - "guardrails": False, - "use_resolution_template": False, - }, - }, - ), + COSMOS3_NANO_CI_sampling_params, run_perf_check=False, run_consistency_check=True, run_component_accuracy_check=False, diff --git a/python/sglang/multimodal_gen/test/server/testcase_configs.py b/python/sglang/multimodal_gen/test/server/testcase_configs.py index c5b0ae132..6eb3eb152 100644 --- a/python/sglang/multimodal_gen/test/server/testcase_configs.py +++ b/python/sglang/multimodal_gen/test/server/testcase_configs.py @@ -475,6 +475,22 @@ IDEOGRAM4_CI_PROMPT = json.dumps( ensure_ascii=False, ) +COSMOS3_NANO_CI_sampling_params = DiffusionSamplingParams( + prompt="A red cube on a white table, product photo.", + output_size="832x480", + output_format="png", + extras={ + "num_inference_steps": 35, + "seed": 0, + "max_sequence_length": 128, + "flow_shift": 10.0, + "extra_args": { + "guardrails": False, + "use_resolution_template": False, + }, + }, +) + IDEOGRAM4_CI_sampling_params = replace( T2I_sampling_params, prompt=IDEOGRAM4_CI_PROMPT, diff --git a/python/sglang/multimodal_gen/test/test_utils.py b/python/sglang/multimodal_gen/test/test_utils.py index f48af149b..5391d94d7 100644 --- a/python/sglang/multimodal_gen/test/test_utils.py +++ b/python/sglang/multimodal_gen/test/test_utils.py @@ -37,7 +37,7 @@ logger = init_logger(__name__) SGL_TEST_FILES_CI_DATA_REVISION = "916cbff23aa4e89f78128397ede7ce29a73d6d8c" if current_platform.is_npu(): - SGL_TEST_FILES_CI_DATA_REVISION = "670d66a8a290b62c0c3c077b3e9b0f4a4d9a44e7" + SGL_TEST_FILES_CI_DATA_REVISION = "6b62f4b6825c76a25fd2ba28248df68f2b400e65" SGL_TEST_FILES_CONSISTENCY_GT_ROOT = ( "https://raw.githubusercontent.com/"