[CI][ROCm] Mirror remaining portable suites without duplicate coverage (#57877)
Signed-off-by: Andreas Karatzas <akaratza@amd.com> Co-authored-by: OpenAI Codex <noreply@openai.com>
Andreas Karatzas committed
Sep 21, 2026 at 04:16 UTC
8902dbb1770b7b1780bf3d978f16cd208702472a
11 files changed
+352
-109
.buildkite/test-amd.yaml
+141
-33
@@ -436,7 +436,7 @@ steps:
436
- tests/v1/e2e/general/
437
- vllm/platforms/rocm.py
438
commands:
439
- - pytest -v -s v1/e2e/general --ignore v1/e2e/general/test_async_scheduling.py
439
+ - pytest -v -s v1/e2e/general --ignore v1/e2e/general/test_async_scheduling.py --ignore v1/e2e/general/test_kv_sharing_fast_prefill.py -k "not test_mamba_prefix_cache_mrv2"
440
441
- label: ":amd: (MI250) E2E Scheduling" # TBD
442
timeout_in_minutes: 55
@@ -1737,29 +1737,6 @@ steps:
1737
- pytest -v -s tests/ir
1738
- pytest -v -s tests/kernels/ir
1739
1740
-- label: ":amd: (MI300) MLA Kernels" # TBD
1741
- timeout_in_minutes: 25
1742
- mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1743
- dind: false
1744
- agent_pool: mi300_1
1745
- working_dir: "/vllm-workspace/"
1746
- source_file_dependencies:
1747
- - vllm/v1/attention/backends/mla/rocm_aiter_mla.py
1748
- - vllm/v1/attention/selector.py
1749
- - vllm/platforms/rocm.py
1750
- - vllm/_aiter_ops.py
1751
- - tests/kernels/attention/test_rocm_aiter_mla_decode.py
1752
- - tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
1753
- - tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
1754
- - tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
1755
- optional: true
1756
- commands:
1757
- - amd-smi
1758
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
1759
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode.py
1760
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
1761
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
1762
-
1740
- label: ":amd: (MI300) Attention Kernels Shard %N" # TBD
1741
timeout_in_minutes: 90
1742
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
@@ -1778,7 +1755,7 @@ steps:
1755
- vllm/platforms/rocm.py
1756
- vllm/utils/flashinfer.py
1757
commands:
1781
- - pytest -v -s kernels/attention --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
1758
+ - pytest -v -s kernels/attention --ignore=kernels/attention/test_triton_unified_attention_diffkv.py --ignore=kernels/attention/test_rocm_aiter_mla_decode.py --ignore=kernels/attention/test_rocm_aiter_mla_decode_metadata.py --ignore=kernels/attention/test_rocm_aiter_mla_fp8_support.py --ignore=kernels/attention/test_rocm_aiter_mla_op_registration.py --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
1759
1760
- label: ":amd: (MI300) MiniMax Reduce RMS Kernels" # TBD
1761
timeout_in_minutes: 45
@@ -2566,7 +2543,7 @@ steps:
2543
- vllm/platforms/rocm.py
2544
- vllm/entrypoints/generate/beam_search
2545
commands:
2569
- - pytest -v -s samplers
2546
+ - pytest -v -s samplers -k "not test_beam_search_passes_multimodal_data"
2547
2548
#------------------------------------------------------------ mi300 · misc ------------------------------------------------------------#
2549
@@ -3364,6 +3341,48 @@ steps:
3341
commands:
3342
- python3 benchmarks/attention_benchmarks/benchmark.py --backends ROCM_ATTN ROCM_AITER_FA ROCM_AITER_UNIFIED_ATTN --batch-specs "8q1s1k"
3343
3344
+#---------------------------------------------------------- mi355 · compile ----------------------------------------------------------#
3345
+
3346
+- label: ":amd: (MI355) PyTorch Compilation H100 Cases"
3347
+ timeout_in_minutes: 45
3348
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3349
+ dind: false
3350
+ agent_pool: mi355_1
3351
+ num_gpus: 1
3352
+ optional: true
3353
+ working_dir: "/vllm-workspace/tests"
3354
+ source_file_dependencies:
3355
+ - vllm/__init__.py
3356
+ - vllm/_aiter_ops.py
3357
+ - vllm/_custom_ops.py
3358
+ - vllm/compilation/
3359
+ - vllm/config/
3360
+ - vllm/distributed/
3361
+ - "!vllm/distributed/kv_transfer/"
3362
+ - vllm/engine/
3363
+ - vllm/env_override.py
3364
+ - vllm/envs.py
3365
+ - vllm/forward_context.py
3366
+ - vllm/inputs/
3367
+ - vllm/ir/
3368
+ - vllm/kernels/
3369
+ - vllm/logger.py
3370
+ - vllm/model_executor/
3371
+ - vllm/multimodal/
3372
+ - vllm/platforms/
3373
+ - vllm/plugins/
3374
+ - vllm/sampling_params.py
3375
+ - vllm/sequence.py
3376
+ - vllm/transformers_utils/
3377
+ - vllm/triton_utils/
3378
+ - vllm/utils/
3379
+ - vllm/v1/
3380
+ - tests/compile/h100/
3381
+ - tests/utils.py
3382
+ - csrc/
3383
+ commands:
3384
+ - pytest -v -s compile/h100/test_startup.py
3385
+
3386
#-------------------------------------------------------- mi355 · distributed --------------------------------------------------------#
3387
3388
- label: ":amd: (MI355) Distributed DP Basic" # TBD
@@ -3790,6 +3809,23 @@ steps:
3809
3810
#---------------------------------------------------------- mi355 · kernels ----------------------------------------------------------#
3811
3812
+- label: ":amd: (MI355) Attention DiffKV Kernels"
3813
+ timeout_in_minutes: 35
3814
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3815
+ dind: false
3816
+ agent_pool: mi355_1
3817
+ num_gpus: 1
3818
+ optional: true
3819
+ working_dir: "/vllm-workspace/tests"
3820
+ source_file_dependencies:
3821
+ - vllm/v1/attention/ops/triton_unified_attention_diffkv.py
3822
+ - vllm/v1/attention/backends/triton_attn_diffkv.py
3823
+ - tests/kernels/attention/test_triton_unified_attention.py
3824
+ - tests/kernels/attention/test_triton_unified_attention_diffkv.py
3825
+ - vllm/platforms/rocm.py
3826
+ commands:
3827
+ - pytest -v -s kernels/attention/test_triton_unified_attention_diffkv.py
3828
+
3829
- label: ":amd: (MI355) Core Operation Kernels Shard %N" # TBD
3830
timeout_in_minutes: 40
3831
mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
@@ -3859,19 +3895,19 @@ steps:
3895
- vllm/_aiter_ops.py
3896
- examples/basic/offline_inference/chat.py
3897
- tests/kernels/attention/test_attention_selector.py
3862
- - tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
3898
optional: true
3899
commands:
3900
- amd-smi
3901
- python3 examples/basic/offline_inference/chat.py --attention-backend TRITON_ATTN
3902
- pytest -v -s tests/kernels/attention/test_attention_selector.py
3868
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
3903
3870
-- label: ":amd: (MI355) MLA Kernels" # TBD
3871
- timeout_in_minutes: 25
3904
+- label: ":amd: (MI355) MLA Kernels"
3905
+ timeout_in_minutes: 40
3906
mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3907
dind: false
3908
agent_pool: mi355_1
3909
+ num_gpus: 1
3910
+ optional: true
3911
working_dir: "/vllm-workspace/"
3912
source_file_dependencies:
3913
- vllm/v1/attention/backends/mla/rocm_aiter_mla.py
@@ -3882,7 +3918,6 @@ steps:
3918
- tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
3919
- tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
3920
- tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
3885
- optional: true
3921
commands:
3922
- amd-smi
3923
- pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
@@ -3908,7 +3943,7 @@ steps:
3943
- vllm/utils/flashinfer.py
3944
optional: true
3945
commands:
3911
- - pytest -v -s kernels/attention --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
3946
+ - pytest -v -s kernels/attention --ignore=kernels/attention/test_triton_unified_attention_diffkv.py --ignore=kernels/attention/test_rocm_aiter_mla_decode.py --ignore=kernels/attention/test_rocm_aiter_mla_decode_metadata.py --ignore=kernels/attention/test_rocm_aiter_mla_fp8_support.py --ignore=kernels/attention/test_rocm_aiter_mla_op_registration.py --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
3947
3948
- label: ":amd: (MI355) MoE Kernels Shard %N" # TBD
3949
timeout_in_minutes: 55
@@ -4050,6 +4085,21 @@ steps:
4085
4086
#------------------------------------------------------ mi355 · models / basic -------------------------------------------------------#
4087
4088
+- label: ":amd: (MI355) GLM5Next"
4089
+ timeout_in_minutes: 35
4090
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4091
+ dind: false
4092
+ agent_pool: mi355_1
4093
+ num_gpus: 1
4094
+ optional: true
4095
+ working_dir: "/vllm-workspace/tests"
4096
+ source_file_dependencies:
4097
+ - vllm/models/glm5next/
4098
+ - tests/models/glm5next/
4099
+ - vllm/platforms/rocm.py
4100
+ commands:
4101
+ - pytest -v -s models/glm5next
4102
+
4103
- label: ":amd: (MI355) Basic Models (Extra Initialization) Shard %N" # TBD
4104
timeout_in_minutes: 60
4105
mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
@@ -4087,7 +4137,27 @@ steps:
4137
- export GIT_CONFIG_VALUE_0=HTTP/1.1
4138
- MAMBA_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/AndreasKaratzas/mamba@fix-rocm-7.0-warp-size-constexpr'
4139
- CAUSAL_CONV1D_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/Dao-AILab/causal-conv1d@v1.6.0'
4090
- - pytest -v -s models/language/generation -m hybrid_model --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT --shard-id=$$BUILDKITE_PARALLEL_JOB
4140
+ - pytest -v -s models/language/generation -m hybrid_model -k 'not granite-4.0-tiny-preview' --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT --shard-id=$$BUILDKITE_PARALLEL_JOB
4141
+
4142
+- label: ":amd: (MI355) Granite Language Model Compatibility"
4143
+ timeout_in_minutes: 80
4144
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4145
+ dind: false
4146
+ agent_pool: mi355_1
4147
+ num_gpus: 1
4148
+ optional: true
4149
+ working_dir: "/vllm-workspace/tests"
4150
+ source_file_dependencies:
4151
+ - vllm/
4152
+ - "!vllm/distributed/kv_transfer/"
4153
+ - tests/models/language/generation
4154
+ commands:
4155
+ - export GIT_CONFIG_COUNT=1
4156
+ - export GIT_CONFIG_KEY_0=http.version
4157
+ - export GIT_CONFIG_VALUE_0=HTTP/1.1
4158
+ - MAMBA_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/AndreasKaratzas/mamba@fix-rocm-7.0-warp-size-constexpr'
4159
+ - CAUSAL_CONV1D_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/Dao-AILab/causal-conv1d@v1.6.0'
4160
+ - pytest -v -s models/language/generation -m hybrid_model -k 'granite-4.0-tiny-preview'
4161
4162
- label: ":amd: (MI355) Language Models (Extended Generation)" # TBD
4163
timeout_in_minutes: 95
@@ -4308,8 +4378,46 @@ steps:
4378
# commands:
4379
# - pytest -s -v tests/quantization/test_gfx950_moe.py
4380
4381
+#--------------------------------------------------------- mi355 · samplers ----------------------------------------------------------#
4382
+
4383
+- label: ":amd: (MI355) Samplers Multimodal Beam Search"
4384
+ timeout_in_minutes: 45
4385
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4386
+ dind: false
4387
+ agent_pool: mi355_1
4388
+ num_gpus: 1
4389
+ optional: true
4390
+ working_dir: "/vllm-workspace/tests"
4391
+ source_file_dependencies:
4392
+ - vllm/model_executor/layers
4393
+ - vllm/sampling_metadata.py
4394
+ - vllm/v1/sample/
4395
+ - vllm/entrypoints/generate/beam_search/
4396
+ - tests/samplers
4397
+ - tests/conftest.py
4398
+ - vllm/_aiter_ops.py
4399
+ - vllm/platforms/rocm.py
4400
+ commands:
4401
+ - pytest -v -s samplers/test_beam_search.py::test_beam_search_passes_multimodal_data
4402
+
4403
#------------------------------------------------------------ mi355 · v1 -------------------------------------------------------------#
4404
4405
+- label: ":amd: (MI355) E2E Core Large Memory"
4406
+ timeout_in_minutes: 65
4407
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
4408
+ dind: false
4409
+ agent_pool: mi355_1
4410
+ num_gpus: 1
4411
+ optional: true
4412
+ working_dir: "/vllm-workspace/tests"
4413
+ source_file_dependencies:
4414
+ - vllm/v1/
4415
+ - tests/v1/e2e/general/
4416
+ - vllm/platforms/rocm.py
4417
+ commands:
4418
+ - pytest -v -s v1/e2e/general/test_kv_sharing_fast_prefill.py
4419
+ - pytest -v -s v1/e2e/general/test_mamba_prefix_cache.py::test_mamba_prefix_cache_mrv2 v1/e2e/general/test_mamba_prefix_cache.py::test_mamba_prefix_cache_mrv2_async
4420
+
4421
- label: ":amd: (MI355) V1 Attention Shard %N" # TBD
4422
timeout_in_minutes: 125
4423
mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
.buildkite/test_areas/engine.yaml
+18
-1
@@ -94,7 +94,7 @@ steps:
94
label: ":amd: (MI250) E2E Core"
95
dind: false
96
commands:
97
- - pytest -v -s v1/e2e/general --ignore v1/e2e/general/test_async_scheduling.py
97
+ - pytest -v -s v1/e2e/general --ignore v1/e2e/general/test_async_scheduling.py --ignore v1/e2e/general/test_kv_sharing_fast_prefill.py -k "not test_mamba_prefix_cache_mrv2"
98
device: mi250_1
99
timeout_in_minutes: 50
100
depends_on:
@@ -115,6 +115,23 @@ steps:
115
commands:
116
- pytest -v -s v1/e2e/general/test_kv_sharing_fast_prefill.py
117
- pytest -v -s v1/e2e/general/test_mamba_prefix_cache.py::test_mamba_prefix_cache_mrv2 v1/e2e/general/test_mamba_prefix_cache.py::test_mamba_prefix_cache_mrv2_async
118
+ mirror:
119
+ amd:
120
+ label: ":amd: (MI355) E2E Core Large Memory"
121
+ dind: false
122
+ device: mi355_1
123
+ num_devices: 1
124
+ timeout_in_minutes: 65
125
+ working_dir: /vllm-workspace/tests
126
+ depends_on:
127
+ - image-build-amd
128
+ source_file_dependencies:
129
+ - vllm/v1/
130
+ - tests/v1/e2e/general/
131
+ - vllm/platforms/rocm.py
132
+ commands:
133
+ - pytest -v -s v1/e2e/general/test_kv_sharing_fast_prefill.py
134
+ - pytest -v -s v1/e2e/general/test_mamba_prefix_cache.py::test_mamba_prefix_cache_mrv2 v1/e2e/general/test_mamba_prefix_cache.py::test_mamba_prefix_cache_mrv2_async
135
136
- label: ":nvidia: (L4) V1 E2E"
137
key: v1-e2e-2-gpus
.buildkite/test_areas/kernels.yaml
+45
-27
@@ -196,6 +196,8 @@ steps:
196
- vllm/_aiter_ops.py
197
- vllm/envs.py
198
- vllm/platforms/rocm.py
199
+ commands:
200
+ - pytest -v -s kernels/attention --ignore=kernels/attention/test_triton_unified_attention_diffkv.py --ignore=kernels/attention/test_rocm_aiter_mla_decode.py --ignore=kernels/attention/test_rocm_aiter_mla_decode_metadata.py --ignore=kernels/attention/test_rocm_aiter_mla_fp8_support.py --ignore=kernels/attention/test_rocm_aiter_mla_op_registration.py --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
201
202
- label: ":nvidia: (H100) Attention DiffKV Kernels"
203
key: kernels-attention-diffkv-test-h100
@@ -209,6 +211,24 @@ steps:
211
- tests/kernels/attention/test_triton_unified_attention_diffkv.py
212
commands:
213
- pytest -v -s kernels/attention/test_triton_unified_attention_diffkv.py
214
+ mirror:
215
+ amd:
216
+ label: ":amd: (MI355) Attention DiffKV Kernels"
217
+ dind: false
218
+ device: mi355_1
219
+ num_devices: 1
220
+ timeout_in_minutes: 35
221
+ working_dir: /vllm-workspace/tests
222
+ depends_on:
223
+ - image-build-amd
224
+ source_file_dependencies:
225
+ - vllm/v1/attention/ops/triton_unified_attention_diffkv.py
226
+ - vllm/v1/attention/backends/triton_attn_diffkv.py
227
+ - tests/kernels/attention/test_triton_unified_attention.py
228
+ - tests/kernels/attention/test_triton_unified_attention_diffkv.py
229
+ - vllm/platforms/rocm.py
230
+ commands:
231
+ - pytest -v -s kernels/attention/test_triton_unified_attention_diffkv.py
232
233
- label: ":nvidia: (H100) MLA Kernel Test"
234
key: kernels-flashmla-test-h100
@@ -231,6 +251,31 @@ steps:
251
- pytest -v -s kernels/attention/test_flashmla_sparse.py
252
- pytest -v -s kernels/attention/test_flashinfer_mla_decode.py
253
- pytest -v -s kernels/attention/test_mla_cross_layer_kernel_equivalence.py
254
+ mirror:
255
+ amd:
256
+ label: ":amd: (MI355) MLA Kernels"
257
+ dind: false
258
+ device: mi355_1
259
+ num_devices: 1
260
+ timeout_in_minutes: 40
261
+ working_dir: /vllm-workspace/
262
+ depends_on:
263
+ - image-build-amd
264
+ source_file_dependencies:
265
+ - vllm/v1/attention/backends/mla/rocm_aiter_mla.py
266
+ - vllm/v1/attention/selector.py
267
+ - vllm/platforms/rocm.py
268
+ - vllm/_aiter_ops.py
269
+ - tests/kernels/attention/test_rocm_aiter_mla_decode.py
270
+ - tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
271
+ - tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
272
+ - tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
273
+ commands:
274
+ - amd-smi
275
+ - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
276
+ - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode.py
277
+ - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
278
+ - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
279
280
- label: ":nvidia: (L4) Quantization Kernels Shard %N"
281
key: kernels-quantization-test
@@ -640,31 +685,6 @@ steps:
685
- pytest -v -s kernels/moe/test_moe_layer.py
686
- pytest -v -s kernels/moe/test_deepep_v2_moe.py
687
643
-- label: ":amd: (MI355) MLA Kernels"
644
- key: amd-mla-kernels-mi355
645
- dind: false
646
- device: mi355_1
647
- num_devices: 1
648
- timeout_in_minutes: 25
649
- working_dir: /vllm-workspace/
650
- depends_on:
651
- - image-build-amd
652
- source_file_dependencies:
653
- - vllm/v1/attention/backends/mla/rocm_aiter_mla.py
654
- - vllm/v1/attention/selector.py
655
- - vllm/platforms/rocm.py
656
- - vllm/_aiter_ops.py
657
- - tests/kernels/attention/test_rocm_aiter_mla_decode.py
658
- - tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
659
- - tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
660
- - tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
661
- commands:
662
- - amd-smi
663
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
664
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode.py
665
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_fp8_support.py
666
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_op_registration.py
667
-
688
- label: ":amd: (MI355) FP8 MoE Kernels"
689
key: amd-fp8-moe-kernels-mi355
690
dind: false
@@ -720,9 +740,7 @@ steps:
740
- vllm/_aiter_ops.py
741
- examples/basic/offline_inference/chat.py
742
- tests/kernels/attention/test_attention_selector.py
723
- - tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
743
commands:
744
- amd-smi
745
- python3 examples/basic/offline_inference/chat.py --attention-backend TRITON_ATTN
746
- pytest -v -s tests/kernels/attention/test_attention_selector.py
728
- - pytest -v -s tests/kernels/attention/test_rocm_aiter_mla_decode_metadata.py
.buildkite/test_areas/models_basic.yaml
+11
@@ -119,6 +119,17 @@ steps:
119
- tests/models/glm5next/
120
commands:
121
- pytest -v -s models/glm5next
122
+ mirror:
123
+ amd:
124
+ label: ":amd: (MI355) GLM5Next"
125
+ dind: false
126
+ device: mi355_1
127
+ timeout_in_minutes: 35
128
+ working_dir: "/vllm-workspace/tests"
129
+ depends_on:
130
+ - image-build-amd
131
+ source_file_dependencies:
132
+ - vllm/platforms/rocm.py
133
134
- label: ":nvidia: (H200) Qwen4 Exp"
135
key: qwen4-exp-unit-tests
.buildkite/test_areas/models_language.yaml
+22
-1
@@ -91,7 +91,7 @@ steps:
91
commands:
92
- MAMBA_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/AndreasKaratzas/mamba@fix-rocm-7.0-warp-size-constexpr'
93
- CAUSAL_CONV1D_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/Dao-AILab/causal-conv1d@v1.6.0'
94
- - pytest -v -s models/language/generation -m hybrid_model --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT --shard-id=$$BUILDKITE_PARALLEL_JOB
94
+ - pytest -v -s models/language/generation -m hybrid_model -k 'not granite-4.0-tiny-preview' --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT --shard-id=$$BUILDKITE_PARALLEL_JOB
95
96
# Granite 4 hybrid generation is sensitive to hardware-specific Triton SSD
97
# autotuning (https://github.com/vllm-project/vllm/issues/25194). Keep this one
@@ -111,6 +111,27 @@ steps:
111
- rm -rf /tmp/mamba-src && git clone --depth 1 --branch v2.3.0 https://github.com/state-spaces/mamba /tmp/mamba-src && sed -i 's/-std=c++17/-std=c++20/g' /tmp/mamba-src/setup.py && MAMBA_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation /tmp/mamba-src
112
- CAUSAL_CONV1D_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/Dao-AILab/causal-conv1d@v1.6.0'
113
- pytest -v -s models/language/generation -m hybrid_model -k 'granite-4.0-tiny-preview'
114
+ mirror:
115
+ amd:
116
+ label: ":amd: (MI355) Granite Language Model Compatibility"
117
+ dind: false
118
+ device: mi355_1
119
+ num_devices: 1
120
+ timeout_in_minutes: 80
121
+ working_dir: /vllm-workspace/tests
122
+ depends_on:
123
+ - image-build-amd
124
+ source_file_dependencies:
125
+ - vllm/
126
+ - "!vllm/distributed/kv_transfer/"
127
+ - tests/models/language/generation
128
+ commands:
129
+ - export GIT_CONFIG_COUNT=1
130
+ - export GIT_CONFIG_KEY_0=http.version
131
+ - export GIT_CONFIG_VALUE_0=HTTP/1.1
132
+ - MAMBA_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/AndreasKaratzas/mamba@fix-rocm-7.0-warp-size-constexpr'
133
+ - CAUSAL_CONV1D_FORCE_BUILD=TRUE uv pip install --system --no-build-isolation 'git+https://github.com/Dao-AILab/causal-conv1d@v1.6.0'
134
+ - pytest -v -s models/language/generation -m hybrid_model -k 'granite-4.0-tiny-preview'
135
136
- label: ":nvidia: (H200 MIG 35GB) Language Models (Extended Generation)"
137
device: h200_35gb
.buildkite/test_areas/pytorch.yaml
+14
@@ -87,6 +87,20 @@ steps:
87
- tests/compile/h100/
88
commands:
89
- "find compile/h100/ -name 'test_*.py' -print0 | xargs -0 -n1 -I{} pytest -s -v '{}'"
90
+ mirror:
91
+ amd:
92
+ label: ":amd: (MI355) PyTorch Compilation H100 Cases"
93
+ dind: false
94
+ device: mi355_1
95
+ timeout_in_minutes: 45
96
+ working_dir: "/vllm-workspace/tests"
97
+ depends_on:
98
+ - image-build-amd
99
+ source_file_dependencies:
100
+ - tests/utils.py
101
+ - csrc/
102
+ commands:
103
+ - pytest -v -s compile/h100/test_startup.py
104
105
- label: ":nvidia: (L4) PyTorch Compilation Passes"
106
key: pytorch-compilation-passes-unit-tests
.buildkite/test_areas/samplers.yaml
+22
-1
@@ -35,7 +35,7 @@ steps:
35
- vllm/_aiter_ops.py
36
- vllm/platforms/rocm.py
37
commands:
38
- - pytest -v -s samplers
38
+ - pytest -v -s samplers -k "not test_beam_search_passes_multimodal_data"
39
40
# Qwen2-Audio-7B leaves no room for KV cache on a 16 GiB slice.
41
- label: ":nvidia: (H200 MIG 35GB) Samplers Multimodal Beam Search"
@@ -51,3 +51,24 @@ steps:
51
commands:
52
- VLLM_USE_FLASHINFER_SAMPLER=0 pytest -v -s samplers/test_beam_search.py::test_beam_search_passes_multimodal_data
53
- VLLM_USE_FLASHINFER_SAMPLER=1 pytest -v -s samplers/test_beam_search.py::test_beam_search_passes_multimodal_data
54
+ mirror:
55
+ amd:
56
+ label: ":amd: (MI355) Samplers Multimodal Beam Search"
57
+ dind: false
58
+ device: mi355_1
59
+ num_devices: 1
60
+ timeout_in_minutes: 45
61
+ working_dir: /vllm-workspace/tests
62
+ depends_on:
63
+ - image-build-amd
64
+ source_file_dependencies:
65
+ - vllm/model_executor/layers
66
+ - vllm/sampling_metadata.py
67
+ - vllm/v1/sample/
68
+ - vllm/entrypoints/generate/beam_search/
69
+ - tests/samplers
70
+ - tests/conftest.py
71
+ - vllm/_aiter_ops.py
72
+ - vllm/platforms/rocm.py
73
+ commands:
74
+ - pytest -v -s samplers/test_beam_search.py::test_beam_search_passes_multimodal_data
tests/compile/h100/test_startup.py
+16
-8
@@ -2,7 +2,7 @@
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
"""Cold start and warm start tests for vLLM-compile.
4
5
-Cold start runs in a forked child (must fork before CUDA init) which
5
+Cold start runs in a separate child process which
6
populates on-disk caches and asserts cold-start counters. Warm start
7
then runs in the parent with clean in-memory state but populated caches.
8
"""
@@ -18,7 +18,7 @@ from vllm.compilation.counter import compilation_counter
18
from vllm.config import CompilationConfig, CompilationMode, CUDAGraphMode, PassConfig
19
from vllm.utils.torch_utils import is_torch_equal_or_newer
20
21
-from ...utils import fork_new_process_for_each_test
21
+from ...utils import create_new_process_for_each_test, requires_spawn_multiprocessing
22
23
MODEL = "microsoft/Phi-tiny-MoE-instruct"
24
@@ -54,17 +54,21 @@ def _cold_start(vllm_runner):
54
assert counters["aot_autograd"]["autograd_cache_hit"] == 0
55
56
57
-@fork_new_process_for_each_test
57
+@create_new_process_for_each_test()
58
@pytest.mark.parametrize("mega_aot_artifact", ["0", "1"])
59
def test_moe_startup(monkeypatch, vllm_runner, fresh_vllm_cache, mega_aot_artifact):
60
monkeypatch.setenv("VLLM_ENABLE_V1_MULTIPROCESSING", "0")
61
monkeypatch.setenv("VLLM_USE_MEGA_AOT_ARTIFACT", mega_aot_artifact)
62
monkeypatch.setenv("VLLM_DEEP_GEMM_WARMUP", "skip")
63
64
- # Cold start in a forked child (must fork before CUDA init).
64
+ # ROCm and XPU cannot fork safely after device discovery.
65
# This model has 32 identical transformer layers which produce
66
# 33 subgraphs after splitting on attention — only 3 are unique.
67
- ctx = mp.get_context("fork")
67
+ ctx = (
68
+ mp.get_context("spawn")
69
+ if requires_spawn_multiprocessing()
70
+ else mp.get_context("fork")
71
+ )
72
p = ctx.Process(target=_cold_start, args=(vllm_runner,))
73
p.start()
74
p.join()
@@ -223,13 +227,17 @@ def _cold_start_model(vllm_runner, spec: ModelStartupSpec):
227
228
229
@pytest.mark.parametrize("spec", MODEL_SPECS)
226
-@fork_new_process_for_each_test
230
+@create_new_process_for_each_test()
231
def test_model_startup(monkeypatch, vllm_runner, fresh_vllm_cache, spec):
232
monkeypatch.setenv("VLLM_ENABLE_V1_MULTIPROCESSING", "0")
233
monkeypatch.setenv("VLLM_DEEP_GEMM_WARMUP", "skip")
234
231
- # Cold start in a forked child (must fork before CUDA init).
232
- ctx = mp.get_context("fork")
235
+ # ROCm and XPU cannot fork safely after device discovery.
236
+ ctx = (
237
+ mp.get_context("spawn")
238
+ if requires_spawn_multiprocessing()
239
+ else mp.get_context("fork")
240
+ )
241
p = ctx.Process(target=_cold_start_model, args=(vllm_runner, spec))
242
p.start()
243
p.join()
tests/kernels/attention/test_triton_unified_attention.py
+2
-1
@@ -135,6 +135,7 @@ def ref_paged_attn(
135
num_seqs = len(query_lens)
136
block_tables = block_tables.cpu().numpy()
137
_, block_size, num_kv_heads, head_size = key_cache.shape
138
+ head_size_v = value_cache.shape[-1]
139
140
outputs: list[torch.Tensor] = []
141
start_idx = 0
@@ -149,7 +150,7 @@ def ref_paged_attn(
150
151
k = key_cache[block_indices].view(-1, num_kv_heads, head_size)
152
k = k[:kv_len]
152
- v = value_cache[block_indices].view(-1, num_kv_heads, head_size)
153
+ v = value_cache[block_indices].view(-1, num_kv_heads, head_size_v)
154
v = v[:kv_len]
155
156
if q.shape[1] != k.shape[1]:
tests/kernels/attention/test_triton_unified_attention_diffkv.py
+48
-33
@@ -5,6 +5,7 @@
5
import pytest
6
import torch
7
8
+from tests.kernels.attention.test_triton_unified_attention import ref_paged_attn
9
from vllm.platforms import current_platform
10
from vllm.utils.math_utils import next_power_of_2
11
from vllm.utils.torch_utils import (
@@ -81,7 +82,7 @@ def _alloc_segm_buffers(seq_threshold_3D: int, num_query_heads: int, head_size_v
82
@pytest.mark.parametrize("dtype", DTYPES)
83
@pytest.mark.parametrize("seq_threshold_3D", SEQ_THRESHOLD_3D_VALUES)
84
@torch.inference_mode()
84
-def test_triton_unified_attn_diffkv_vs_fa(
85
+def test_triton_unified_attn_diffkv_vs_reference(
86
seq_lens: list[tuple[int, int]],
87
num_heads: tuple[int, int],
88
head_sizes: tuple[int, int],
@@ -93,12 +94,13 @@ def test_triton_unified_attn_diffkv_vs_fa(
94
) -> None:
95
head_size_qk, head_size_v = head_sizes
96
96
- # DiffKV requires FA3 (Hopper) / FA4 (Blackwell) as the reference.
97
- fa_version = get_flash_attn_version(head_size=head_size_qk, head_size_v=head_size_v)
98
- if not is_flash_attn_varlen_func_available() or fa_version not in (3, 4):
99
- pytest.skip(f"FA DiffKV needs FA3/FA4 (got version {fa_version}).")
100
-
101
- from vllm.v1.attention.backends.fa_utils import flash_attn_varlen_func
97
+ # Keep the FA3/FA4 comparison on NVIDIA; ROCm uses the PyTorch oracle.
98
+ if not current_platform.is_rocm():
99
+ fa_version = get_flash_attn_version(
100
+ head_size=head_size_qk, head_size_v=head_size_v
101
+ )
102
+ if not is_flash_attn_varlen_func_available() or fa_version not in (3, 4):
103
+ pytest.skip(f"FA DiffKV needs FA3/FA4 (got version {fa_version}).")
104
105
torch.set_default_device(DEVICE_TYPE)
106
set_random_seed(0)
@@ -135,28 +137,44 @@ def test_triton_unified_attn_diffkv_vs_fa(
137
0, NUM_BLOCKS, (num_seqs, max_num_blocks_per_seq), dtype=torch.int32
138
)
139
138
- # ---- FlashAttention DiffKV (ground truth) ---------------------------
139
- # Mirror the backend: fix degenerate strides on size-1 dims so FA's
140
- # TMA path sees ≥16-byte-aligned strides (matters for num_kv_heads==1).
141
- fa_k = canonicalize_singleton_dim_strides(key_cache)
142
- fa_v = canonicalize_singleton_dim_strides(value_cache)
143
- fa_out = torch.empty(sum(query_lens), num_query_heads, head_size_v, dtype=dtype)
144
- flash_attn_varlen_func(
145
- q=query,
146
- k=fa_k,
147
- v=fa_v,
148
- out=fa_out,
149
- cu_seqlens_q=cu_query_lens,
150
- max_seqlen_q=max_query_len,
151
- seqused_k=kv_lens_t,
152
- max_seqlen_k=max_kv_len,
153
- softmax_scale=scale,
154
- causal=True,
155
- window_size=list(window_size),
156
- block_table=block_tables,
157
- softcap=soft_cap if soft_cap is not None else 0,
158
- fa_version=fa_version,
159
- )
140
+ if current_platform.is_rocm():
141
+ # FP32 also keeps the helper's in-place scaling off the kernel input.
142
+ ref_out = ref_paged_attn(
143
+ query.float(),
144
+ key_cache.float(),
145
+ value_cache.float(),
146
+ query_lens,
147
+ kv_lens,
148
+ block_tables,
149
+ scale,
150
+ sliding_window=sliding_window,
151
+ soft_cap=soft_cap,
152
+ ).to(dtype)
153
+ else:
154
+ from vllm.v1.attention.backends.fa_utils import flash_attn_varlen_func
155
+
156
+ # FA's TMA path needs aligned singleton strides (num_kv_heads == 1).
157
+ fa_k = canonicalize_singleton_dim_strides(key_cache)
158
+ fa_v = canonicalize_singleton_dim_strides(value_cache)
159
+ ref_out = torch.empty(
160
+ sum(query_lens), num_query_heads, head_size_v, dtype=dtype
161
+ )
162
+ flash_attn_varlen_func(
163
+ q=query,
164
+ k=fa_k,
165
+ v=fa_v,
166
+ out=ref_out,
167
+ cu_seqlens_q=cu_query_lens,
168
+ max_seqlen_q=max_query_len,
169
+ seqused_k=kv_lens_t,
170
+ max_seqlen_k=max_kv_len,
171
+ softmax_scale=scale,
172
+ causal=True,
173
+ window_size=list(window_size),
174
+ block_table=block_tables,
175
+ softcap=soft_cap if soft_cap is not None else 0,
176
+ fa_version=fa_version,
177
+ )
178
179
# ---- Triton DiffKV --------------------------------------------------
180
segm_output, segm_max, segm_expsum = _alloc_segm_buffers(
@@ -183,7 +201,4 @@ def test_triton_unified_attn_diffkv_vs_fa(
201
softmax_segm_expsum=segm_expsum,
202
)
203
186
- (
187
- torch.testing.assert_close(triton_out, fa_out, atol=2e-2, rtol=2e-2),
188
- f"triton vs FA max abs diff: {torch.max(torch.abs(triton_out - fa_out))}",
189
- )
204
+ torch.testing.assert_close(triton_out, ref_out, atol=2e-2, rtol=2e-2)
tests/models/glm5next/test_kda_recurrent.py
+13
-4
@@ -4,18 +4,23 @@
4
5
The decode path hands the kernel column slices of the merged ``q|k|v`` conv
6
output and of the fused ``qkvbfg_a`` projection (beta), so q/k/v/beta are
7
-token-strided rather than contiguous. The kernel must read them in place,
8
-match a pure-PyTorch recurrence, and reject layouts it cannot address.
7
+token-strided rather than contiguous. Both backends must match a pure-PyTorch
8
+recurrence. CUDA reads these slices in place and rejects unsupported layouts;
9
+the ROCm wrapper makes contiguous copies before launching its kernel.
10
"""
11
12
import pytest
13
import torch
14
14
-from vllm.models.glm5next.nvidia.ops.third_party.kda import fused_recurrent_kda
15
from vllm.platforms import current_platform
16
17
+if current_platform.is_rocm():
18
+ from vllm.models.glm5next.amd.ops.third_party.kda import fused_recurrent_kda
19
+else:
20
+ from vllm.models.glm5next.nvidia.ops.third_party.kda import fused_recurrent_kda
21
+
22
pytestmark = pytest.mark.skipif(
18
- not current_platform.is_cuda(), reason="CUDA-only Triton kernel"
23
+ not current_platform.is_cuda_alike(), reason="Requires CUDA or ROCm"
24
)
25
26
H, D = 16, 128
@@ -160,6 +165,10 @@ def test_fused_recurrent_kda_strided_inputs_bit_identical_to_contiguous(
165
torch.testing.assert_close(state, state_ref, rtol=0, atol=0)
166
167
168
+@pytest.mark.skipif(
169
+ not current_platform.is_cuda(),
170
+ reason="Only the CUDA implementation requires zero-copy token-strided layouts",
171
+)
172
@torch.inference_mode()
173
def test_fused_recurrent_kda_rejects_unaddressable_layouts():
174
"""Layouts the token-stride addressing cannot express must fail loudly