[ROCm][CI] Expand MI355 mirrors and route MIG-sized jobs to DPX (#59137)

Signed-off-by: Andreas Karatzas <andreas.karatzas@protonmail.com>

Andreas Karatzas committed Sep 29, 2026 at 03:40 UTC 6ebb5bd64f5ef75dbe1471ee88c009003b3d03ec
15 files changed +534 -91
.buildkite/test-amd.yaml
+212 -50
@@ -3301,6 +3301,85 @@ steps:
3301 - pytest -v -s tests/compile/passes/test_fusion_attn.py tests/compile/passes/test_silu_mul_quant_fusion.py tests/compile/passes/test_silu_mul_quant_manual_fusion.py
3302 - pytest -v -s tests/compile/correctness_e2e/test_attn_quant.py
3303
3304 +- label: ":amd: (MI355) Sequence Parallel Correctness"
3305 + timeout_in_minutes: 180
3306 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3307 + dind: false
3308 + agent_pool: mi355_2
3309 + num_gpus: 2
3310 + optional: true
3311 + working_dir: "/vllm-workspace/"
3312 + source_file_dependencies:
3313 + - .buildkite/test_areas/compile.yaml
3314 + - vllm/compilation/
3315 + - vllm/config/
3316 + - vllm/distributed/
3317 + - vllm/model_executor/kernels/linear/
3318 + - vllm/model_executor/layers/
3319 + - vllm/model_executor/models/llama.py
3320 + - vllm/v1/attention/
3321 + - vllm/v1/worker/
3322 + - vllm/v1/cudagraph_dispatcher.py
3323 + - vllm/platforms/rocm.py
3324 + - tests/compile/correctness_e2e/test_sequence_parallel.py
3325 + - tests/models/registry.py
3326 + - tests/utils.py
3327 + commands:
3328 + - export VLLM_TEST_CLEAN_GPU_MEMORY=1
3329 + - pytest -v -s tests/compile/correctness_e2e/test_sequence_parallel.py
3330 +
3331 +- label: ":amd: (MI355) AsyncTP Correctness"
3332 + timeout_in_minutes: 60
3333 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3334 + dind: false
3335 + agent_pool: mi355_2
3336 + num_gpus: 2
3337 + optional: true
3338 + working_dir: "/vllm-workspace/"
3339 + source_file_dependencies:
3340 + - .buildkite/test_areas/compile.yaml
3341 + - vllm/compilation/
3342 + - vllm/config/
3343 + - vllm/distributed/
3344 + - vllm/model_executor/layers/
3345 + - vllm/model_executor/kernels/linear/
3346 + - vllm/model_executor/models/llama.py
3347 + - vllm/model_executor/models/qwen3.py
3348 + - vllm/v1/attention/
3349 + - vllm/_aiter_ops.py
3350 + - vllm/platforms/rocm.py
3351 + - vllm/transformers_utils/repo_utils.py
3352 + - tests/compile/correctness_e2e/test_async_tp.py
3353 + - tests/compile/fusions_e2e/common.py
3354 + - tests/models/registry.py
3355 + - tests/utils.py
3356 + commands:
3357 + - export VLLM_TEST_CLEAN_GPU_MEMORY=1
3358 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_rocm_async_tp_bf16_output_correctness
3359 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_correctness -k RedHatAI
3360 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_nvfp4_correctness
3361 +
3362 +- label: ":amd: (MI355 DPX) Fusion E2E FP8 Config Sweep"
3363 + timeout_in_minutes: 45
3364 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3365 + dind: false
3366 + agent_pool: mi355_dpx
3367 + num_gpus: 1
3368 + optional: true
3369 + working_dir: "/vllm-workspace/"
3370 + source_file_dependencies:
3371 + - .buildkite/test_areas/compile.yaml
3372 + - csrc/quantization/
3373 + - vllm/compilation/
3374 + - vllm/model_executor/
3375 + - vllm/v1/attention/
3376 + - vllm/_aiter_ops.py
3377 + - vllm/platforms/rocm.py
3378 + - tests/compile/fusions_e2e/
3379 + commands:
3380 + - rocm-smi
3381 + - pytest -v -s tests/compile/fusions_e2e/test_tp1_quant.py -k "test_tp1_fp8_fusions and inductor_partition and not +rms_norm and not True and ((Llama-3 and TRITON_ATTN) or (Qwen3-30B and +quant_fp8 and TRITON_ATTN) or (DeepSeek-Coder and +quant_fp8 and TRITON_MLA))"
3382 +
3383 #-------------------------------------------------------- mi355 · distributed --------------------------------------------------------#
3384
3385 - label: ":amd: (MI355 DPX) EPLB Algorithm" # TBD
@@ -3572,6 +3651,26 @@ steps:
3651 - pytest -v -s tests/distributed/test_rocm_quick_reduce.py
3652 - pytest -v -s tests/distributed/test_quick_all_reduce.py
3653
3654 +- label: ":amd: (MI355) Distributed AgRs All2All"
3655 + timeout_in_minutes: 30
3656 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3657 + dind: false
3658 + agent_pool: mi355_2
3659 + num_gpus: 2
3660 + optional: true
3661 + working_dir: "/vllm-workspace/"
3662 + source_file_dependencies:
3663 + - .buildkite/test_areas/distributed.yaml
3664 + - vllm/distributed/
3665 + - vllm/config/parallel.py
3666 + - vllm/config/vllm.py
3667 + - vllm/forward_context.py
3668 + - vllm/platforms/rocm.py
3669 + - tests/distributed/test_mnnvl_alltoall.py
3670 + - tests/utils.py
3671 + commands:
3672 + - pytest -v -s tests/distributed/test_mnnvl_alltoall.py::test_args_dispatch_combine
3673 +
3674 - label: ":amd: (MI355) Fusion E2E TP2 Quick" # TBD
3675 timeout_in_minutes: 60
3676 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
@@ -3953,6 +4052,30 @@ steps:
4052 commands:
4053 - pytest -s -v evals/gpt_oss/test_gpqa_correctness.py --config-list-file=configs/models-gfx950.txt
4054
4055 +- label: ":amd: (MI355 DPX) LM Eval Small Models"
4056 + timeout_in_minutes: 45
4057 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4058 + dind: false
4059 + agent_pool: mi355_dpx
4060 + num_gpus: 1
4061 + optional: true
4062 + working_dir: "/vllm-workspace/tests"
4063 + source_file_dependencies:
4064 + - .buildkite/test_areas/lm_eval.yaml
4065 + - csrc/
4066 + - tests/evals/gsm8k/
4067 + - vllm/model_executor/layers/quantization
4068 + - vllm/model_executor/kernels/linear/
4069 + - vllm/model_executor/layers/fused_moe/
4070 + - vllm/model_executor/models/
4071 + - vllm/model_executor/model_loader/
4072 + - vllm/v1/attention/backends/
4073 + - vllm/v1/attention/selector.py
4074 + - vllm/_aiter_ops.py
4075 + - vllm/platforms/rocm.py
4076 + commands:
4077 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-gfx950-small.txt
4078 +
4079 - label: ":amd: (MI355 DPX) LM Eval Watermarking"
4080 timeout_in_minutes: 45
4081 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
@@ -3999,7 +4122,7 @@ steps:
4122 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-watermark-dspark-tp2.txt
4123
4124 - label: ":amd: (MI355) LM Eval Qwen3-5 Models" # TBD
4002 - timeout_in_minutes: 40
4125 + timeout_in_minutes: 75
4126 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4127 dind: false
4128 agent_pool: mi355_2
@@ -4018,6 +4141,10 @@ steps:
4141 - vllm/distributed/
4142 - vllm/model_executor/layers/fused_moe/
4143 - vllm/third_party/flash_linear_attention/ops/
4144 + - vllm/model_executor/layers/quantization/modelopt.py
4145 + - vllm/model_executor/kernels/linear/nvfp4/
4146 + - vllm/v1/attention/
4147 + - vllm/v1/worker/
4148 - tests/evals/gsm8k/
4149 - tests/utils.py
4150 - vllm/_aiter_ops.py
@@ -4025,6 +4152,48 @@ steps:
4152 commands:
4153 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-qwen35-mi355.txt
4154
4155 +- label: ":amd: (MI355) LM Eval Large Models EP"
4156 + timeout_in_minutes: 120
4157 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4158 + dind: false
4159 + agent_pool: mi355_2
4160 + num_gpus: 2
4161 + optional: true
4162 + working_dir: "/vllm-workspace/tests"
4163 + source_file_dependencies:
4164 + - .buildkite/test_areas/lm_eval.yaml
4165 + - tests/evals/gsm8k/
4166 + - tests/utils.py
4167 + - tests/conftest.py
4168 + - csrc/
4169 + - vllm/config/
4170 + - vllm/distributed/
4171 + - vllm/model_executor/models/config.py
4172 + - vllm/model_executor/models/registry.py
4173 + - vllm/model_executor/models/utils.py
4174 + - vllm/model_executor/models/qwen3_next.py
4175 + - vllm/model_executor/models/qwen3_next_mtp.py
4176 + - vllm/model_executor/models/nemotron_h.py
4177 + - vllm/model_executor/models/nemotron_h_mtp.py
4178 + - vllm/transformers_utils/configs/qwen3_next.py
4179 + - vllm/transformers_utils/configs/nemotron_h.py
4180 + - vllm/model_executor/model_loader/
4181 + - vllm/model_executor/layers/quantization/
4182 + - vllm/model_executor/layers/fused_moe/
4183 + - vllm/model_executor/layers/mamba/
4184 + - vllm/model_executor/layers/layernorm.py
4185 + - vllm/model_executor/layers/linear.py
4186 + - vllm/model_executor/kernels/linear/
4187 + - vllm/third_party/flash_linear_attention/ops/
4188 + - vllm/v1/attention/
4189 + - vllm/v1/spec_decode/
4190 + - vllm/v1/worker/
4191 + - vllm/_aiter_ops.py
4192 + - vllm/platforms/rocm.py
4193 + commands:
4194 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
4195 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell-ep-mi355.txt
4196 +
4197 - label: ":amd: (MI355) Qwen3-8-Flash-Next-FP8 Accuracy Eval"
4198 timeout_in_minutes: 105
4199 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
@@ -4046,11 +4215,11 @@ steps:
4215 - uv pip install --system 'evalscope==1.10.0'
4216 - pytest -s -v evals/qwen4_exp/test_accuracy.py --config-list-file=configs/models-rocm.txt
4217
4049 -- label: ":amd: (MI355) LM Eval TurboQuant k8v4"
4218 +- label: ":amd: (MI355 DPX) LM Eval TurboQuant k8v4"
4219 timeout_in_minutes: 30
4220 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4221 dind: false
4053 - agent_pool: mi355_1
4222 + agent_pool: mi355_dpx
4223 num_gpus: 1
4224 optional: true
4225 working_dir: "/vllm-workspace/tests"
@@ -4072,11 +4241,11 @@ steps:
4241 commands:
4242 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k8v4-rocm.txt
4243
4075 -- label: ":amd: (MI355) LM Eval TurboQuant t4nc"
4244 +- label: ":amd: (MI355 DPX) LM Eval TurboQuant t4nc"
4245 timeout_in_minutes: 30
4246 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4247 dind: false
4079 - agent_pool: mi355_1
4248 + agent_pool: mi355_dpx
4249 num_gpus: 1
4250 optional: true
4251 working_dir: "/vllm-workspace/tests"
@@ -4098,11 +4267,11 @@ steps:
4267 commands:
4268 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-t4nc-rocm.txt
4269
4101 -- label: ":amd: (MI355) LM Eval TurboQuant k3v4nc"
4270 +- label: ":amd: (MI355 DPX) LM Eval TurboQuant k3v4nc"
4271 timeout_in_minutes: 30
4272 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4273 dind: false
4105 - agent_pool: mi355_1
4274 + agent_pool: mi355_dpx
4275 num_gpus: 1
4276 optional: true
4277 working_dir: "/vllm-workspace/tests"
@@ -4124,11 +4293,11 @@ steps:
4293 commands:
4294 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k3v4nc-rocm.txt
4295
4127 -- label: ":amd: (MI355) LM Eval TurboQuant t3nc"
4296 +- label: ":amd: (MI355 DPX) LM Eval TurboQuant t3nc"
4297 timeout_in_minutes: 30
4298 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4299 dind: false
4131 - agent_pool: mi355_1
4300 + agent_pool: mi355_dpx
4301 num_gpus: 1
4302 optional: true
4303 working_dir: "/vllm-workspace/tests"
@@ -4500,41 +4669,6 @@ steps:
4669 - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 2048
4670 - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle3 --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 1536
4671
4503 -- label: ":amd: (MI355) Examples" # TBD
4504 - timeout_in_minutes: 75
4505 - mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4506 - dind: false
4507 - agent_pool: mi355_1
4508 - working_dir: "/vllm-workspace/examples"
4509 - source_file_dependencies:
4510 - - vllm/entrypoints
4511 - - vllm/multimodal
4512 - - examples/
4513 - - vllm/platforms/rocm.py
4514 - optional: true
4515 - commands:
4516 - # Basic
4517 - # Multi-modal models
4518 - # Pooling models
4519 - # Features demo
4520 - - pip install --no-deps tensorizer
4521 - - python3 basic/offline_inference/chat.py
4522 - - python3 basic/offline_inference/generate.py --model facebook/opt-125m
4523 - - python3 basic/offline_inference/generate.py --model meta-llama/Llama-2-13b-chat-hf --cpu-offload-gb 10
4524 - - python3 basic/offline_inference/classify.py
4525 - - python3 basic/offline_inference/embed.py
4526 - - python3 basic/offline_inference/score.py
4527 - - python3 generate/multimodal/audio_language_offline.py --seed 0
4528 - - python3 generate/multimodal/vision_language_offline.py --seed 0
4529 - - python3 generate/multimodal/vision_language_multi_image_offline.py --seed 0
4530 - - python3 generate/multimodal/encoder_decoder_multimodal_offline.py --model-type whisper --seed 0
4531 - - python3 pooling/embed/vision_embedding_offline.py --seed 0
4532 - - python3 features/automatic_prefix_caching/prefix_caching_offline.py
4533 - - python3 deployment/llm_engine_example.py
4534 - - python3 features/tensorize_vllm_model.py --model facebook/opt-125m serialize --serialized-directory /tmp/ --suffix v1 && python3 features/tensorize_vllm_model.py --model facebook/opt-125m deserialize --path-to-tensors /tmp/vllm/facebook/opt-125m/v1/model.tensors
4535 - - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 2048
4536 - - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle3 --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 1536
4537 -
4672 #---------------------------------------------------------- mi355 · kernels ----------------------------------------------------------#
4673
4674 - label: ":amd: (MI355) mHC Kernels"
@@ -5291,12 +5425,12 @@ steps:
5425
5426 #------------------------------------------------------- mi355 · quantization --------------------------------------------------------#
5427
5294 -- label: ":amd: (MI355) Quantization Shard %N"
5428 +- label: ":amd: (MI355 DPX) Quantization Shard %N"
5429 timeout_in_minutes: 115
5430 parallelism: 4
5431 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
5432 dind: false
5299 - agent_pool: mi355_1
5433 + agent_pool: mi355_dpx
5434 working_dir: "/vllm-workspace/tests"
5435 source_file_dependencies:
5436 - csrc/
@@ -5339,6 +5473,34 @@ steps:
5473
5474 #------------------------------------------------------------ mi355 · v1 -------------------------------------------------------------#
5475
5476 +- label: ":amd: (MI355) Spec Decode AL DFlash2 Nightly"
5477 + timeout_in_minutes: 60
5478 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
5479 + dind: false
5480 + agent_pool: mi355_1
5481 + num_gpus: 1
5482 + optional: true
5483 + working_dir: "/vllm-workspace/tests"
5484 + source_file_dependencies:
5485 + - .buildkite/test_areas/spec_decode.yaml
5486 + - tests/v1/e2e/spec_decode/
5487 + - tests/evals/gsm8k/
5488 + - tests/utils.py
5489 + - vllm/v1/spec_decode/
5490 + - vllm/v1/worker/gpu/spec_decode/
5491 + - vllm/v1/worker/gpu/sample/
5492 + - vllm/v1/worker/gpu/model_runner.py
5493 + - vllm/v1/attention/
5494 + - vllm/model_executor/models/qwen3_dflash.py
5495 + - vllm/model_executor/models/qwen3_dflash2.py
5496 + - vllm/model_executor/models/qwen3_5.py
5497 + - vllm/model_executor/model_loader/
5498 + - vllm/model_executor/layers/quantization/
5499 + - vllm/model_executor/kernels/linear/
5500 + - vllm/platforms/rocm.py
5501 + commands:
5502 + - pytest -v -s v1/e2e/spec_decode/acceptance_rates/dflash/ -k "dflash2"
5503 +
5504 - label: ":amd: (MI355 DPX) Spec Decode Draft Model" # TBD
5505 timeout_in_minutes: 60
5506 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
@@ -6056,11 +6218,11 @@ steps:
6218 - pytest -v -s v1/test_outputs.py
6219
6220
6059 -- label: ":amd: (MI355) V1 Spec Decode" # TBD
6221 +- label: ":amd: (MI355 DPX) V1 Spec Decode" # TBD
6222 timeout_in_minutes: 50
6223 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
6224 dind: false
6063 - agent_pool: mi355_1
6225 + agent_pool: mi355_dpx
6226 working_dir: "/vllm-workspace/tests"
6227 source_file_dependencies:
6228 - vllm/
@@ -6230,11 +6392,11 @@ steps:
6392 - amdmi355
6393 optional: true
6394
6233 -- label: ":amd: (MI355) MRV2 Sampler JIT Warmup"
6395 +- label: ":amd: (MI355 DPX) MRV2 Sampler JIT Warmup"
6396 timeout_in_minutes: 10
6397 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
6398 dind: false
6237 - agent_pool: mi355_1
6399 + agent_pool: mi355_dpx
6400 num_gpus: 1
6401 optional: true
6402 working_dir: "/vllm-workspace/"
.buildkite/test_areas/compile.yaml
+77
@@ -12,6 +12,30 @@ steps:
12 commands:
13 - export VLLM_TEST_CLEAN_GPU_MEMORY=1
14 - pytest -v -s tests/compile/correctness_e2e/test_sequence_parallel.py
15 + mirror:
16 + amd:
17 + label: ":amd: (MI355) Sequence Parallel Correctness"
18 + dind: false
19 + device: mi355_2
20 + num_devices: 2
21 + timeout_in_minutes: 180
22 + depends_on:
23 + - image-build-amd
24 + source_file_dependencies:
25 + - .buildkite/test_areas/compile.yaml
26 + - vllm/compilation/
27 + - vllm/config/
28 + - vllm/distributed/
29 + - vllm/model_executor/kernels/linear/
30 + - vllm/model_executor/layers/
31 + - vllm/model_executor/models/llama.py
32 + - vllm/v1/attention/
33 + - vllm/v1/worker/
34 + - vllm/v1/cudagraph_dispatcher.py
35 + - vllm/platforms/rocm.py
36 + - tests/compile/correctness_e2e/test_sequence_parallel.py
37 + - tests/models/registry.py
38 + - tests/utils.py
39
40 - label: ":nvidia: (B200) AsyncTP Correctness"
41 key: asynctp-correctness-tests-b200
@@ -23,6 +47,38 @@ steps:
47 commands:
48 - export VLLM_TEST_CLEAN_GPU_MEMORY=1
49 - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py
50 + mirror:
51 + amd:
52 + label: ":amd: (MI355) AsyncTP Correctness"
53 + dind: false
54 + device: mi355_2
55 + num_devices: 2
56 + timeout_in_minutes: 60
57 + working_dir: "/vllm-workspace/"
58 + depends_on:
59 + - image-build-amd
60 + source_file_dependencies:
61 + - .buildkite/test_areas/compile.yaml
62 + - vllm/compilation/
63 + - vllm/config/
64 + - vllm/distributed/
65 + - vllm/model_executor/layers/
66 + - vllm/model_executor/kernels/linear/
67 + - vllm/model_executor/models/llama.py
68 + - vllm/model_executor/models/qwen3.py
69 + - vllm/v1/attention/
70 + - vllm/_aiter_ops.py
71 + - vllm/platforms/rocm.py
72 + - vllm/transformers_utils/repo_utils.py
73 + - tests/compile/correctness_e2e/test_async_tp.py
74 + - tests/compile/fusions_e2e/common.py
75 + - tests/models/registry.py
76 + - tests/utils.py
77 + commands:
78 + - export VLLM_TEST_CLEAN_GPU_MEMORY=1
79 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_rocm_async_tp_bf16_output_correctness
80 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_correctness -k RedHatAI
81 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_nvfp4_correctness
82
83 - label: ":nvidia: (H100) Distributed Compile"
84 key: distributed-compile-unit-tests-2xh100
@@ -188,6 +244,27 @@ steps:
244 # Qwen/Deepseek requires +quant_fp8 as -quant_fp8 rms+quant fusion is not supported
245 # Run just llama3 (fp8 & fp4) for all config combinations (only inductor partition)
246 - pytest -v -s tests/compile/fusions_e2e/test_tp1_quant.py -k "inductor_partition and (FLASHINFER and not +rms_norm and (not +quant_fp8 or +quant_fp8 and (qwen3 or deepseek)) or llama-3)"
247 + mirror:
248 + amd:
249 + label: ":amd: (MI355 DPX) Fusion E2E FP8 Config Sweep"
250 + dind: false
251 + device: mi355_dpx
252 + timeout_in_minutes: 45
253 + working_dir: "/vllm-workspace/"
254 + depends_on:
255 + - image-build-amd
256 + source_file_dependencies:
257 + - .buildkite/test_areas/compile.yaml
258 + - csrc/quantization/
259 + - vllm/compilation/
260 + - vllm/model_executor/
261 + - vllm/v1/attention/
262 + - vllm/_aiter_ops.py
263 + - vllm/platforms/rocm.py
264 + - tests/compile/fusions_e2e/
265 + commands:
266 + - rocm-smi
267 + - pytest -v -s tests/compile/fusions_e2e/test_tp1_quant.py -k "test_tp1_fp8_fusions and inductor_partition and not +rms_norm and not True and ((Llama-3 and TRITON_ATTN) or (Qwen3-30B and +quant_fp8 and TRITON_ATTN) or (DeepSeek-Coder and +quant_fp8 and TRITON_MLA))"
268
269 - label: ":nvidia: (H100) Fusion E2E TP2 Quick"
270 key: fusion-e2e-tp2-quick-h100
.buildkite/test_areas/distributed.yaml
+21
@@ -439,6 +439,27 @@ steps:
439 - pytest -v -s tests/distributed/test_nccl_symm_mem.py
440 - pytest -v -s tests/v1/distributed/test_dbo.py
441 - pytest -v -s tests/distributed/test_mnnvl_alltoall.py
442 + mirror:
443 + amd:
444 + label: ":amd: (MI355) Distributed AgRs All2All"
445 + dind: false
446 + device: mi355_2
447 + num_devices: 2
448 + timeout_in_minutes: 30
449 + working_dir: "/vllm-workspace/"
450 + depends_on:
451 + - image-build-amd
452 + source_file_dependencies:
453 + - .buildkite/test_areas/distributed.yaml
454 + - vllm/distributed/
455 + - vllm/config/parallel.py
456 + - vllm/config/vllm.py
457 + - vllm/forward_context.py
458 + - vllm/platforms/rocm.py
459 + - tests/distributed/test_mnnvl_alltoall.py
460 + - tests/utils.py
461 + commands:
462 + - pytest -v -s tests/distributed/test_mnnvl_alltoall.py::test_args_dispatch_combine
463
464 - label: ":nvidia: (B200) GEMM-RS/AR"
465 key: gemm-rs-ar-2xb200
.buildkite/test_areas/jit_monitor.yaml
+2 -2
@@ -23,9 +23,9 @@ steps:
23 mirror:
24 amd:
25 # Focused MRV2 regression; the broader model/backend matrix is pending.
26 - label: ':amd: (MI355) MRV2 Sampler JIT Warmup'
26 + label: ':amd: (MI355 DPX) MRV2 Sampler JIT Warmup'
27 dind: false
28 - device: mi355_1
28 + device: mi355_dpx
29 num_devices: 1
30 timeout_in_minutes: 10
31 working_dir: /vllm-workspace/
.buildkite/test_areas/lm_eval.yaml
+63 -9
@@ -151,15 +151,18 @@ steps:
151 label: ":amd: (MI355 DPX) LM Eval Small Models"
152 dind: false
153 device: mi355_dpx
154 + num_devices: 1
155 timeout_in_minutes: 45
156 working_dir: /vllm-workspace/tests
157 depends_on:
158 - image-build-amd
159 source_file_dependencies:
160 + - .buildkite/test_areas/lm_eval.yaml
161 - csrc/
162 - tests/evals/gsm8k/
163 - vllm/model_executor/layers/quantization
164 - vllm/model_executor/kernels/linear/
165 + - vllm/model_executor/layers/fused_moe/
166 - vllm/model_executor/models/
167 - vllm/model_executor/model_loader/
168 - vllm/v1/attention/backends/
@@ -383,6 +386,49 @@ steps:
386 - vllm/model_executor/layers/quantization
387 commands:
388 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell-ep.txt
389 + mirror:
390 + amd:
391 + label: ":amd: (MI355) LM Eval Large Models EP"
392 + dind: false
393 + device: mi355_2
394 + num_devices: 2
395 + timeout_in_minutes: 120
396 + working_dir: "/vllm-workspace/tests"
397 + depends_on:
398 + - image-build-amd
399 + source_file_dependencies:
400 + - .buildkite/test_areas/lm_eval.yaml
401 + - tests/evals/gsm8k/
402 + - tests/utils.py
403 + - tests/conftest.py
404 + - csrc/
405 + - vllm/config/
406 + - vllm/distributed/
407 + - vllm/model_executor/models/config.py
408 + - vllm/model_executor/models/registry.py
409 + - vllm/model_executor/models/utils.py
410 + - vllm/model_executor/models/qwen3_next.py
411 + - vllm/model_executor/models/qwen3_next_mtp.py
412 + - vllm/model_executor/models/nemotron_h.py
413 + - vllm/model_executor/models/nemotron_h_mtp.py
414 + - vllm/transformers_utils/configs/qwen3_next.py
415 + - vllm/transformers_utils/configs/nemotron_h.py
416 + - vllm/model_executor/model_loader/
417 + - vllm/model_executor/layers/quantization/
418 + - vllm/model_executor/layers/fused_moe/
419 + - vllm/model_executor/layers/mamba/
420 + - vllm/model_executor/layers/layernorm.py
421 + - vllm/model_executor/layers/linear.py
422 + - vllm/model_executor/kernels/linear/
423 + - vllm/third_party/flash_linear_attention/ops/
424 + - vllm/v1/attention/
425 + - vllm/v1/spec_decode/
426 + - vllm/v1/worker/
427 + - vllm/_aiter_ops.py
428 + - vllm/platforms/rocm.py
429 + commands:
430 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
431 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell-ep-mi355.txt
432
433 - label: ":nvidia: (B200) LM Eval Qwen3.5 Models"
434 key: lm-eval-qwen3-5-models-2xb200
@@ -405,7 +451,7 @@ steps:
451 label: ":amd: (MI355) LM Eval Qwen3.5 Models"
452 dind: false
453 device: mi355_2
408 - timeout_in_minutes: 40
454 + timeout_in_minutes: 75
455 depends_on:
456 - image-build-amd
457 source_file_dependencies:
@@ -418,10 +464,18 @@ steps:
464 - vllm/model_executor/models/qwen3_next.py
465 - vllm/model_executor/models/qwen3_next_mtp.py
466 - vllm/third_party/flash_linear_attention/ops/
467 + - vllm/distributed/
468 + - vllm/model_executor/layers/fused_moe/
469 + - vllm/model_executor/layers/quantization/modelopt.py
470 + - vllm/model_executor/kernels/linear/nvfp4/
471 + - vllm/v1/attention/
472 + - vllm/v1/worker/
473 - tests/evals/gsm8k/configs/models-qwen35-mi355.txt
474 - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-DEP2.yaml
475 + - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-FP8-DEP2.yaml
476 - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-MXFP4-AITER-TP2.yaml
477 - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-MXFP4-EMU-TP2.yaml
478 + - tests/evals/gsm8k/configs/Qwen3.5-397B-A17B-NVFP4-DEP2.yaml
479 - tests/evals/gsm8k/test_gsm8k_correctness.py
480 - vllm/_aiter_ops.py
481 - vllm/platforms/rocm.py
@@ -855,9 +909,9 @@ steps:
909 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k8v4.txt
910 mirror:
911 amd:
858 - label: ":amd: (MI355) LM Eval TurboQuant k8v4"
912 + label: ":amd: (MI355 DPX) LM Eval TurboQuant k8v4"
913 dind: false
860 - device: mi355_1
914 + device: mi355_dpx
915 num_devices: 1
916 timeout_in_minutes: 30
917 working_dir: /vllm-workspace/tests
@@ -895,9 +949,9 @@ steps:
949 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-t4nc.txt
950 mirror:
951 amd:
898 - label: ":amd: (MI355) LM Eval TurboQuant t4nc"
952 + label: ":amd: (MI355 DPX) LM Eval TurboQuant t4nc"
953 dind: false
900 - device: mi355_1
954 + device: mi355_dpx
955 num_devices: 1
956 timeout_in_minutes: 30
957 working_dir: /vllm-workspace/tests
@@ -935,9 +989,9 @@ steps:
989 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k3v4nc.txt
990 mirror:
991 amd:
938 - label: ":amd: (MI355) LM Eval TurboQuant k3v4nc"
992 + label: ":amd: (MI355 DPX) LM Eval TurboQuant k3v4nc"
993 dind: false
940 - device: mi355_1
994 + device: mi355_dpx
995 num_devices: 1
996 timeout_in_minutes: 30
997 working_dir: /vllm-workspace/tests
@@ -975,9 +1029,9 @@ steps:
1029 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-t3nc.txt
1030 mirror:
1031 amd:
978 - label: ":amd: (MI355) LM Eval TurboQuant t3nc"
1032 + label: ":amd: (MI355 DPX) LM Eval TurboQuant t3nc"
1033 dind: false
980 - device: mi355_1
1034 + device: mi355_dpx
1035 num_devices: 1
1036 timeout_in_minutes: 30
1037 working_dir: /vllm-workspace/tests
.buildkite/test_areas/spec_decode.yaml
+26
@@ -423,6 +423,32 @@ steps:
423 - tests/v1/e2e/spec_decode/
424 commands:
425 - pytest -v -s v1/e2e/spec_decode/acceptance_rates/dflash/ -k "dflash2"
426 + mirror:
427 + amd:
428 + label: ":amd: (MI355) Spec Decode AL DFlash2 Nightly"
429 + dind: false
430 + device: mi355_1
431 + num_devices: 1
432 + timeout_in_minutes: 60
433 + depends_on:
434 + - image-build-amd
435 + source_file_dependencies:
436 + - .buildkite/test_areas/spec_decode.yaml
437 + - tests/v1/e2e/spec_decode/
438 + - tests/evals/gsm8k/
439 + - tests/utils.py
440 + - vllm/v1/spec_decode/
441 + - vllm/v1/worker/gpu/spec_decode/
442 + - vllm/v1/worker/gpu/sample/
443 + - vllm/v1/worker/gpu/model_runner.py
444 + - vllm/v1/attention/
445 + - vllm/model_executor/models/qwen3_dflash.py
446 + - vllm/model_executor/models/qwen3_dflash2.py
447 + - vllm/model_executor/models/qwen3_5.py
448 + - vllm/model_executor/model_loader/
449 + - vllm/model_executor/layers/quantization/
450 + - vllm/model_executor/kernels/linear/
451 + - vllm/platforms/rocm.py
452
453 - label: ":nvidia: (H200 MIG 35GB) Spec Decode AL DSpark Nightly"
454 key: spec-decode-dspark-nightly
tests/compile/correctness_e2e/test_async_tp.py
+45 -16
@@ -3,6 +3,7 @@
3
4 import json
5 import logging
6 +from contextlib import nullcontext
7
8 import pytest
9
@@ -174,13 +175,18 @@ def test_async_tp_pass_correctness(
175
176
177 @create_new_process_for_each_test()
177 -def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int):
178 - if (
179 - not current_platform.is_cuda()
180 - or not current_platform.is_device_capability_family(100)
181 - ):
182 - pytest.skip("NVFP4 requires Blackwell")
183 - if not has_flashinfer():
178 +def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int, caplog_mp_spawn):
179 + is_blackwell = current_platform.is_cuda() and (
180 + current_platform.is_device_capability_family(100)
181 + )
182 + is_rocm_cdna = False
183 + if current_platform.is_rocm():
184 + from vllm.platforms.rocm import on_cdna
185 +
186 + is_rocm_cdna = on_cdna()
187 + if not (is_blackwell or is_rocm_cdna):
188 + pytest.skip("NVFP4 AsyncTP requires Blackwell or ROCm CDNA")
189 + if is_blackwell and not has_flashinfer():
190 pytest.skip("FlashInfer is required for the NVFP4 AsyncTP path")
191
192 tp_size = 2
@@ -196,8 +202,7 @@ def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int):
202 "8",
203 "--load-format",
204 "dummy",
199 - "--linear-backend",
200 - "flashinfer_cutlass",
205 + *(["--linear-backend", "flashinfer_cutlass"] if is_blackwell else []),
206 "--hf-overrides",
207 json.dumps(NVFP4_HF_OVERRIDES),
208 ]
@@ -213,6 +218,8 @@ def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int):
218 "sp_min_token_num": 1,
219 },
220 }
221 + if is_rocm_cdna:
222 + compilation_config["inductor_compile_config"] = {"force_disable_caches": True}
223
224 async_tp_args = [
225 *common_args,
@@ -232,10 +239,32 @@ def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int):
239 "mp",
240 ]
241
235 - compare_two_settings(
236 - NVFP4_MODEL_ID,
237 - async_tp_args,
238 - tp_args,
239 - method="generate",
240 - force_v1_runner=True,
241 - )
242 + env = {"VLLM_DISABLE_COMPILE_CACHE": "1"} if is_rocm_cdna else None
243 + log_context = caplog_mp_spawn(logging.DEBUG) if is_rocm_cdna else nullcontext()
244 + with log_context as logs:
245 + compare_two_settings(
246 + NVFP4_MODEL_ID,
247 + async_tp_args,
248 + tp_args,
249 + env1=env,
250 + env2=env,
251 + method="generate",
252 + force_v1_runner=True,
253 + )
254 + if is_rocm_cdna:
255 + assert logs is not None
256 + matches_by_rank = {
257 + rank: [
258 + int(count)
259 + for line in logs.text.splitlines()
260 + if line.startswith(f"(Worker_TP{rank} pid=")
261 + for count in FUSION_LOG_PATTERNS["async_tp"].findall(line)
262 + ]
263 + for rank in range(tp_size)
264 + }
265 + assert all(
266 + any(count > 0 for count in matches) for matches in matches_by_rank.values()
267 + ), (
268 + "Expected positive NVFP4 AsyncTP rewrites on both TP workers, "
269 + f"found {matches_by_rank}"
270 + )
tests/compile/correctness_e2e/test_sequence_parallel.py
+10 -5
@@ -374,11 +374,16 @@ def test_tp_sp_generation_prompt_embeds(
374
375 @create_new_process_for_each_test()
376 def test_tp_sp_nvfp4_generation(num_gpus_available: int):
377 - if (
378 - not current_platform.is_cuda()
379 - or not current_platform.is_device_capability_family(100)
380 - ):
381 - pytest.skip("NVFP4 requires Blackwell")
377 + is_blackwell = current_platform.is_cuda() and (
378 + current_platform.is_device_capability_family(100)
379 + )
380 + is_rocm_cdna = False
381 + if current_platform.is_rocm():
382 + from vllm.platforms.rocm import on_cdna
383 +
384 + is_rocm_cdna = on_cdna()
385 + if not (is_blackwell or is_rocm_cdna):
386 + pytest.skip("NVFP4 sequence parallelism requires Blackwell or ROCm CDNA")
387
388 comparison = _build_sp_args(
389 NVFP4_MODEL_ID,
tests/distributed/test_mnnvl_alltoall.py
+15 -9
@@ -8,6 +8,7 @@ Run: pytest tests/distributed/test_mnnvl_alltoall.py -v
8
9 import os
10 import traceback
11 +from contextlib import contextmanager
12
13 import pytest
14 import torch
@@ -148,16 +149,17 @@ def _init_dp_environment(world_size, rank, port, dp_size, dp_port):
149 ensure_model_parallel_initialized(1, 1)
150
151
152 +@contextmanager
153 def _make_forward_context(rank, world_size, num_tokens_per_rank):
152 - """Create a forward context with mock DP metadata for AgRs tests.
154 + """Keep the vLLM config and mock-DP forward context active together.
155
156 Returns a context manager suitable for ``with`` statements.
157 The real DPMetadata (with sp_local_sizes etc.) is created internally
158 by set_forward_context from num_tokens_across_dp; the attn_metadata
159 placeholder just satisfies the "attn_metadata is not None" guard.
160 """
161 + from vllm.config import VllmConfig, set_current_vllm_config
162 from vllm.config.parallel import ParallelConfig
160 - from vllm.config.vllm import VllmConfig
163 from vllm.forward_context import set_forward_context
164
165 class _AttnMeta:
@@ -173,14 +175,18 @@ def _make_forward_context(rank, world_size, num_tokens_per_rank):
175 is_moe_model=True,
176 data_parallel_rank=rank,
177 )
176 - return set_forward_context(
177 - _AttnMeta(),
178 - vllm_config,
179 - num_tokens=num_tokens_per_rank,
180 - num_tokens_across_dp=torch.tensor(
181 - [num_tokens_per_rank] * world_size, dtype=torch.int
178 + with (
179 + set_current_vllm_config(vllm_config),
180 + set_forward_context(
181 + _AttnMeta(),
182 + vllm_config,
183 + num_tokens=num_tokens_per_rank,
184 + num_tokens_across_dp=torch.tensor(
185 + [num_tokens_per_rank] * world_size, dtype=torch.int
186 + ),
187 ),
183 - )
188 + ):
189 + yield
190
191
192 # ---------------------------------------------------------------------------
tests/evals/gsm8k/configs/Nemotron-3-Super-120B-A12B-NVFP4-MI355.yaml new
+18
@@ -0,0 +1,18 @@
1 +model_name: "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4"
2 +accuracy_threshold: 0.93
3 +num_questions: 1319
4 +num_fewshot: 5
5 +max_concurrency: 16
6 +rocm_request_timeout_seconds: 1800
7 +min_acceptance_length: 2.0
8 +startup_max_wait_seconds: 1200
9 +server_args: >-
10 + --enforce-eager
11 + --max-model-len 4096
12 + --max-num-seqs 16
13 + --max-num-batched-tokens 32768
14 + --gpu-memory-utilization 0.5
15 + --tensor-parallel-size 2
16 + --enable-expert-parallel
17 + --mamba-backend triton
18 + --speculative-config '{"method":"mtp","num_speculative_tokens":5}'
tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-CT-MI355.yaml new
+17
@@ -0,0 +1,17 @@
1 +model_name: "nm-testing/Qwen3-Next-80B-A3B-Instruct-NVFP4"
2 +accuracy_threshold: 0.75
3 +num_questions: 1319
4 +num_fewshot: 5
5 +max_concurrency: 16
6 +rocm_request_timeout_seconds: 1800
7 +server_args: >-
8 + --enforce-eager
9 + --max-model-len 4096
10 + --max-num-seqs 16
11 + --max-num-batched-tokens 32768
12 + --gpu-memory-utilization 0.5
13 + --tensor-parallel-size 2
14 + --enable-expert-parallel
15 + --all2all-backend allgather_reducescatter
16 + --attention-backend TRITON_ATTN
17 + --no-async-scheduling
tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-MTP-MI355.yaml new
+19
@@ -0,0 +1,19 @@
1 +model_name: "nvidia/Qwen3-Next-80B-A3B-Instruct-NVFP4"
2 +accuracy_threshold: 0.85
3 +num_questions: 1319
4 +num_fewshot: 5
5 +max_concurrency: 16
6 +rocm_request_timeout_seconds: 1800
7 +min_acceptance_length: 1.5
8 +server_args: >-
9 + --enforce-eager
10 + --max-model-len 4096
11 + --max-num-seqs 16
12 + --max-num-batched-tokens 32768
13 + --gpu-memory-utilization 0.5
14 + --tensor-parallel-size 2
15 + --enable-expert-parallel
16 + --all2all-backend allgather_reducescatter
17 + --attention-backend TRITON_ATTN
18 + --no-async-scheduling
19 + --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":1}'
tests/evals/gsm8k/configs/models-blackwell-ep-mi355.txt new
+5
@@ -0,0 +1,5 @@
1 +# Exact B200 compressed-tensors checkpoint; it does not contain MTP weights.
2 +Qwen3-Next-80B-A3B-NVFP4-EP2-CT-MI355.yaml
3 +# MTP-capable ModelOpt checkpoint exercises NVFP4 EP2 with MTP1.
4 +Qwen3-Next-80B-A3B-NVFP4-EP2-MTP-MI355.yaml
5 +Nemotron-3-Super-120B-A12B-NVFP4-MI355.yaml
tests/evals/gsm8k/configs/models-gfx950-small.txt
+3
@@ -1,2 +1,5 @@
1 Qwen3-0.6B-FP8.yaml
2 Qwen3-1.7B-MXFP4.yaml
3 +Qwen3-30B-A3B-NVFP4.yaml
4 +Laguna-XS.2-NVFP4.yaml
5 +Laguna-XS-2.1-INT4.yaml
tests/evals/gsm8k/configs/models-qwen35-mi355.txt
+1
@@ -2,3 +2,4 @@ Qwen3.5-35B-A3B-DEP2.yaml
2 Qwen3.5-35B-A3B-FP8-DEP2.yaml
3 Qwen3.5-35B-A3B-MXFP4-AITER-TP2.yaml
4 Qwen3.5-35B-A3B-MXFP4-EMU-TP2.yaml
5 +Qwen3.5-397B-A17B-NVFP4-DEP2.yaml