[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