[NPU] Add new diffusion tests (#29331)

Co-authored-by: Elizaveta Martirosian <elizaveta.martirosian@gmail.com>
This commit is contained in:
Elizaveta Martirosian
2026-07-07 00:40:26 +03:00
committed by GitHub
co-authored by Elizaveta Martirosian
parent 093256aa4b
commit 1c23954cb9
5 changed files with 486 additions and 27 deletions
@@ -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
}
}
}
@@ -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
@@ -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,
@@ -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,
@@ -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/"