[CI][ROCm] Deprecate DinD for MI250 test groups (#56162)
Signed-off-by: Andreas Karatzas <Andreas.Karatzas@amd.com> Signed-off-by: Andreas Karatzas <akaratza@amd.com> Co-authored-by: OpenAI Codex <codex@openai.com>
Andreas Karatzas committed
Sep 18, 2026 at 16:13 UTC
2c3fb4c545005db887788747b48d040d930604df
18 files changed
+102
-6
.buildkite/scripts/hardware_ci/run-amd-test.sh
+8
@@ -1612,6 +1612,13 @@ fi
1612
1613
echo "Final commands: $commands"
1614
1615
+# Match native CPU jobs even when the container can see AMD devices.
1616
+cpu_platform_env=()
1617
+if [[ "${VLLM_CI_EXPECTED_GPU_COUNT:-1}" == "0" \
1618
+ && "$commands" != *python_only_compile.sh* ]]; then
1619
+ cpu_platform_env=(-e "VLLM_TARGET_DEVICE=cpu")
1620
+fi
1621
+
1622
standalone_merge_base_env=()
1623
if [[ "$commands" == *python_only_compile.sh* ]]; then
1624
# The ROCm test image often ships /vllm-workspace without .git. Resolve the
@@ -1769,6 +1776,7 @@ else
1776
-e "VLLM_CACHE_ROOT=${CONTAINER_CACHE_ROOT}/vllm" \
1777
-e "XDG_CACHE_HOME=${CONTAINER_CACHE_ROOT}/xdg" \
1778
-e "PYTORCH_ROCM_ARCH=" \
1779
+ "${cpu_platform_env[@]}" \
1780
"${standalone_merge_base_env[@]}" \
1781
--name "${container_name}" \
1782
"${image_name}" \
.buildkite/test-amd.yaml
+21
-1
@@ -114,6 +114,7 @@ steps:
114
- label: ":computer: (CPU) Basic Models Other" # TBD
115
timeout_in_minutes: 35
116
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
117
+ dind: false
118
agent_pool: mi250_1
119
no_gpu: true
120
optional: true
@@ -124,13 +125,15 @@ steps:
125
- tests/models/test_vision.py
126
- tests/models/test_adapters.py
127
- tests/models/transformers/fusers/
128
+ - tests/model_executor/layers/test_activation.py
129
- tests/models/test_qwen3_5_mtp_config.py
130
commands:
129
- - pytest -v -s models/test_utils.py models/test_vision.py models/test_adapters.py models/test_qwen3_5_mtp_config.py models/transformers/fusers/
131
+ - pytest -v -s models/test_utils.py models/test_vision.py models/test_adapters.py models/test_qwen3_5_mtp_config.py models/transformers/fusers/ model_executor/layers/test_activation.py
132
133
- label: ":computer: (CPU) Multimodal Processor Shard %N" # TBD
134
timeout_in_minutes: 90
135
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
136
+ dind: false
137
agent_pool: mi250_1
138
no_gpu: true
139
parallelism: 6
@@ -146,6 +149,7 @@ steps:
149
- label: ":computer: (CPU) V1 Others" # TBD
150
timeout_in_minutes: 45
151
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
152
+ dind: false
153
agent_pool: mi250_1
154
no_gpu: true
155
optional: true
@@ -166,6 +170,7 @@ steps:
170
- label: ":computer: (CPU) Async Engine, Inputs, Utils, Worker, Config" # TBD
171
timeout_in_minutes: 80
172
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
173
+ dind: false
174
agent_pool: mi250_1
175
no_gpu: true
176
optional: true
@@ -205,6 +210,7 @@ steps:
210
- label: ":computer: (CPU) Rust Frontend Cargo Style + Clippy" # TBD
211
timeout_in_minutes: 35
212
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
213
+ dind: false
214
agent_pool: mi250_1
215
no_gpu: true
216
optional: true
@@ -220,6 +226,7 @@ steps:
226
- label: ":computer: (CPU) Rust Frontend Cargo" # TBD
227
timeout_in_minutes: 35
228
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
229
+ dind: false
230
agent_pool: mi250_1
231
no_gpu: true
232
optional: true
@@ -235,6 +242,7 @@ steps:
242
- label: ":computer: (CPU) Docker Build Metadata" # TBD
243
timeout_in_minutes: 35
244
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
245
+ dind: false
246
agent_pool: mi250_1
247
no_gpu: true
248
optional: true
@@ -265,6 +273,7 @@ steps:
273
- label: ":amd: (MI250) PyTorch Fullgraph Smoke" # TBD
274
timeout_in_minutes: 65
275
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
276
+ dind: false
277
agent_pool: mi250_1
278
optional: true
279
working_dir: "/vllm-workspace/tests"
@@ -284,6 +293,7 @@ steps:
293
- label: ":amd: (MI250) Pipeline + Context Parallelism" # TBD
294
timeout_in_minutes: 90
295
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
296
+ dind: false
297
agent_pool: mi250_4
298
num_gpus: 4
299
working_dir: "/vllm-workspace/tests"
@@ -311,6 +321,7 @@ steps:
321
timeout_in_minutes: 45
322
parallelism: 2
323
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
324
+ dind: false
325
agent_pool: mi250_1
326
optional: true
327
working_dir: "/vllm-workspace/tests"
@@ -328,6 +339,7 @@ steps:
339
- label: ":amd: (MI250) Language Models (PPL)" # TBD
340
timeout_in_minutes: 65
341
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
342
+ dind: false
343
agent_pool: mi250_1
344
working_dir: "/vllm-workspace/tests"
345
source_file_dependencies:
@@ -359,6 +371,7 @@ steps:
371
- label: ":amd: (MI250) Multimodal Models (Standard) 3: llava + qwen2_vl" # TBD
372
timeout_in_minutes: 55
373
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
374
+ dind: false
375
agent_pool: mi250_1
376
optional: true
377
working_dir: "/vllm-workspace/tests"
@@ -374,6 +387,7 @@ steps:
387
- label: ":amd: (MI250) Batch Invariance" # TBD
388
timeout_in_minutes: 35
389
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
390
+ dind: false
391
agent_pool: mi250_1
392
optional: true
393
working_dir: "/vllm-workspace/tests"
@@ -392,6 +406,7 @@ steps:
406
- label: ":amd: (MI250) CUDAGraph" # TBD
407
timeout_in_minutes: 55
408
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
409
+ dind: false
410
agent_pool: mi250_1
411
optional: true
412
working_dir: "/vllm-workspace/tests"
@@ -412,6 +427,7 @@ steps:
427
- label: ":amd: (MI250) E2E Core" # TBD
428
timeout_in_minutes: 50
429
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
430
+ dind: false
431
agent_pool: mi250_1
432
optional: true
433
working_dir: "/vllm-workspace/tests"
@@ -425,6 +441,7 @@ steps:
441
- label: ":amd: (MI250) E2E Scheduling" # TBD
442
timeout_in_minutes: 55
443
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
444
+ dind: false
445
agent_pool: mi250_1
446
optional: true
447
working_dir: "/vllm-workspace/tests"
@@ -438,6 +455,7 @@ steps:
455
- label: ":amd: (MI250) V1 Engine" # TBD
456
timeout_in_minutes: 45
457
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
458
+ dind: false
459
agent_pool: mi250_1
460
optional: true
461
working_dir: "/vllm-workspace/tests"
@@ -460,6 +478,7 @@ steps:
478
- label: ":amd: (MI250) Spec Decode Draft Model" # TBD
479
timeout_in_minutes: 60
480
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
481
+ dind: false
482
agent_pool: mi250_1
483
optional: true
484
working_dir: "/vllm-workspace/tests"
@@ -477,6 +496,7 @@ steps:
496
- label: ":amd: (MI250) Spec Decode Speculators + MTP" # TBD
497
timeout_in_minutes: 75
498
mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
499
+ dind: false
500
agent_pool: mi250_1
501
optional: true
502
working_dir: "/vllm-workspace/tests"
.buildkite/test_areas/cuda.yaml
+1
@@ -49,6 +49,7 @@ steps:
49
mirror:
50
amd:
51
label: ":amd: (MI250) CUDAGraph"
52
+ dind: false
53
device: mi250_1
54
timeout_in_minutes: 55
55
depends_on:
.buildkite/test_areas/distributed.yaml
+1
@@ -416,6 +416,7 @@ steps:
416
mirror:
417
amd:
418
label: ":amd: (MI250) Pipeline + Context Parallelism"
419
+ dind: false
420
device: mi250_4
421
timeout_in_minutes: 90
422
depends_on:
.buildkite/test_areas/docker.yaml
+1
@@ -18,6 +18,7 @@ steps:
18
mirror:
19
amd:
20
label: ":amd: (MI250) Docker Build Metadata"
21
+ dind: false
22
device: mi250_1
23
no_gpu: true
24
timeout_in_minutes: 35
.buildkite/test_areas/engine.yaml
+3
@@ -52,6 +52,7 @@ steps:
52
mirror:
53
amd:
54
label: ":amd: (MI250) V1 Engine"
55
+ dind: false
56
device: mi250_1
57
timeout_in_minutes: 45
58
depends_on:
@@ -71,6 +72,7 @@ steps:
72
mirror:
73
amd:
74
label: ":amd: (MI250) E2E Scheduling"
75
+ dind: false
76
device: mi250_1
77
timeout_in_minutes: 55
78
depends_on:
@@ -90,6 +92,7 @@ steps:
92
mirror:
93
amd:
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
98
device: mi250_1
.buildkite/test_areas/kernels.yaml
+2
@@ -322,6 +322,7 @@ steps:
322
mirror:
323
amd:
324
label: ":amd: (MI250) Mamba Kernels"
325
+ dind: false
326
device: mi250_1
327
timeout_in_minutes: 55
328
depends_on:
@@ -512,6 +513,7 @@ steps:
513
mirror:
514
amd:
515
label: ":amd: (MI250) Helion Kernels Shard %N"
516
+ dind: false
517
device: mi250_1
518
timeout_in_minutes: 45
519
depends_on:
.buildkite/test_areas/misc.yaml
+1
@@ -586,6 +586,7 @@ steps:
586
mirror:
587
amd:
588
label: ":amd: (MI250) Batch Invariance"
589
+ dind: false
590
device: mi250_1
591
timeout_in_minutes: 35
592
depends_on:
.buildkite/test_areas/models_basic.yaml
+3
-1
@@ -170,12 +170,14 @@ steps:
170
- tests/models/test_adapters.py
171
- tests/models/test_qwen3_5_mtp_config.py
172
- tests/models/transformers/fusers/
173
+ - tests/model_executor/layers/test_activation.py
174
device: cpu-small
175
commands:
175
- - pytest -v -s models/test_utils.py models/test_vision.py models/test_adapters.py models/test_qwen3_5_mtp_config.py models/transformers/fusers/
176
+ - pytest -v -s models/test_utils.py models/test_vision.py models/test_adapters.py models/test_qwen3_5_mtp_config.py models/transformers/fusers/ model_executor/layers/test_activation.py
177
mirror:
178
amd:
179
label: ":amd: (MI250) Basic Models Other"
180
+ dind: false
181
device: mi250_1
182
no_gpu: true
183
working_dir: "/vllm-workspace/tests"
.buildkite/test_areas/models_language.yaml
+2
@@ -155,6 +155,7 @@ steps:
155
mirror:
156
amd:
157
label: ":amd: (MI250) Language Models (PPL)"
158
+ dind: false
159
device: mi250_1
160
timeout_in_minutes: 65
161
depends_on:
@@ -214,6 +215,7 @@ steps:
215
mirror:
216
amd:
217
label: ":amd: (MI250) Language Models (MTEB)"
218
+ dind: false
219
device: mi250_1
220
timeout_in_minutes: 60
221
depends_on:
.buildkite/test_areas/models_multimodal.yaml
+2
@@ -57,6 +57,7 @@ steps:
57
mirror:
58
amd:
59
label: ":amd: (MI250) Multimodal Models (Standard) 3: llava + qwen2_vl"
60
+ dind: false
61
device: mi250_1
62
timeout_in_minutes: 55
63
depends_on:
@@ -101,6 +102,7 @@ steps:
102
mirror:
103
amd:
104
label: ":amd: (MI250) Multimodal Processor Shard %N"
105
+ dind: false
106
device: mi250_1
107
no_gpu: true
108
working_dir: "/vllm-workspace/tests"
.buildkite/test_areas/plugins.yaml
+1
@@ -53,6 +53,7 @@ steps:
53
mirror:
54
amd:
55
label: ":amd: (MI250) Plugin Integration"
56
+ dind: false
57
device: mi250_2
58
timeout_in_minutes: 50
59
depends_on:
.buildkite/test_areas/rust_frontend_cargo.yaml
+2
@@ -17,6 +17,7 @@ steps:
17
mirror:
18
amd:
19
label: ":amd: (MI250) Rust Frontend Cargo Style + Clippy"
20
+ dind: false
21
device: mi250_1
22
no_gpu: true
23
working_dir: "/vllm-workspace"
@@ -40,6 +41,7 @@ steps:
41
mirror:
42
amd:
43
label: ":amd: (MI250) Rust Frontend Cargo"
44
+ dind: false
45
device: mi250_1
46
no_gpu: true
47
working_dir: "/vllm-workspace"
.buildkite/test_areas/samplers.yaml
+1
@@ -20,6 +20,7 @@ steps:
20
mirror:
21
amd:
22
label: ":amd: (MI250) Samplers"
23
+ dind: false
24
device: mi250_1
25
timeout_in_minutes: 40
26
depends_on:
tests/conftest.py
+1
-1
@@ -241,7 +241,7 @@ def dist_init():
241
rank=0,
242
distributed_init_method=f"file://{temp_file}",
243
local_rank=0,
244
- backend="nccl",
244
+ backend="gloo" if current_platform.is_cpu() else "nccl",
245
)
246
initialize_model_parallel(1, 1)
247
yield
tests/model_executor/layers/test_activation.py
new
+38
@@ -0,0 +1,38 @@
1
+# SPDX-License-Identifier: Apache-2.0
2
+# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
+
4
+from functools import partial
5
+
6
+import pytest
7
+import torch
8
+import torch.nn as nn
9
+
10
+from vllm.model_executor.layers.activation import GeluAndMul, SiluAndMul
11
+from vllm.platforms import CpuArchEnum, current_platform
12
+
13
+
14
+@pytest.mark.skipif(
15
+ not current_platform.is_cpu()
16
+ or current_platform.get_cpu_architecture() == CpuArchEnum.POWERPC,
17
+ reason="Native CPU activations require a non-PowerPC CPU platform",
18
+)
19
+@pytest.mark.parametrize(
20
+ "activation_factory,reference",
21
+ [
22
+ (SiluAndMul, nn.SiLU()),
23
+ (GeluAndMul, nn.GELU()),
24
+ (partial(GeluAndMul, approximate="tanh"), nn.GELU(approximate="tanh")),
25
+ ],
26
+ ids=["silu", "gelu", "gelu_tanh"],
27
+)
28
+def test_cpu_act_and_mul_without_compiled_ops(
29
+ default_vllm_config, monkeypatch, activation_factory, reference
30
+):
31
+ """CPU activations must construct and run without compiled wheel operators."""
32
+ default_vllm_config.compilation_config.custom_ops = ["all"]
33
+ monkeypatch.setattr(torch.ops, "_C", object())
34
+ x = torch.tensor([[-2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0]], device="cpu")
35
+
36
+ layer = activation_factory()
37
+
38
+ torch.testing.assert_close(layer(x), reference(x[:, :4]) * x[:, 4:])
tests/tools/test_docker_build_metadata_args.py
+6
-1
@@ -155,10 +155,15 @@ def test_vllm_openai_image_embeds_metadata_contract() -> None:
155
156
157
def test_rust_build_cache_excludes_git_metadata() -> None:
158
+ import torch
159
+
160
from vllm.platforms import current_platform
161
162
dockerfile_names = ["Dockerfile", "Dockerfile.cpu"]
161
- if not current_platform.is_rocm():
163
+ # CPU jobs can reuse ROCm artifacts, which omit the XPU Dockerfile.
164
+ if not current_platform.is_rocm() and (
165
+ not current_platform.is_cpu() or torch.version.hip is None
166
+ ):
167
dockerfile_names.append("Dockerfile.xpu")
168
for name in dockerfile_names:
169
dockerfile = (REPO_ROOT / "docker" / name).read_text()
vllm/model_executor/layers/activation.py
+8
-2
@@ -129,8 +129,11 @@ class SiluAndMul(CustomOp):
129
super().__init__(compile_native=compile_native)
130
if (
131
current_platform.is_cuda_alike()
132
- or current_platform.is_cpu()
132
or current_platform.is_xpu()
133
+ or (
134
+ current_platform.is_cpu()
135
+ and current_platform.get_cpu_architecture() == CpuArchEnum.POWERPC
136
+ )
137
):
138
self.op = torch.ops._C.silu_and_mul
139
@@ -424,8 +427,11 @@ class GeluAndMul(CustomOp):
427
raise ValueError(f"Unknown approximate mode: {approximate}")
428
if (
429
current_platform.is_cuda_alike()
427
- or current_platform.is_cpu()
430
or current_platform.is_xpu()
431
+ or (
432
+ current_platform.is_cpu()
433
+ and current_platform.get_cpu_architecture() == CpuArchEnum.POWERPC
434
+ )
435
):
436
if approximate == "none":
437
self.op = torch.ops._C.gelu_and_mul