[CI][AMD] Configure MI300 tests for native execution without DinD (#48387)
Signed-off-by: Andreas Karatzas <akaratza@amd.com>
Andreas Karatzas committed
Jul 14, 2026 at 21:14 UTC
3ad85e0de4ee88b8fe9d7fde8a3a024c92cb3c7b
23 files changed
+631
-75
.buildkite/lm-eval-harness/configs/Meta-Llama-4-Maverick-17B-128E-Instruct-FP8.yaml
+1
@@ -1,6 +1,7 @@
1
# For hf script, without -t option (tensor parallel size).
2
# bash .buildkite/lm-eval-harness/run-lm-eval-mmlupro-vllm-baseline.sh -m meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8 -l 250 -t 8 -f 5
3
model_name: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8"
4
+rocm_safetensors_load_strategy: lazy
5
required_gpu_arch:
6
- gfx942
7
- gfx950
.buildkite/lm-eval-harness/test_lm_eval_correctness.py
+5
@@ -72,6 +72,11 @@ def launch_lm_eval(eval_config, tp_size):
72
if moe_backend is not None:
73
model_args += f"moe_backend={moe_backend},"
74
75
+ if current_platform.is_rocm():
76
+ rocm_load_strategy = eval_config.get("rocm_safetensors_load_strategy")
77
+ if rocm_load_strategy is not None:
78
+ model_args += f"safetensors_load_strategy={rocm_load_strategy},"
79
+
80
env_vars = eval_config.get("env_vars", None)
81
with scoped_env_vars(env_vars):
82
results = lm_eval.simple_evaluate(
.buildkite/scripts/ci-bake-rocm.sh
+42
-16
@@ -1898,8 +1898,8 @@ confirm_remote_image_push() {
1898
fi
1899
1900
if [[ -z "${remote_revision}" \
1901
- && ${IMAGE_EXISTED_BEFORE_BUILD} -eq 0 \
1902
- && image_tag_is_commit_scoped ]]; then
1901
+ && ${IMAGE_EXISTED_BEFORE_BUILD} -eq 0 ]] \
1902
+ && image_tag_is_commit_scoped; then
1903
echo "Remote image exists under a commit-scoped tag; accepting push despite missing revision label."
1904
return 0
1905
fi
@@ -2029,36 +2029,57 @@ upload_wheel_artifacts_if_present() {
2029
local wheel_dir="./wheel-export"
2030
local artifact_dir="artifacts/vllm-rocm-install"
2031
local archive_name="vllm-rocm-install.tar.gz"
2032
+ local metadata_dir="${wheel_dir}/.vllm-ci-artifact"
2033
+ local native_base_image=""
2034
local whl=""
2035
local whl_name=""
2036
+ local -a wheels=()
2037
2038
if ! should_upload_wheel_artifacts; then
2039
return 0
2040
fi
2041
2039
- if [[ ! -d "${wheel_dir}" ]] || ! ls "${wheel_dir}"/*.whl >/dev/null 2>&1; then
2040
- echo "No ROCm wheel artifacts found in ${wheel_dir}"
2041
- return 0
2042
+ if [[ -d "${wheel_dir}" ]]; then
2043
+ mapfile -t wheels < <(find "${wheel_dir}" -maxdepth 1 -type f -name '*.whl' -print)
2044
+ fi
2045
+ if [[ ${#wheels[@]} -ne 1 ]]; then
2046
+ echo "Expected exactly one ROCm wheel in ${wheel_dir}; found ${#wheels[@]}" >&2
2047
+ return 1
2048
+ fi
2049
+ whl="${wheels[0]}"
2050
+ whl_name=$(basename "${whl}")
2051
+ native_base_image="${CI_BASE_IMAGE_TAG_COMMIT_REF:-${CI_BASE_IMAGE:-}}"
2052
+ if [[ -z "${native_base_image}" ]]; then
2053
+ echo "Native ROCm artifact requires a ci_base image reference" >&2
2054
+ return 1
2055
fi
2056
2057
echo "--- :package: Uploading ROCm vLLM install artifact"
2045
- mkdir -p "${artifact_dir}"
2058
+ rm -rf "${artifact_dir}" "${metadata_dir}"
2059
+ mkdir -p "${artifact_dir}" "${metadata_dir}"
2060
+
2061
+ printf '%s\n' "${BUILDKITE_COMMIT:-local}" > "${metadata_dir}/commit.txt"
2062
+ printf '%s\n' "${native_base_image}" > "${metadata_dir}/native-base-image.txt"
2063
+ printf '%s\n' "${CI_BASE_IMAGE:-}" > "${metadata_dir}/ci-base-image.txt"
2064
+ printf '%s\n' "${IMAGE_TAG:-}" > "${metadata_dir}/fallback-image.txt"
2065
+ printf '%s\n' "${whl_name}" > "${metadata_dir}/wheel-filename.txt"
2066
2067
tar -C "${wheel_dir}" -czf "${artifact_dir}/${archive_name}" .
2068
+ (
2069
+ cd "${artifact_dir}"
2070
+ sha256sum "${archive_name}" > "${archive_name}.sha256"
2071
+ )
2072
echo "Created ${archive_name}: $(du -sh "${artifact_dir}/${archive_name}" | cut -f1)"
2049
- printf '%s\n' "${CI_BASE_IMAGE:-}" > "${artifact_dir}/ci-base-image.txt"
2050
- printf '%s\n' "${IMAGE_TAG:-}" > "${artifact_dir}/fallback-image.txt"
2051
-
2052
- for whl in "${wheel_dir}"/*.whl; do
2053
- [[ -f "${whl}" ]] || continue
2054
- whl_name=$(basename "${whl}")
2055
- cp "${whl}" "${artifact_dir}/${whl_name}"
2056
- echo "Copied ${whl_name}: $(du -sh "${artifact_dir}/${whl_name}" | cut -f1)"
2057
- done
2073
+ cp "${metadata_dir}"/*.txt "${artifact_dir}/"
2074
+ cp "${whl}" "${artifact_dir}/${whl_name}"
2075
+ echo "Copied ${whl_name}: $(du -sh "${artifact_dir}/${whl_name}" | cut -f1)"
2076
2077
if command -v buildkite-agent >/dev/null 2>&1; then
2060
- buildkite-agent artifact upload "${artifact_dir}/*"
2078
+ buildkite-agent artifact upload "${artifact_dir}/*" || return 1
2079
echo "ROCm vLLM install artifacts uploaded to ${artifact_dir}/"
2080
+ elif [[ "${BUILDKITE:-false}" == "true" ]]; then
2081
+ echo "buildkite-agent not found; cannot upload required ROCm artifacts" >&2
2082
+ return 1
2083
else
2084
echo "Not in Buildkite, skipping artifact upload"
2085
fi
@@ -2090,6 +2111,11 @@ main() {
2111
echo "BAKE_PRINT_ONLY=1 set; skipping build"
2112
return 0
2113
fi
2114
+ if should_upload_wheel_artifacts; then
2115
+ # wheel-export is an output directory, not a BuildKit cache. Starting
2116
+ # clean prevents a failed/retried export from packaging a stale wheel.
2117
+ rm -rf ./wheel-export
2118
+ fi
2119
seed_dependency_caches_if_needed
2120
run_bake
2121
upload_wheel_artifacts_if_present
.buildkite/scripts/hardware_ci/run-amd-test.sh
+374
-24
@@ -1,7 +1,7 @@
1
#!/bin/bash
2
3
-# This script runs tests inside the corresponding ROCm docker container.
4
-# It handles both single-node and multi-node test configurations.
3
+# This script runs ROCm tests either directly in a native CI pod or inside the
4
+# corresponding Docker container. Multi-node tests continue to use Docker.
5
#
6
# Multi-node detection: Instead of matching on fragile group names, we detect
7
# multi-node jobs structurally by looking for the bracket command syntax
@@ -34,10 +34,27 @@ set -o pipefail
34
: "${CLICOLOR_FORCE:=1}"
35
: "${PY_COLORS:=1}"
36
: "${ROCM_DOCKER_TTY:=1}"
37
+: "${PYTHONFAULTHANDLER:=1}"
38
+: "${PYTEST_TIMEOUT:=2100}"
39
if [[ " ${PYTEST_ADDOPTS:-} " != *" --color"* ]]; then
40
PYTEST_ADDOPTS="${PYTEST_ADDOPTS:+${PYTEST_ADDOPTS} }--color=yes"
41
fi
40
-export BUILDKIT_PROGRESS TERM FORCE_COLOR CLICOLOR_FORCE PY_COLORS PYTEST_ADDOPTS ROCM_DOCKER_TTY
42
+if [[ " ${PYTEST_ADDOPTS:-} " != *" --durations="* ]]; then
43
+ PYTEST_ADDOPTS="${PYTEST_ADDOPTS:+${PYTEST_ADDOPTS} }--durations=25"
44
+fi
45
+if [[ " ${PYTEST_ADDOPTS:-} " != *" --durations-min="* ]]; then
46
+ PYTEST_ADDOPTS="${PYTEST_ADDOPTS:+${PYTEST_ADDOPTS} }--durations-min=1.0"
47
+fi
48
+# Dump stacks after 15 minutes, then stop an individual test after 35 minutes.
49
+if [[ " ${PYTEST_ADDOPTS:-} " != *" faulthandler_timeout="* ]]; then
50
+ PYTEST_ADDOPTS="${PYTEST_ADDOPTS:+${PYTEST_ADDOPTS} }-o faulthandler_timeout=900"
51
+fi
52
+if [[ " ${PYTEST_ADDOPTS:-} " != *" --timeout-method="* &&
53
+ " ${PYTEST_ADDOPTS:-} " != *" --timeout-method "* ]]; then
54
+ PYTEST_ADDOPTS="${PYTEST_ADDOPTS:+${PYTEST_ADDOPTS} }--timeout-method=thread"
55
+fi
56
+export BUILDKIT_PROGRESS TERM FORCE_COLOR CLICOLOR_FORCE PY_COLORS PYTEST_ADDOPTS PYTEST_TIMEOUT ROCM_DOCKER_TTY
57
+export PYTHONFAULTHANDLER
58
59
# Export Python path for commands that run directly on the host. Containerized
60
# tests set this to /vllm-workspace below so spawned Python processes do not
@@ -53,6 +70,28 @@ report_docker_usage() {
70
docker system df || true
71
}
72
73
+clear_ci_orchestration_env() {
74
+ unset -v \
75
+ VLLM_TEST_GROUP_NAME \
76
+ VLLM_CI_REQUIRE_PERSISTENT_HF_CACHE \
77
+ VLLM_CI_ARTIFACT_STEP \
78
+ VLLM_TEST_CACHE \
79
+ VLLM_CI_EXECUTION_MODE \
80
+ VLLM_CI_WORKSPACE \
81
+ VLLM_CI_REQUIRE_WORKSPACE_MOUNT \
82
+ VLLM_TEST_COMMANDS \
83
+ VLLM_CI_BRANCH \
84
+ VLLM_CI_BASE_IMAGE \
85
+ VLLM_CI_FALLBACK_IMAGE \
86
+ VLLM_CI_DOCKER_DISABLED \
87
+ VLLM_CI_ARTIFACT_GLOB \
88
+ VLLM_CI_ARTIFACT_CHECKSUM_GLOB \
89
+ VLLM_CI_EXPECTED_GPU_COUNT \
90
+ VLLM_CI_USE_ARTIFACTS \
91
+ VLLM_CI_RESULTS_ROOT \
92
+ VLLM_ALLOW_DEPRECATED_BEAM_SEARCH
93
+}
94
+
95
cleanup_network() {
96
local max_nodes=${NUM_NODES:-2}
97
for node in $(seq 0 $((max_nodes - 1))); do
@@ -145,7 +184,11 @@ prepare_artifact_image() {
184
fi
185
186
cp "${wheel_dir}"/*.whl "${context_dir}/wheels/" || return 1
148
- tar -C "${wheel_dir}" --exclude='*.whl' -cf - . \
187
+ tar -C "${wheel_dir}" \
188
+ --exclude='*.whl' \
189
+ --exclude='.vllm-ci-artifact' \
190
+ --exclude='./.vllm-ci-artifact' \
191
+ -cf - . \
192
| tar -C "${workspace_dir}" -xf - || return 1
193
cat > "${context_dir}/Dockerfile" <<'EOF'
194
ARG BASE_IMAGE
@@ -168,6 +211,257 @@ EOF
211
return 0
212
}
213
214
+is_native_runtime() {
215
+ [[ "${AMD_CI_RUNTIME:-}" == "native" || "${NATIVE_CI:-}" == "true" ]]
216
+}
217
+
218
+validate_native_workspace() {
219
+ local workspace_dir="${VLLM_CI_WORKSPACE:-/vllm-workspace}"
220
+ local workspace_real=""
221
+ local checkout_real=""
222
+ local workspace_mount=""
223
+
224
+ mkdir -p "${workspace_dir}" || return 1
225
+ workspace_real=$(readlink -m "${workspace_dir}") || return 1
226
+ if [[ -n "${BUILDKITE_BUILD_CHECKOUT_PATH:-}" ]]; then
227
+ checkout_real=$(readlink -m "${BUILDKITE_BUILD_CHECKOUT_PATH}") || return 1
228
+ if [[ "${checkout_real}" == "${workspace_real}" \
229
+ || "${checkout_real}" == "${workspace_real}/"* \
230
+ || "${workspace_real}" == "${checkout_real}/"* ]]; then
231
+ echo "Refusing to replace ${workspace_real}; it overlaps the Buildkite checkout ${checkout_real}" >&2
232
+ return 1
233
+ fi
234
+ fi
235
+ if [[ "${VLLM_CI_REQUIRE_WORKSPACE_MOUNT:-1}" == "1" ]]; then
236
+ if ! command -v findmnt >/dev/null 2>&1; then
237
+ echo "findmnt is required to verify the native workspace mount" >&2
238
+ return 1
239
+ fi
240
+ workspace_mount=$(findmnt -n -T "${workspace_real}" -o TARGET 2>/dev/null || true)
241
+ if [[ "$(readlink -m "${workspace_mount:-/}")" != "${workspace_real}" ]]; then
242
+ echo "Native CI requires a dedicated volume mounted at ${workspace_real}" >&2
243
+ return 1
244
+ fi
245
+ fi
246
+}
247
+
248
+prepare_native_workspace() {
249
+ if [[ "${VLLM_CI_USE_ARTIFACTS:-0}" != "1" ]]; then
250
+ echo "Native CI requires VLLM_CI_USE_ARTIFACTS=1"
251
+ return 1
252
+ fi
253
+ if ! command -v buildkite-agent >/dev/null 2>&1; then
254
+ echo "buildkite-agent not found; cannot download ROCm wheel artifact"
255
+ return 1
256
+ fi
257
+ validate_native_workspace || return 1
258
+
259
+ local artifact_glob="${VLLM_CI_ARTIFACT_GLOB:-artifacts/vllm-rocm-install/vllm-rocm-install.tar.gz}"
260
+ local artifact_checksum_glob="${VLLM_CI_ARTIFACT_CHECKSUM_GLOB:-${artifact_glob}.sha256}"
261
+ local artifact_step="${VLLM_CI_ARTIFACT_STEP:-image-build-amd}"
262
+ local archive=""
263
+ local checksum=""
264
+ local download_dir=""
265
+ local metadata_dir=""
266
+ local recorded_base=""
267
+ local recorded_commit=""
268
+ local recorded_wheel=""
269
+ local workspace_dir="${VLLM_CI_WORKSPACE:-/vllm-workspace}"
270
+ local wheel_dir=""
271
+ local attempt=0
272
+ local attempt_dir=""
273
+ local -a archives=()
274
+ local -a checksums=()
275
+ local -a wheels=()
276
+
277
+ artifact_work_dir=$(mktemp -d -t vllm-rocm-artifact.XXXXXX) || return 1
278
+ wheel_dir="${artifact_work_dir}/wheels"
279
+ mkdir -p "${wheel_dir}" || return 1
280
+
281
+ echo "--- Downloading ROCm wheel artifact from ${artifact_step} (native in-pod)"
282
+ for attempt in 1 2 3; do
283
+ attempt_dir="${artifact_work_dir}/download-${attempt}"
284
+ rm -rf "${attempt_dir}" || return 1
285
+ mkdir -p "${attempt_dir}" || return 1
286
+ if buildkite-agent artifact download \
287
+ "${artifact_glob}" "${attempt_dir}" --step "${artifact_step}" \
288
+ && buildkite-agent artifact download \
289
+ "${artifact_checksum_glob}" "${attempt_dir}" --step "${artifact_step}"; then
290
+ download_dir="${attempt_dir}"
291
+ break
292
+ fi
293
+ echo "Artifact download attempt ${attempt}/3 failed"
294
+ if [[ "${attempt}" -lt 3 ]]; then
295
+ sleep $((attempt * 2))
296
+ fi
297
+ done
298
+ if [[ -z "${download_dir}" ]]; then
299
+ echo "Failed to download ${artifact_glob} and ${artifact_checksum_glob} from ${artifact_step}"
300
+ return 1
301
+ fi
302
+
303
+ mapfile -t archives < <(
304
+ find "${download_dir}" -name "vllm-rocm-install.tar.gz" -type f -print
305
+ )
306
+ mapfile -t checksums < <(
307
+ find "${download_dir}" -name "vllm-rocm-install.tar.gz.sha256" -type f -print
308
+ )
309
+ if [[ ${#archives[@]} -ne 1 || ${#checksums[@]} -ne 1 ]]; then
310
+ echo "Expected exactly one ROCm archive and checksum; found ${#archives[@]} archive(s) and ${#checksums[@]} checksum(s)" >&2
311
+ return 1
312
+ fi
313
+ archive="${archives[0]}"
314
+ checksum="${checksums[0]}"
315
+ if [[ "$(dirname "${archive}")" != "$(dirname "${checksum}")" ]]; then
316
+ echo "ROCm archive and checksum were downloaded to different directories" >&2
317
+ return 1
318
+ fi
319
+ (
320
+ cd "$(dirname "${archive}")"
321
+ sha256sum -c "$(basename "${checksum}")"
322
+ ) || return 1
323
+
324
+ tar --no-same-owner -xzf "${archive}" -C "${wheel_dir}" || return 1
325
+ mapfile -t wheels < <(
326
+ find "${wheel_dir}" -maxdepth 1 -type f -name '*.whl' -print
327
+ )
328
+ if [[ ${#wheels[@]} -ne 1 ]]; then
329
+ echo "ROCm artifact must contain exactly one top-level wheel; found ${#wheels[@]}" >&2
330
+ return 1
331
+ fi
332
+ metadata_dir="${wheel_dir}/.vllm-ci-artifact"
333
+ for metadata_file in commit.txt native-base-image.txt wheel-filename.txt; do
334
+ if [[ ! -s "${metadata_dir}/${metadata_file}" ]]; then
335
+ echo "ROCm artifact metadata is missing ${metadata_file}" >&2
336
+ return 1
337
+ fi
338
+ done
339
+ for metadata_file in ci-base-image.txt fallback-image.txt; do
340
+ if [[ ! -f "${metadata_dir}/${metadata_file}" ]]; then
341
+ echo "ROCm artifact metadata is missing ${metadata_file}" >&2
342
+ return 1
343
+ fi
344
+ done
345
+
346
+ recorded_commit=$(tr -d '\r\n' < "${metadata_dir}/commit.txt")
347
+ recorded_base=$(tr -d '\r\n' < "${metadata_dir}/native-base-image.txt")
348
+ recorded_wheel=$(tr -d '\r\n' < "${metadata_dir}/wheel-filename.txt")
349
+ if [[ -z "${BUILDKITE_COMMIT:-}" || "${recorded_commit}" != "${BUILDKITE_COMMIT}" ]]; then
350
+ echo "ROCm artifact commit ${recorded_commit} does not match ${BUILDKITE_COMMIT:-unset}" >&2
351
+ return 1
352
+ fi
353
+ if [[ -z "${VLLM_CI_BASE_IMAGE:-}" || "${recorded_base}" != "${VLLM_CI_BASE_IMAGE}" ]]; then
354
+ echo "ROCm artifact base ${recorded_base} does not match ${VLLM_CI_BASE_IMAGE:-unset}" >&2
355
+ return 1
356
+ fi
357
+ if [[ "${recorded_wheel}" != "$(basename "${wheels[0]}")" ]]; then
358
+ echo "ROCm artifact wheel manifest ${recorded_wheel} does not match $(basename "${wheels[0]}")" >&2
359
+ return 1
360
+ fi
361
+ for required_dir in tests .buildkite requirements; do
362
+ if [[ ! -d "${wheel_dir}/${required_dir}" ]]; then
363
+ echo "ROCm wheel artifact did not contain ${required_dir}/" >&2
364
+ return 1
365
+ fi
366
+ done
367
+
368
+ echo "--- Installing ROCm wheel into pod environment"
369
+ python3 -m pip install --no-deps --force-reinstall "${wheels[0]}" || return 1
370
+
371
+ echo "--- Preparing ${workspace_dir} from artifact"
372
+ find "${workspace_dir}" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + || return 1
373
+ tar -C "${wheel_dir}" \
374
+ --exclude='*.whl' \
375
+ --exclude='.vllm-ci-artifact' \
376
+ --exclude='./.vllm-ci-artifact' \
377
+ -cf - . | tar --no-same-owner -C "${workspace_dir}" -xf - || return 1
378
+ if [[ ! -d "${workspace_dir}/tests" ]]; then
379
+ echo "Failed to stage the native test workspace" >&2
380
+ return 1
381
+ fi
382
+
383
+ return 0
384
+}
385
+
386
+initialize_native_environment() {
387
+ local job_id="${BUILDKITE_JOB_ID:-${BUILDKITE_PARALLEL_JOB:-local}}"
388
+ local job_id_suffix=""
389
+ local native_root=""
390
+ local hf_mount=""
391
+
392
+ if [[ "$(id -u)" -ne 0 ]]; then
393
+ echo "Native ROCm CI currently requires the ci_base container to run as root" >&2
394
+ return 1
395
+ fi
396
+
397
+ job_id="${job_id//[^A-Za-z0-9_.-]/_}"
398
+ job_id_suffix="${job_id##*-}"
399
+ job_id_suffix="${job_id_suffix:0:12}"
400
+ native_root="/tmp/vllm-native-${job_id}"
401
+ TMPDIR="/tmp/vllm-${job_id_suffix}/tmp"
402
+ VLLM_RPC_BASE_PATH="/tmp"
403
+ : "${TORCHINDUCTOR_CACHE_DIR:=${native_root}/cache/torchinductor}"
404
+ : "${TRITON_CACHE_DIR:=${native_root}/cache/triton}"
405
+ : "${VLLM_CACHE_ROOT:=${native_root}/cache/vllm}"
406
+ : "${XDG_CACHE_HOME:=${native_root}/cache/xdg}"
407
+ : "${HF_HOME:=/home/buildkite-agent/huggingface}"
408
+ : "${HF_HUB_DOWNLOAD_TIMEOUT:=300}"
409
+ : "${HF_HUB_ETAG_TIMEOUT:=60}"
410
+ export TMPDIR VLLM_RPC_BASE_PATH
411
+ export TORCHINDUCTOR_CACHE_DIR TRITON_CACHE_DIR VLLM_CACHE_ROOT XDG_CACHE_HOME
412
+ export HF_HOME HF_HUB_DOWNLOAD_TIMEOUT HF_HUB_ETAG_TIMEOUT
413
+ export PYTORCH_ROCM_ARCH=""
414
+
415
+ mkdir -p "${TMPDIR}" \
416
+ "${TORCHINDUCTOR_CACHE_DIR}" \
417
+ "${TRITON_CACHE_DIR}" \
418
+ "${VLLM_CACHE_ROOT}" \
419
+ "${XDG_CACHE_HOME}" \
420
+ "${HF_HOME}" || return 1
421
+
422
+ if [[ "${VLLM_CI_REQUIRE_PERSISTENT_HF_CACHE:-0}" == "1" ]]; then
423
+ if ! command -v findmnt >/dev/null 2>&1; then
424
+ echo "findmnt is required to verify the native Hugging Face cache mount" >&2
425
+ return 1
426
+ fi
427
+ hf_mount=$(findmnt -n -T "${HF_HOME}" -o TARGET 2>/dev/null || true)
428
+ if [[ -z "${hf_mount}" || "${hf_mount}" == "/" ]]; then
429
+ echo "Native CI requires a persistent volume mounted at or above ${HF_HOME}" >&2
430
+ return 1
431
+ fi
432
+ fi
433
+}
434
+
435
+run_native_preflight() {
436
+ local expected_gpus="${VLLM_CI_EXPECTED_GPU_COUNT:-1}"
437
+
438
+ if [[ ! "${expected_gpus}" =~ ^[0-9]+$ ]]; then
439
+ echo "Invalid VLLM_CI_EXPECTED_GPU_COUNT=${expected_gpus}" >&2
440
+ return 1
441
+ fi
442
+
443
+ python3 -c "import encodings, importlib.metadata as im, importlib.util as iu; [im.version(d) for d in ('transformers', 'torch', 'ray', 'sympy', 'markupsafe', 'vllm')]; missing=[m for m in ('torch.utils.model_zoo', 'transformers.models.nomic_bert', 'ray.dag', 'sympy.physics', 'markupsafe._speedups') if iu.find_spec(m) is None]; assert not missing, missing" || return 1
444
+
445
+ if [[ "${expected_gpus}" == "0" ]]; then
446
+ echo "Native CPU-only AMD job: skipping ROCm device validation"
447
+ return 0
448
+ fi
449
+
450
+ echo "--- ROCm info"
451
+ rocminfo || return 1
452
+ VLLM_CI_EXPECTED_GPU_COUNT="${expected_gpus}" python3 - <<'PY'
453
+import os
454
+
455
+import torch
456
+
457
+expected = int(os.environ["VLLM_CI_EXPECTED_GPU_COUNT"])
458
+assert torch.version.hip, "PyTorch is not a ROCm build"
459
+assert torch.cuda.is_available(), "ROCm GPU is not available to PyTorch"
460
+actual = torch.cuda.device_count()
461
+assert actual == expected, f"Expected {expected} ROCm GPU(s), found {actual}"
462
+PY
463
+}
464
+
465
is_multi_node() {
466
local cmds="$1"
467
# Primary signal: NUM_NODES environment variable set by the pipeline
@@ -350,7 +644,58 @@ re_quote_pytest_markers() {
644
# Main
645
###############################################################################
646
353
-# --- GPU initialization ---
647
+if is_native_runtime; then
648
+ echo "--- Native in-pod ROCm CI (AMD_CI_RUNTIME=${AMD_CI_RUNTIME:-unset}, NATIVE_CI=${NATIVE_CI:-unset})"
649
+ artifact_work_dir=""
650
+
651
+ cleanup_native_workspace() {
652
+ if [[ -n "${artifact_work_dir}" ]]; then
653
+ rm -rf "${artifact_work_dir}"
654
+ fi
655
+ }
656
+ trap cleanup_native_workspace EXIT
657
+
658
+ if [[ -n "${VLLM_TEST_COMMANDS:-}" ]]; then
659
+ commands="${VLLM_TEST_COMMANDS}"
660
+ commands_source="env"
661
+ else
662
+ commands="$*"
663
+ commands_source="argv"
664
+ if [[ -z "$commands" ]]; then
665
+ echo "Error: No test commands provided for native CI." >&2
666
+ exit 1
667
+ fi
668
+ fi
669
+
670
+ if [[ "$commands_source" == "argv" ]]; then
671
+ commands=$(re_quote_pytest_markers "$commands")
672
+ fi
673
+
674
+ if is_multi_node "$commands"; then
675
+ echo "Native CI does not support multi-node jobs yet."
676
+ exit 1
677
+ fi
678
+
679
+ if ! initialize_native_environment; then
680
+ echo "Failed to initialize the native test environment"
681
+ exit 1
682
+ fi
683
+ if ! prepare_native_workspace; then
684
+ echo "Failed to prepare native test workspace"
685
+ exit 1
686
+ fi
687
+
688
+ export PYTHONPATH="${VLLM_CI_WORKSPACE:-/vllm-workspace}"
689
+
690
+ echo "Native test commands: $commands"
691
+ run_native_preflight || exit 1
692
+ # Keep AMD CI orchestration variables out of vLLM's runtime environment.
693
+ clear_ci_orchestration_env
694
+ /bin/bash -o pipefail -c "${commands}"
695
+ handle_pytest_exit "$?"
696
+fi
697
+
698
+# --- GPU initialization for legacy Docker execution ---
699
echo "--- ROCm info"
700
rocminfo
701
@@ -452,25 +797,27 @@ fi
797
798
echo "Final commands: $commands"
799
455
-# The ROCm test image often ships /vllm-workspace without .git (artifact tarball unpack).
456
-# tests/standalone_tests/python_only_compile.sh uses merge-base(HEAD, origin/main) for
457
-# wheels.vllm.ai; compute on the agent (full git checkout) and pass into the container.
458
-vllm_standalone_merge_base=""
459
-checkout="${BUILDKITE_BUILD_CHECKOUT_PATH:-}"
460
-if [[ -z "${checkout}" || ! -d "${checkout}" ]]; then
461
- checkout="."
462
-fi
463
-# Pass safe.directory per-command (-c) because buildkite runs will always fail
464
-# the next check on git 2.35.2+ due to mixed uses of root and buildkite-agent/uids.
465
-if git -c "safe.directory=${checkout}" -C "${checkout}" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
466
- vllm_standalone_merge_base="$(
467
- git -c "safe.directory=${checkout}" -C "${checkout}" merge-base HEAD origin/main 2>/dev/null || true
468
- )"
469
-fi
470
-if [[ -z "${vllm_standalone_merge_base}" ]]; then
471
- vllm_standalone_merge_base="${BUILDKITE_COMMIT:-}"
800
+standalone_merge_base_env=()
801
+if [[ "$commands" == *python_only_compile.sh* ]]; then
802
+ # The ROCm test image often ships /vllm-workspace without .git. Resolve the
803
+ # wheels.vllm.ai commit from the agent checkout for this test only.
804
+ vllm_standalone_merge_base=""
805
+ checkout="${BUILDKITE_BUILD_CHECKOUT_PATH:-}"
806
+ if [[ -z "${checkout}" || ! -d "${checkout}" ]]; then
807
+ checkout="."
808
+ fi
809
+ # Pass safe.directory per-command because Buildkite uses mixed user IDs.
810
+ if git -c "safe.directory=${checkout}" -C "${checkout}" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
811
+ vllm_standalone_merge_base="$(
812
+ git -c "safe.directory=${checkout}" -C "${checkout}" merge-base HEAD origin/main 2>/dev/null || true
813
+ )"
814
+ fi
815
+ if [[ -z "${vllm_standalone_merge_base}" ]]; then
816
+ vllm_standalone_merge_base="${BUILDKITE_COMMIT:-}"
817
+ fi
818
+ echo "INFO: passing CI_STANDALONE_MERGE_BASE into container: ${vllm_standalone_merge_base}"
819
+ standalone_merge_base_env=(-e "CI_STANDALONE_MERGE_BASE=${vllm_standalone_merge_base}")
820
fi
473
-echo "INFO: passing VLLM_STANDALONE_MERGE_BASE into container: ${vllm_standalone_merge_base}"
821
822
MYPYTHONPATH="/vllm-workspace"
823
@@ -501,6 +848,7 @@ else
848
fi
849
850
# --- Route: multi-node vs single-node ---
851
+clear_ci_orchestration_env
852
if is_multi_node "$commands"; then
853
echo "--- Multi-node job detected"
854
export DCKR_VER=$(docker --version | sed 's/Docker version \(.*\), build .*/\1/')
@@ -589,7 +937,9 @@ else
937
-e FORCE_COLOR \
938
-e CLICOLOR_FORCE \
939
-e PY_COLORS \
940
+ -e PYTHONFAULTHANDLER \
941
-e PYTEST_ADDOPTS \
942
+ -e PYTEST_TIMEOUT \
943
-v "${HF_CACHE}:${HF_MOUNT}" \
944
-e "HF_HOME=${HF_MOUNT}" \
945
-e "PYTHONPATH=${MYPYTHONPATH}" \
@@ -599,7 +949,7 @@ else
949
-e "VLLM_CACHE_ROOT=${CONTAINER_CACHE_ROOT}/vllm" \
950
-e "XDG_CACHE_HOME=${CONTAINER_CACHE_ROOT}/xdg" \
951
-e "PYTORCH_ROCM_ARCH=" \
602
- -e "VLLM_STANDALONE_MERGE_BASE=${vllm_standalone_merge_base}" \
952
+ "${standalone_merge_base_env[@]}" \
953
--name "${container_name}" \
954
"${image_name}" \
955
/bin/bash -c "${CONTAINER_PREFLIGHT} && ${commands}"
.buildkite/test-amd.yaml
+155
-23
@@ -14,6 +14,8 @@
14
# command(str): the single command to run for tests. incompatible with commands.
15
# commands(list): the list of commands to run for the test. incompatible with command.
16
# mirror_hardwares(list): the list of hardware to run the test on as well. currently only supports [amdexperimental]
17
+# dind(bool): when false, run the job directly in the AMD Kubernetes pod.
18
+# When true or omitted, use the legacy Docker-in-Docker path.
19
# num_gpus(int): override the number of GPUs for the test. defaults to 1 GPU. currently supports 2,4.
20
# num_nodes(int): whether to simulate multi-node setup by launching multiple containers on one host,
21
# in this case, commands must be specified. the first command runs on the first host, the second
@@ -469,6 +471,7 @@ steps:
471
- label: Basic Correctness # TBD
472
timeout_in_minutes: 180
473
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
474
+ dind: false
475
agent_pool: mi300_1
476
fast_check: true
477
working_dir: "/vllm-workspace/tests"
@@ -486,6 +489,7 @@ steps:
489
- label: Distributed Model Tests (2 GPUs) # TBD
490
timeout_in_minutes: 180
491
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
492
+ dind: false
493
agent_pool: mi300_2
494
num_gpus: 2
495
optional: true
@@ -515,6 +519,7 @@ steps:
519
- label: Benchmarks CLI Test # TBD
520
timeout_in_minutes: 180
521
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
522
+ dind: false
523
agent_pool: mi300_1
524
optional: true
525
working_dir: "/vllm-workspace/tests"
@@ -529,6 +534,7 @@ steps:
534
- label: PyTorch Compilation Unit Tests # TBD
535
timeout_in_minutes: 180
536
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
537
+ dind: false
538
agent_pool: mi300_1
539
optional: true
540
working_dir: "/vllm-workspace/tests"
@@ -548,6 +554,7 @@ steps:
554
- label: Fusion E2E Config Sweep (H100-MI300) # TBD
555
timeout_in_minutes: 180
556
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
557
+ dind: false
558
agent_pool: mi300_1
559
num_gpus: 1
560
working_dir: "/vllm-workspace/"
@@ -568,6 +575,7 @@ steps:
575
- label: Fusion E2E Quick (H100-MI300) # TBD
576
timeout_in_minutes: 180
577
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
578
+ dind: false
579
agent_pool: mi300_1
580
num_gpus: 1
581
working_dir: "/vllm-workspace/"
@@ -589,6 +597,7 @@ steps:
597
- label: PyTorch Compilation Passes Unit Tests # TBD
598
timeout_in_minutes: 180
599
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
600
+ dind: false
601
agent_pool: mi300_1
602
working_dir: "/vllm-workspace/tests"
603
source_file_dependencies:
@@ -600,6 +609,7 @@ steps:
609
- label: PyTorch Fullgraph # TBD
610
timeout_in_minutes: 180
611
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
612
+ dind: false
613
agent_pool: mi300_1
614
optional: true
615
working_dir: "/vllm-workspace/tests"
@@ -617,6 +627,7 @@ steps:
627
- label: Pytorch Nightly Dependency Override Check # TBD
628
timeout_in_minutes: 180
629
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
630
+ dind: false
631
agent_pool: mi300_1
632
optional: true
633
soft_fail: true
@@ -630,6 +641,7 @@ steps:
641
- label: Distributed Compile Unit Tests (2xH100-2xMI300) # TBD
642
timeout_in_minutes: 180
643
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
644
+ dind: false
645
agent_pool: mi300_2
646
num_gpus: 2
647
working_dir: "/vllm-workspace/"
@@ -650,6 +662,7 @@ steps:
662
- label: Platform Tests # TBD
663
timeout_in_minutes: 180
664
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
665
+ dind: false
666
agent_pool: mi300_1
667
working_dir: "/vllm-workspace/tests"
668
source_file_dependencies:
@@ -664,6 +677,7 @@ steps:
677
- label: Async Engine, Inputs, Utils, Worker # TBD
678
timeout_in_minutes: 180
679
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
680
+ dind: false
681
agent_pool: mi300_1
682
working_dir: "/vllm-workspace/tests"
683
source_file_dependencies:
@@ -681,6 +695,7 @@ steps:
695
- label: Distributed Comm Ops # TBD
696
timeout_in_minutes: 180
697
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
698
+ dind: false
699
agent_pool: mi300_2
700
num_gpus: 2
701
working_dir: "/vllm-workspace/tests"
@@ -697,12 +712,14 @@ steps:
712
- label: EPLB Algorithm # TBD
713
timeout_in_minutes: 180
714
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
715
+ dind: false
716
agent_pool: mi300_1
717
optional: true
718
working_dir: "/vllm-workspace/tests"
719
source_file_dependencies:
720
- vllm/distributed/eplb
721
- tests/distributed/test_eplb_algo.py
722
+ - tests/distributed/test_eplb_utils.py
723
- vllm/platforms/rocm.py
724
commands:
725
- pytest -v -s distributed/test_eplb_algo.py
@@ -711,6 +728,7 @@ steps:
728
- label: EPLB Execution # TBD
729
timeout_in_minutes: 180
730
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
731
+ dind: false
732
agent_pool: mi300_4
733
num_gpus: 4
734
working_dir: "/vllm-workspace/tests"
@@ -726,6 +744,7 @@ steps:
744
- label: Distributed Tests (2xH100-2xMI300) # TBD
745
timeout_in_minutes: 180
746
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
747
+ dind: false
748
agent_pool: mi300_2
749
num_gpus: 2
750
working_dir: "/vllm-workspace/"
@@ -752,6 +771,7 @@ steps:
771
- label: Distributed Tests (4xA100-4xMI300) # TBD
772
timeout_in_minutes: 180
773
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
774
+ dind: false
775
agent_pool: mi300_4
776
num_gpus: 4
777
optional: true
@@ -767,6 +787,7 @@ steps:
787
- label: Distributed Torchrun + Examples (4 GPUs) # TBD
788
timeout_in_minutes: 180
789
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
790
+ dind: false
791
agent_pool: mi300_4
792
num_gpus: 4
793
working_dir: "/vllm-workspace/tests"
@@ -792,6 +813,7 @@ steps:
813
- label: Elastic EP Scaling Test # TBD
814
timeout_in_minutes: 180
815
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
816
+ dind: false
817
agent_pool: mi300_4
818
num_gpus: 4
819
optional: true
@@ -809,6 +831,7 @@ steps:
831
- label: RayExecutorV2 (4 GPUs) # TBD
832
timeout_in_minutes: 180
833
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
834
+ dind: false
835
agent_pool: mi300_4
836
num_gpus: 4
837
working_dir: "/vllm-workspace/tests"
@@ -831,6 +854,7 @@ steps:
854
- label: Distributed Tests (8xH100-8xMI300) # TBD
855
timeout_in_minutes: 180
856
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
857
+ dind: false
858
agent_pool: mi300_8
859
num_gpus: 8
860
optional: true
@@ -851,6 +875,7 @@ steps:
875
- label: Entrypoints Unit Tests # TBD
876
timeout_in_minutes: 180
877
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
878
+ dind: false
879
agent_pool: mi300_1
880
fast_check: true
881
working_dir: "/vllm-workspace/tests"
@@ -866,6 +891,7 @@ steps:
891
- label: Entrypoints Integration (LLM) # TBD
892
timeout_in_minutes: 180
893
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
894
+ dind: false
895
agent_pool: mi300_1
896
optional: true
897
fast_check: true
@@ -882,6 +908,7 @@ steps:
908
- label: Entrypoints Integration (API Server) # TBD
909
timeout_in_minutes: 180
910
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
911
+ dind: false
912
agent_pool: mi300_1
913
optional: true
914
fast_check: true
@@ -899,6 +926,7 @@ steps:
926
- label: Entrypoints Integration (API Server OpenAI - Part 1) # TBD
927
timeout_in_minutes: 180
928
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
929
+ dind: false
930
agent_pool: mi300_1
931
fast_check: true
932
optional: true
@@ -914,6 +942,7 @@ steps:
942
- label: Entrypoints Integration (API Server OpenAI - Part 2) # TBD
943
timeout_in_minutes: 180
944
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
945
+ dind: false
946
agent_pool: mi300_1
947
fast_check: true
948
optional: true
@@ -930,6 +959,7 @@ steps:
959
- label: Entrypoints Integration (API Server Generate) # TBD
960
timeout_in_minutes: 180
961
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
962
+ dind: false
963
agent_pool: mi300_1
964
optional: true
965
fast_check: true
@@ -950,6 +980,7 @@ steps:
980
- label: Entrypoints Integration (Responses API) # TBD
981
timeout_in_minutes: 180
982
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
983
+ dind: false
984
agent_pool: mi300_1
985
fast_check: true
986
working_dir: "/vllm-workspace/tests"
@@ -963,6 +994,7 @@ steps:
994
- label: Entrypoints Integration (Speech to Text) # TBD
995
timeout_in_minutes: 180
996
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
997
+ dind: false
998
agent_pool: mi300_1
999
fast_check: true
1000
working_dir: "/vllm-workspace/tests"
@@ -976,6 +1008,7 @@ steps:
1008
- label: Entrypoints Integration (Multimodal)
1009
timeout_in_minutes: 180
1010
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1011
+ dind: false
1012
agent_pool: mi300_1
1013
fast_check: true
1014
working_dir: "/vllm-workspace/tests"
@@ -989,6 +1022,7 @@ steps:
1022
- label: Entrypoints Integration (Pooling) # TBD
1023
timeout_in_minutes: 180
1024
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1025
+ dind: false
1026
agent_pool: mi300_1
1027
fast_check: true
1028
working_dir: "/vllm-workspace/tests"
@@ -1002,6 +1036,7 @@ steps:
1036
- label: OpenAI API correctness # TBD
1037
timeout_in_minutes: 180
1038
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1039
+ dind: false
1040
agent_pool: mi300_1
1041
optional: true
1042
working_dir: "/vllm-workspace/tests"
@@ -1023,6 +1058,7 @@ steps:
1058
- label: DeepSeek V2-Lite Prefetch Offload Accuracy (H100-MI300) # TBD
1059
timeout_in_minutes: 180
1060
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1061
+ dind: false
1062
agent_pool: mi300_1
1063
num_gpus: 1
1064
working_dir: "/vllm-workspace"
@@ -1043,6 +1079,7 @@ steps:
1079
- label: LM Eval Small Models # TBD
1080
timeout_in_minutes: 180
1081
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1082
+ dind: false
1083
agent_pool: mi300_1
1084
working_dir: "/vllm-workspace/tests"
1085
source_file_dependencies:
@@ -1060,6 +1097,7 @@ steps:
1097
- label: MRCR Eval Small Models # TBD
1098
timeout_in_minutes: 180
1099
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1100
+ dind: false
1101
agent_pool: mi300_1
1102
optional: true
1103
working_dir: "/vllm-workspace/tests"
@@ -1077,6 +1115,7 @@ steps:
1115
- label: LM Eval Small Models (MI300) # TBD
1116
timeout_in_minutes: 180
1117
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1118
+ dind: false
1119
agent_pool: mi300_1
1120
optional: true
1121
working_dir: "/vllm-workspace/.buildkite/lm-eval-harness"
@@ -1095,6 +1134,7 @@ steps:
1134
- label: Multi-Modal Accuracy Eval (Small Models) # TBD
1135
timeout_in_minutes: 180
1136
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1137
+ dind: false
1138
agent_pool: mi300_1
1139
optional: true
1140
working_dir: "/vllm-workspace/.buildkite/lm-eval-harness"
@@ -1110,6 +1150,7 @@ steps:
1150
- label: GPQA Eval (GPT-OSS) (2xH100-2xMI300) # TBD
1151
timeout_in_minutes: 180
1152
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1153
+ dind: false
1154
agent_pool: mi300_2
1155
num_gpus: 2
1156
optional: true
@@ -1132,7 +1173,9 @@ steps:
1173
- label: LM Eval Small Models (2xB200-2xMI300) # TBD
1174
timeout_in_minutes: 180
1175
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1176
+ dind: false
1177
agent_pool: mi300_2
1178
+ num_gpus: 2
1179
working_dir: "/vllm-workspace/tests"
1180
source_file_dependencies:
1181
- csrc/
@@ -1149,6 +1192,7 @@ steps:
1192
- label: DeepSeek V2-Lite Sync EPLB Accuracy (4xH100-4xMI300) # TBD
1193
timeout_in_minutes: 180
1194
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1195
+ dind: false
1196
agent_pool: mi300_4
1197
num_gpus: 4
1198
optional: true
@@ -1171,6 +1215,7 @@ steps:
1215
- label: LM Eval Large Models (4xA100-4xMI300) # TBD
1216
timeout_in_minutes: 180
1217
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1218
+ dind: false
1219
agent_pool: mi300_4
1220
num_gpus: 4
1221
optional: true
@@ -1191,7 +1236,9 @@ steps:
1236
- label: Qwen3-30B-A3B-FP8-block Sync EPLB Accuracy (4xH100-4xMI300) # TBD
1237
timeout_in_minutes: 180
1238
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1239
+ dind: false
1240
agent_pool: mi300_4
1241
+ num_gpus: 4
1242
optional: true
1243
working_dir: "/vllm-workspace"
1244
source_file_dependencies:
@@ -1211,6 +1258,7 @@ steps:
1258
- label: Qwen3-30B-A3B-FP8 DP4 Async EPLB Accuracy (4xH100-4xMI300) # TBD
1259
timeout_in_minutes: 180
1260
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1261
+ dind: false
1262
agent_pool: mi300_4
1263
num_gpus: 4
1264
optional: true
@@ -1232,6 +1280,7 @@ steps:
1280
- label: Qwen3-Next-80B-A3B-Instruct MTP Async EPLB Accuracy # TBD
1281
timeout_in_minutes: 180
1282
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1283
+ dind: false
1284
agent_pool: mi300_4
1285
num_gpus: 4
1286
optional: true
@@ -1254,6 +1303,7 @@ steps:
1303
- label: LM Eval Large Models (8xH200-8xMI300) # TBD
1304
timeout_in_minutes: 180
1305
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1306
+ dind: false
1307
agent_pool: mi300_8
1308
optional: true
1309
num_gpus: 8
@@ -1276,6 +1326,7 @@ steps:
1326
- label: ROCm LM Eval Large Models (8 GPUs) # TBD
1327
timeout_in_minutes: 180
1328
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1329
+ dind: false
1330
agent_pool: mi300_8
1331
optional: true
1332
num_gpus: 8
@@ -1299,6 +1350,7 @@ steps:
1350
- label: Examples # TBD
1351
timeout_in_minutes: 180
1352
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1353
+ dind: false
1354
agent_pool: mi300_1
1355
optional: true
1356
working_dir: "/vllm-workspace/examples"
@@ -1335,6 +1387,7 @@ steps:
1387
- label: vLLM IR Tests # TBD
1388
timeout_in_minutes: 180
1389
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1390
+ dind: false
1391
agent_pool: mi300_1
1392
optional: true
1393
working_dir: "/vllm-workspace/"
@@ -1350,6 +1403,7 @@ steps:
1403
- label: Kernels Attention Test %N # TBD
1404
timeout_in_minutes: 180
1405
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1406
+ dind: false
1407
agent_pool: mi300_1
1408
optional: true
1409
parallelism: 2
@@ -1368,6 +1422,7 @@ steps:
1422
- label: Kernels Core Operation Test # TBD
1423
timeout_in_minutes: 180
1424
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1425
+ dind: false
1426
agent_pool: mi300_1
1427
working_dir: "/vllm-workspace/tests"
1428
source_file_dependencies:
@@ -1384,6 +1439,7 @@ steps:
1439
- label: Kernels KDA Test # TBD
1440
timeout_in_minutes: 180
1441
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1442
+ dind: false
1443
agent_pool: mi300_1
1444
optional: true
1445
working_dir: "/vllm-workspace/tests"
@@ -1399,6 +1455,7 @@ steps:
1455
- label: Kernels MoE Test %N # TBD
1456
timeout_in_minutes: 180
1457
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1458
+ dind: false
1459
agent_pool: mi300_1
1460
optional: true
1461
parallelism: 5
@@ -1420,6 +1477,7 @@ steps:
1477
- label: Kernels Quantization Test %N # TBD
1478
timeout_in_minutes: 180
1479
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1480
+ dind: false
1481
agent_pool: mi300_1
1482
optional: true
1483
parallelism: 2
@@ -1438,7 +1496,9 @@ steps:
1496
- label: Kernels FP8 MoE Test (2xH100-2xMI300) # TBD
1497
timeout_in_minutes: 180
1498
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1499
+ dind: false
1500
agent_pool: mi300_2
1501
+ num_gpus: 2
1502
optional: true
1503
working_dir: "/vllm-workspace/tests"
1504
source_file_dependencies:
@@ -1457,6 +1517,7 @@ steps:
1517
- label: LoRA %N # TBD
1518
timeout_in_minutes: 180
1519
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1520
+ dind: false
1521
agent_pool: mi300_1
1522
parallelism: 4
1523
optional: true
@@ -1471,6 +1532,7 @@ steps:
1532
- label: LoRA TP (Distributed) # TBD
1533
timeout_in_minutes: 180
1534
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1535
+ dind: false
1536
agent_pool: mi300_4
1537
num_gpus: 4
1538
working_dir: "/vllm-workspace/tests"
@@ -1491,6 +1553,7 @@ steps:
1553
- label: Model Executor # TBD
1554
timeout_in_minutes: 180
1555
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1556
+ dind: false
1557
agent_pool: mi300_1
1558
optional: true
1559
working_dir: "/vllm-workspace/tests"
@@ -1513,6 +1576,7 @@ steps:
1576
- label: Model Runner V2 Core Tests # TBD
1577
timeout_in_minutes: 180
1578
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1579
+ dind: false
1580
agent_pool: mi300_1
1581
optional: true
1582
working_dir: "/vllm-workspace/tests"
@@ -1537,6 +1601,7 @@ steps:
1601
- label: Model Runner V2 Examples # TBD
1602
timeout_in_minutes: 180
1603
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1604
+ dind: false
1605
agent_pool: mi300_1
1606
optional: true
1607
working_dir: "/vllm-workspace/examples"
@@ -1571,6 +1636,7 @@ steps:
1636
- label: Model Runner V2 Distributed (2 GPUs) # TBD
1637
timeout_in_minutes: 180
1638
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1639
+ dind: false
1640
agent_pool: mi300_2
1641
num_gpus: 2
1642
optional: true
@@ -1592,6 +1658,7 @@ steps:
1658
- label: Model Runner V2 Pipeline Parallelism (4 GPUs) # TBD
1659
timeout_in_minutes: 180
1660
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1661
+ dind: false
1662
agent_pool: mi300_4
1663
num_gpus: 4
1664
optional: true
@@ -1611,6 +1678,7 @@ steps:
1678
- label: Model Runner V2 Spec Decode # TBD
1679
timeout_in_minutes: 180
1680
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1681
+ dind: false
1682
agent_pool: mi300_1
1683
optional: true
1684
working_dir: "/vllm-workspace/tests"
@@ -1635,6 +1703,7 @@ steps:
1703
- label: Basic Models Tests (Extra Initialization) %N # TBD
1704
timeout_in_minutes: 180
1705
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1706
+ dind: false
1707
agent_pool: mi300_1
1708
parallelism: 6
1709
working_dir: "/vllm-workspace/tests"
@@ -1651,6 +1720,7 @@ steps:
1720
- label: Basic Models Tests (Initialization) # TBD
1721
timeout_in_minutes: 180
1722
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1723
+ dind: false
1724
agent_pool: mi300_1
1725
working_dir: "/vllm-workspace/tests"
1726
source_file_dependencies:
@@ -1663,6 +1733,7 @@ steps:
1733
- label: Basic Models Tests (Other) # TBD
1734
timeout_in_minutes: 180
1735
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1736
+ dind: false
1737
agent_pool: mi300_1
1738
optional: true
1739
working_dir: "/vllm-workspace/tests"
@@ -1679,6 +1750,7 @@ steps:
1750
- label: Language Models Test (Extended Pooling) # TBD
1751
timeout_in_minutes: 180
1752
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1753
+ dind: false
1754
agent_pool: mi300_1
1755
optional: true
1756
working_dir: "/vllm-workspace/tests"
@@ -1691,6 +1763,7 @@ steps:
1763
- label: Language Models Tests (Standard) # TBD
1764
timeout_in_minutes: 180
1765
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1766
+ dind: false
1767
agent_pool: mi300_1
1768
optional: true
1769
working_dir: "/vllm-workspace/tests"
@@ -1704,6 +1777,7 @@ steps:
1777
- label: Language Models Tests (Extra Standard) %N # TBD
1778
timeout_in_minutes: 180
1779
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1780
+ dind: false
1781
agent_pool: mi300_1
1782
optional: true
1783
parallelism: 2
@@ -1728,6 +1802,7 @@ steps:
1802
- label: Multi-Modal Models (Extended Generation 1) # TBD
1803
timeout_in_minutes: 180
1804
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1805
+ dind: false
1806
agent_pool: mi300_1
1807
optional: true
1808
working_dir: "/vllm-workspace/tests"
@@ -1742,6 +1817,7 @@ steps:
1817
- label: Multi-Modal Models (Extended Generation 2) # TBD
1818
timeout_in_minutes: 180
1819
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1820
+ dind: false
1821
agent_pool: mi300_1
1822
optional: true
1823
working_dir: "/vllm-workspace/tests"
@@ -1755,6 +1831,7 @@ steps:
1831
- label: Multi-Modal Models (Extended Generation 3) # TBD
1832
timeout_in_minutes: 180
1833
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1834
+ dind: false
1835
agent_pool: mi300_1
1836
optional: true
1837
working_dir: "/vllm-workspace/tests"
@@ -1767,6 +1844,7 @@ steps:
1844
- label: "Multi-Modal Models (Standard) 1: qwen2" # TBD
1845
timeout_in_minutes: 180
1846
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1847
+ dind: false
1848
agent_pool: mi300_1
1849
optional: true
1850
working_dir: "/vllm-workspace/tests"
@@ -1780,6 +1858,7 @@ steps:
1858
- label: "Multi-Modal Models (Standard) 3: llava + qwen2_vl" # TBD
1859
timeout_in_minutes: 180
1860
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1861
+ dind: false
1862
agent_pool: mi300_1
1863
optional: true
1864
working_dir: "/vllm-workspace/tests"
@@ -1794,6 +1873,7 @@ steps:
1873
- label: "Multi-Modal Models (Standard) 4: other + whisper" # TBD
1874
timeout_in_minutes: 180
1875
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1876
+ dind: false
1877
agent_pool: mi300_1
1878
working_dir: "/vllm-workspace/tests"
1879
source_file_dependencies:
@@ -1808,6 +1888,7 @@ steps:
1888
- label: Multi-Modal Processor # 1h 42m
1889
timeout_in_minutes: 180
1890
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1891
+ dind: false
1892
agent_pool: mi300_1
1893
optional: true
1894
working_dir: "/vllm-workspace/tests"
@@ -1821,9 +1902,9 @@ steps:
1902
- label: Multi-Modal Processor (CPU) %N # TBD
1903
timeout_in_minutes: 180
1904
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1905
+ dind: false
1906
agent_pool: mi300_1
1907
parallelism: 4
1826
- no_gpu: true
1908
optional: true
1909
working_dir: "/vllm-workspace/tests"
1910
source_file_dependencies:
@@ -1838,6 +1919,7 @@ steps:
1919
- label: Quantized Models Test # TBD
1920
timeout_in_minutes: 180
1921
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1922
+ dind: false
1923
agent_pool: mi300_1
1924
working_dir: "/vllm-workspace/tests"
1925
source_file_dependencies:
@@ -1854,6 +1936,7 @@ steps:
1936
- label: Transformers Nightly Models (Shardable) %N # TBD
1937
timeout_in_minutes: 180
1938
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1939
+ dind: false
1940
agent_pool: mi300_1
1941
parallelism: 4
1942
optional: true
@@ -1876,6 +1959,7 @@ steps:
1959
- label: Transformers Nightly Models (Single) # TBD
1960
timeout_in_minutes: 180
1961
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1962
+ dind: false
1963
agent_pool: mi300_1
1964
optional: true
1965
working_dir: "/vllm-workspace/"
@@ -1903,6 +1987,7 @@ steps:
1987
- label: Plugin Tests (2 GPUs) # TBD
1988
timeout_in_minutes: 180
1989
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1990
+ dind: false
1991
agent_pool: mi300_2
1992
num_gpus: 2
1993
optional: true
@@ -1954,6 +2039,7 @@ steps:
2039
- label: GGUF Plugin # TBD
2040
timeout_in_minutes: 180
2041
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2042
+ dind: false
2043
agent_pool: mi300_1
2044
optional: true
2045
soft_fail: true
@@ -1972,6 +2058,7 @@ steps:
2058
- label: Rust Frontend OpenAI Coverage # TBD
2059
timeout_in_minutes: 180
2060
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2061
+ dind: false
2062
agent_pool: mi300_1
2063
optional: true
2064
working_dir: "/vllm-workspace/tests"
@@ -2004,6 +2091,7 @@ steps:
2091
- label: Rust Frontend Serve Admin Coverage # TBD
2092
timeout_in_minutes: 180
2093
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2094
+ dind: false
2095
agent_pool: mi300_1
2096
optional: true
2097
working_dir: "/vllm-workspace/tests"
@@ -2031,6 +2119,7 @@ steps:
2119
- label: Rust Frontend Core Correctness # TBD
2120
timeout_in_minutes: 180
2121
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2122
+ dind: false
2123
agent_pool: mi300_1
2124
optional: true
2125
working_dir: "/vllm-workspace/tests"
@@ -2048,6 +2137,7 @@ steps:
2137
- label: Rust Frontend Tool Use # TBD
2138
timeout_in_minutes: 180
2139
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2140
+ dind: false
2141
agent_pool: mi300_1
2142
optional: true
2143
working_dir: "/vllm-workspace/tests"
@@ -2066,6 +2156,7 @@ steps:
2156
- label: Rust Frontend Distributed # TBD
2157
timeout_in_minutes: 180
2158
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2159
+ dind: false
2160
agent_pool: mi300_4
2161
num_gpus: 4
2162
optional: true
@@ -2094,6 +2185,7 @@ steps:
2185
- label: Quantization # TBD
2186
timeout_in_minutes: 180
2187
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2188
+ dind: false
2189
agent_pool: mi300_1
2190
working_dir: "/vllm-workspace/tests"
2191
source_file_dependencies:
@@ -2120,6 +2212,7 @@ steps:
2212
- label: ROCm AITER Ops Test # TBD
2213
timeout_in_minutes: 180
2214
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2215
+ dind: false
2216
agent_pool: mi300_1
2217
working_dir: "/vllm-workspace/tests"
2218
source_file_dependencies:
@@ -2137,6 +2230,7 @@ steps:
2230
- label: Samplers Test # TBD
2231
timeout_in_minutes: 180
2232
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2233
+ dind: false
2234
agent_pool: mi300_1
2235
optional: true
2236
working_dir: "/vllm-workspace/tests"
@@ -2154,22 +2248,10 @@ steps:
2248
2249
#------------------------------------------------------------ mi300 · misc ------------------------------------------------------------#
2250
2157
-- label: Python-only Installation # TBD
2158
- timeout_in_minutes: 180
2159
- mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2160
- agent_pool: mi300_1
2161
- optional: true
2162
- working_dir: "/vllm-workspace/tests"
2163
- source_file_dependencies:
2164
- - tests/standalone_tests/python_only_compile.sh
2165
- - setup.py
2166
- - vllm/platforms/rocm.py
2167
- commands:
2168
- - bash standalone_tests/python_only_compile.sh
2169
-
2251
- label: Regression # TBD
2252
timeout_in_minutes: 180
2253
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2254
+ dind: false
2255
agent_pool: mi300_1
2256
working_dir: "/vllm-workspace/tests"
2257
source_file_dependencies:
@@ -2184,6 +2266,7 @@ steps:
2266
- label: Ray Dependency Compatibility Check # TBD
2267
timeout_in_minutes: 180
2268
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2269
+ dind: false
2270
agent_pool: mi300_1
2271
working_dir: "/"
2272
source_file_dependencies:
@@ -2198,6 +2281,7 @@ steps:
2281
- label: Acceptance Length Test (Large Models) # TBD
2282
timeout_in_minutes: 180
2283
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2284
+ dind: false
2285
agent_pool: mi300_1
2286
optional: true
2287
working_dir: "/vllm-workspace/tests"
@@ -2213,6 +2297,7 @@ steps:
2297
- label: e2e Scheduling (1 GPU) # TBD
2298
timeout_in_minutes: 180
2299
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2300
+ dind: false
2301
agent_pool: mi300_1
2302
optional: true
2303
working_dir: "/vllm-workspace/tests"
@@ -2226,6 +2311,7 @@ steps:
2311
- label: Engine (1 GPU) # TBD
2312
timeout_in_minutes: 180
2313
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2314
+ dind: false
2315
agent_pool: mi300_1
2316
optional: true
2317
working_dir: "/vllm-workspace/tests"
@@ -2240,6 +2326,7 @@ steps:
2326
- label: Spec Decode Draft Model # TBD
2327
timeout_in_minutes: 180
2328
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2329
+ dind: false
2330
agent_pool: mi300_1
2331
optional: true
2332
working_dir: "/vllm-workspace/tests"
@@ -2257,6 +2344,7 @@ steps:
2344
- label: Spec Decode Eagle # TBD
2345
timeout_in_minutes: 180
2346
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2347
+ dind: false
2348
agent_pool: mi300_1
2349
optional: true
2350
working_dir: "/vllm-workspace/tests"
@@ -2274,6 +2362,7 @@ steps:
2362
- label: Spec Decode Ngram + Suffix # TBD
2363
timeout_in_minutes: 180
2364
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2365
+ dind: false
2366
agent_pool: mi300_1
2367
optional: true
2368
working_dir: "/vllm-workspace/tests"
@@ -2291,6 +2380,7 @@ steps:
2380
- label: Spec Decode Speculators + MTP # TBD
2381
timeout_in_minutes: 180
2382
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2383
+ dind: false
2384
agent_pool: mi300_1
2385
optional: true
2386
working_dir: "/vllm-workspace/tests"
@@ -2309,6 +2399,7 @@ steps:
2399
- label: Speculators Correctness # TBD
2400
timeout_in_minutes: 180
2401
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2402
+ dind: false
2403
agent_pool: mi300_1
2404
optional: true
2405
working_dir: "/vllm-workspace/tests"
@@ -2337,9 +2428,22 @@ steps:
2428
- export VLLM_ALLOW_INSECURE_SERIALIZATION=1
2429
- pytest -v -s v1/spec_decode/test_speculators_correctness.py -m slow_test
2430
2431
+- label: V1 Spec Decode # TBD
2432
+ timeout_in_minutes: 180
2433
+ mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2434
+ dind: false
2435
+ agent_pool: mi300_1
2436
+ working_dir: "/vllm-workspace/tests"
2437
+ source_file_dependencies:
2438
+ - vllm/
2439
+ - tests/v1/spec_decode
2440
+ commands:
2441
+ - pytest -v -s -m 'not slow_test' v1/spec_decode
2442
+
2443
- label: Extract Hidden States Integration # TBD
2444
timeout_in_minutes: 180
2445
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2446
+ dind: false
2447
agent_pool: mi300_2
2448
num_gpus: 2
2449
working_dir: "/vllm-workspace/tests"
@@ -2371,6 +2475,7 @@ steps:
2475
- label: V1 attention (H100-MI300) # TBD
2476
timeout_in_minutes: 180
2477
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2478
+ dind: false
2479
agent_pool: mi300_1
2480
optional: true
2481
working_dir: "/vllm-workspace/tests"
@@ -2388,6 +2493,7 @@ steps:
2493
- label: V1 Core + KV + Metrics # TBD
2494
timeout_in_minutes: 180
2495
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2496
+ dind: false
2497
agent_pool: mi300_1
2498
working_dir: "/vllm-workspace/tests"
2499
source_file_dependencies:
@@ -2414,8 +2520,8 @@ steps:
2520
- label: V1 others (CPU) # TBD
2521
timeout_in_minutes: 180
2522
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2523
+ dind: false
2524
agent_pool: mi300_1
2418
- no_gpu: true
2525
optional: true
2526
working_dir: "/vllm-workspace/tests"
2527
source_file_dependencies:
@@ -2431,6 +2537,7 @@ steps:
2537
- label: V1 Sample + Logits # TBD
2538
timeout_in_minutes: 180
2539
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2540
+ dind: false
2541
agent_pool: mi300_1
2542
optional: true
2543
working_dir: "/vllm-workspace/tests"
@@ -2451,6 +2558,7 @@ steps:
2558
- label: Distributed DP Tests (2 GPUs) # TBD
2559
timeout_in_minutes: 180
2560
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2561
+ dind: false
2562
agent_pool: mi300_2
2563
optional: true
2564
num_gpus: 2
@@ -2466,6 +2574,7 @@ steps:
2574
- tests/entrypoints/openai/test_multi_api_servers.py
2575
- vllm/platforms/rocm.py
2576
commands:
2577
+ - export NCCL_CUMEM_HOST_ENABLE=0
2578
- TP_SIZE=1 DP_SIZE=2 pytest -v -s v1/distributed/test_async_llm_dp.py
2579
- TP_SIZE=1 DP_SIZE=2 pytest -v -s v1/distributed/test_eagle_dp.py
2580
- TP_SIZE=1 DP_SIZE=2 pytest -v -s v1/distributed/test_external_lb_dp.py
@@ -2474,6 +2583,7 @@ steps:
2583
- label: Metrics, Tracing (2 GPUs) # TBD
2584
timeout_in_minutes: 180
2585
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2586
+ dind: false
2587
agent_pool: mi300_2
2588
optional: true
2589
num_gpus: 2
@@ -2492,7 +2602,9 @@ steps:
2602
- label: V1 e2e (2 GPUs) # TBD
2603
timeout_in_minutes: 180
2604
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2605
+ dind: false
2606
agent_pool: mi300_2
2607
+ num_gpus: 2
2608
optional: true
2609
working_dir: "/vllm-workspace/tests"
2610
source_file_dependencies:
@@ -2504,6 +2616,7 @@ steps:
2616
- label: NixlConnector PD + Spec Decode acceptance (2 GPUs) # TBD
2617
timeout_in_minutes: 180
2618
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2619
+ dind: false
2620
agent_pool: mi300_2
2621
num_gpus: 2
2622
optional: true
@@ -2515,17 +2628,18 @@ steps:
2628
- vllm/platforms/rocm.py
2629
commands:
2630
- uv pip install --system -r /vllm-workspace/requirements/kv_connectors_rocm.txt
2518
- - ATTENTION_BACKEND=TRITON_ATTN bash v1/kv_connector/nixl_integration/config_sweep_spec_decode_test.sh
2631
+ - KV_CACHE_MEMORY_BYTES=8G ATTENTION_BACKEND=TRITON_ATTN bash v1/kv_connector/nixl_integration/config_sweep_spec_decode_test.sh
2632
2633
- label: CrossLayer KV layout Distributed NixlConnector PD accuracy tests (4 GPUs) # TBD
2634
timeout_in_minutes: 180
2635
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2636
+ dind: false
2637
agent_pool: mi300_4
2638
num_gpus: 4
2639
optional: true
2640
working_dir: "/vllm-workspace/tests"
2641
source_file_dependencies:
2528
- - vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py
2642
+ - vllm/distributed/kv_transfer/kv_connector/v1/nixl/
2643
- tests/v1/kv_connector/nixl_integration/
2644
- vllm/platforms/rocm.py
2645
commands:
@@ -2535,6 +2649,7 @@ steps:
2649
- label: Distributed DP Tests (4 GPUs) # TBD
2650
timeout_in_minutes: 180
2651
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2652
+ dind: false
2653
agent_pool: mi300_4
2654
num_gpus: 4
2655
working_dir: "/vllm-workspace/tests"
@@ -2545,6 +2660,7 @@ steps:
2660
- tests/distributed/test_utils
2661
- vllm/platforms/rocm.py
2662
commands:
2663
+ - export NCCL_CUMEM_HOST_ENABLE=0
2664
- TP_SIZE=2 DP_SIZE=2 pytest -v -s v1/distributed/test_async_llm_dp.py
2665
- TP_SIZE=2 DP_SIZE=2 pytest -v -s v1/distributed/test_eagle_dp.py
2666
- TP_SIZE=2 DP_SIZE=2 pytest -v -s v1/distributed/test_external_lb_dp.py
@@ -2556,6 +2672,7 @@ steps:
2672
- label: Distributed NixlConnector PD accuracy (4 GPUs) # TBD
2673
timeout_in_minutes: 180
2674
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2675
+ dind: false
2676
agent_pool: mi300_4
2677
num_gpus: 4
2678
optional: true
@@ -2571,6 +2688,7 @@ steps:
2688
- label: DP EP Distributed NixlConnector PD accuracy tests (4 GPUs) # TBD
2689
timeout_in_minutes: 180
2690
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2691
+ dind: false
2692
agent_pool: mi300_4
2693
num_gpus: 4
2694
optional: true
@@ -2586,12 +2704,13 @@ steps:
2704
- label: Hybrid SSM NixlConnector PD accuracy tests (4 GPUs) # TBD
2705
timeout_in_minutes: 180
2706
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2707
+ dind: false
2708
agent_pool: mi300_4
2709
num_gpus: 4
2710
optional: true
2711
working_dir: "/vllm-workspace/tests"
2712
source_file_dependencies:
2594
- - vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py
2713
+ - vllm/distributed/kv_transfer/kv_connector/v1/nixl/
2714
- tests/v1/kv_connector/nixl_integration/
2715
- vllm/platforms/rocm.py
2716
commands:
@@ -2601,6 +2720,7 @@ steps:
2720
- label: Hybrid SSM NixlConnector PD prefix cache test (2 GPUs) # TBD
2721
timeout_in_minutes: 180
2722
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2723
+ dind: false
2724
agent_pool: mi300_2
2725
num_gpus: 2
2726
optional: true
@@ -2618,6 +2738,7 @@ steps:
2738
- label: MultiConnector (Nixl+Offloading) PD accuracy (2 GPUs) # TBD
2739
timeout_in_minutes: 180
2740
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2741
+ dind: false
2742
agent_pool: mi300_2
2743
num_gpus: 2
2744
optional: true
@@ -2636,6 +2757,7 @@ steps:
2757
- label: MultiConnector (Nixl+Offloading) PD edge cases (2 GPUs) # TBD
2758
timeout_in_minutes: 180
2759
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2760
+ dind: false
2761
agent_pool: mi300_2
2762
num_gpus: 2
2763
optional: true
@@ -2654,7 +2776,9 @@ steps:
2776
- label: V1 e2e (4 GPUs) # TBD
2777
timeout_in_minutes: 180
2778
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2779
+ dind: false
2780
agent_pool: mi300_4
2781
+ num_gpus: 4
2782
optional: true
2783
working_dir: "/vllm-workspace/tests"
2784
source_file_dependencies:
@@ -2666,7 +2790,9 @@ steps:
2790
- label: V1 e2e (4xH100-4xMI300) # TBD
2791
timeout_in_minutes: 180
2792
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2793
+ dind: false
2794
agent_pool: mi300_4
2795
+ num_gpus: 4
2796
optional: true
2797
source_file_dependencies:
2798
- vllm/v1/attention/backends/utils.py
@@ -2680,6 +2806,7 @@ steps:
2806
- label: Weight Loading Multiple GPU # TBD
2807
timeout_in_minutes: 180
2808
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2809
+ dind: false
2810
agent_pool: mi300_2
2811
num_gpus: 2
2812
working_dir: "/vllm-workspace/tests"
@@ -2692,6 +2819,7 @@ steps:
2819
- label: Weight Loading Multiple GPU - Large Models # TBD
2820
timeout_in_minutes: 180
2821
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2822
+ dind: false
2823
agent_pool: mi300_2
2824
num_gpus: 2
2825
optional: true
@@ -2876,18 +3004,20 @@ steps:
3004
- pytest -v -s models/multimodal/generation/test_common.py -m core_model -k "qwen3 or gemma"
3005
- pytest -v -s models/multimodal/generation/test_qwen2_5_vl.py -m core_model
3006
2879
-#------------------------------------------------------------ mi325 · v1 -------------------------------------------------------------#
3007
+#----------------------------------------------------------- mi325 · misc ------------------------------------------------------------#
3008
2881
-- label: V1 Spec Decode # TBD
3009
+- label: Python-only Installation # TBD
3010
timeout_in_minutes: 180
3011
mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi325]
3012
agent_pool: mi325_1
3013
+ optional: true
3014
working_dir: "/vllm-workspace/tests"
3015
source_file_dependencies:
2887
- - vllm/
2888
- - tests/v1/spec_decode
3016
+ - tests/standalone_tests/python_only_compile.sh
3017
+ - setup.py
3018
+ - vllm/platforms/rocm.py
3019
commands:
2890
- - pytest -v -s -m 'not slow_test' v1/spec_decode
3020
+ - bash standalone_tests/python_only_compile.sh
3021
3022
#########################################################################################################################################
3023
# #
@@ -3114,6 +3244,7 @@ steps:
3244
timeout_in_minutes: 180
3245
mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3246
agent_pool: mi355_2
3247
+ num_gpus: 2
3248
optional: true
3249
working_dir: "/vllm-workspace/tests"
3250
source_file_dependencies:
@@ -3288,6 +3419,7 @@ steps:
3419
timeout_in_minutes: 180
3420
mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355]
3421
agent_pool: mi355_2
3422
+ num_gpus: 2
3423
working_dir: "/vllm-workspace/tests"
3424
source_file_dependencies:
3425
- csrc/moe/
.buildkite/test_areas/benchmarks.yaml
+1
@@ -13,6 +13,7 @@ steps:
13
- pytest -v -s benchmarks/
14
mirror:
15
amd:
16
+ dind: false
17
device: mi300_1
18
depends_on:
19
- image-build-amd
.buildkite/test_areas/disaggregated.yaml
+6
-1
@@ -15,6 +15,7 @@ steps:
15
- bash v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh
16
mirror:
17
amd:
18
+ dind: false
19
device: mi300_4
20
timeout_in_minutes: 85
21
depends_on:
@@ -65,6 +66,7 @@ steps:
66
- DP_EP=1 bash v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh
67
mirror:
68
amd:
69
+ dind: false
70
device: mi300_4
71
timeout_in_minutes: 60
72
depends_on:
@@ -90,6 +92,7 @@ steps:
92
- CROSS_LAYERS_BLOCKS=True bash v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh
93
mirror:
94
amd:
95
+ dind: false
96
device: mi300_4
97
timeout_in_minutes: 85
98
depends_on:
@@ -115,6 +118,7 @@ steps:
118
- HYBRID_SSM=1 bash v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh
119
mirror:
120
amd:
121
+ dind: false
122
device: mi300_4
123
timeout_in_minutes: 80
124
depends_on:
@@ -171,6 +175,7 @@ steps:
175
- bash v1/kv_connector/nixl_integration/config_sweep_spec_decode_test.sh
176
mirror:
177
amd:
178
+ dind: false
179
device: mi300_2
180
timeout_in_minutes: 70
181
depends_on:
@@ -182,7 +187,7 @@ steps:
187
- vllm/platforms/rocm.py
188
commands:
189
- uv pip install --system -r /vllm-workspace/requirements/kv_connectors_rocm.txt
185
- - ATTENTION_BACKEND=TRITON_ATTN bash v1/kv_connector/nixl_integration/config_sweep_spec_decode_test.sh
190
+ - KV_CACHE_MEMORY_BYTES=8G ATTENTION_BACKEND=TRITON_ATTN bash v1/kv_connector/nixl_integration/config_sweep_spec_decode_test.sh
191
192
- label: MultiConnector (Nixl+Offloading) PD edge cases (2 GPUs)
193
key: multiconnector-nixl-offloading-pd-edge-cases-2-gpus
.buildkite/test_areas/distributed.yaml
+1
@@ -39,6 +39,7 @@ steps:
39
- DP_SIZE=2 pytest -v -s entrypoints/openai/test_multi_api_servers.py
40
mirror:
41
amd:
42
+ dind: false
43
device: mi300_2
44
depends_on:
45
- image-build-amd
.buildkite/test_areas/engine.yaml
+1
@@ -114,6 +114,7 @@ steps:
114
- pytest -v -s v1/e2e/spec_decode/test_spec_decode.py -k "tensor_parallelism"
115
mirror:
116
amd:
117
+ dind: false
118
device: mi300_2
119
depends_on:
120
- image-build-amd
.buildkite/test_areas/expert_parallelism.yaml
+1
@@ -16,6 +16,7 @@ steps:
16
- pytest -v -s distributed/test_eplb_utils.py
17
mirror:
18
amd:
19
+ dind: false
20
device: mi300_1
21
depends_on:
22
- image-build-amd
.buildkite/test_areas/lm_eval.yaml
+1
@@ -117,6 +117,7 @@ steps:
117
- pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-h200.txt
118
mirror:
119
amd:
120
+ dind: false
121
device: mi300_8
122
timeout_in_minutes: 60
123
depends_on:
.buildkite/test_areas/misc.yaml
+1
@@ -23,6 +23,7 @@ steps:
23
- pytest -v -s -m 'not slow_test' v1/spec_decode
24
mirror:
25
amd:
26
+ dind: false
27
device: mi300_1
28
timeout_in_minutes: 75
29
depends_on:
.buildkite/test_areas/model_executor.yaml
+1
@@ -25,6 +25,7 @@ steps:
25
- pytest -v -s entrypoints/openai/completion/test_tensorizer_entrypoint.py --timeout=900 --timeout-method=thread
26
mirror:
27
amd:
28
+ dind: false
29
device: mi300_1
30
depends_on:
31
- image-build-amd
.buildkite/test_areas/models_language.yaml
+2
@@ -15,6 +15,7 @@ steps:
15
- pytest -v -s models/language -m 'core_model and (not slow_test)'
16
mirror:
17
amd:
18
+ dind: false
19
device: mi300_1
20
depends_on:
21
- image-build-amd
@@ -35,6 +36,7 @@ steps:
36
parallelism: 2
37
mirror:
38
amd:
39
+ dind: false
40
device: mi300_1
41
depends_on:
42
- image-build-amd
.buildkite/test_areas/models_multimodal.yaml
+1
@@ -107,6 +107,7 @@ steps:
107
- pytest -s -v test_lm_eval_correctness.py --config-list-file=configs/models-mm-small.txt --tp-size=1
108
mirror:
109
amd:
110
+ dind: false
111
device: mi300_1
112
depends_on:
113
- image-build-amd
.buildkite/test_areas/pytorch.yaml
+2
@@ -109,6 +109,7 @@ steps:
109
- pytest -s -v compile/passes --ignore compile/passes/distributed
110
mirror:
111
amd:
112
+ dind: false
113
device: mi300_1
114
timeout_in_minutes: 65
115
depends_on:
@@ -197,6 +198,7 @@ steps:
198
- bash standalone_tests/pytorch_nightly_dependency.sh
199
mirror:
200
amd:
201
+ dind: false
202
device: mi300_1
203
depends_on:
204
- image-build-amd
.buildkite/test_areas/weight_loading.yaml
+1
@@ -15,6 +15,7 @@ steps:
15
- bash weight_loading/run_model_weight_loading_test.sh -c weight_loading/models.txt
16
mirror:
17
amd:
18
+ dind: false
19
device: mi300_2
20
depends_on:
21
- image-build-amd
docker/Dockerfile.rocm
+1
@@ -674,6 +674,7 @@ RUN apt-get update -q -y && apt-get install -q -y --no-install-recommends \
674
libibverbs1 \
675
ibverbs-providers \
676
ibverbs-utils \
677
+ util-linux \
678
unzip \
679
pkg-config ffmpeg libavcodec-dev libavformat-dev libavutil-dev \
680
libswscale-dev libavdevice-dev libavfilter-dev libswresample-dev \
tests/basic_correctness/test_mem.py
+1
-1
@@ -31,7 +31,7 @@ def test_python_error():
31
x = torch.empty(alloc_bytes, dtype=torch.uint8, device=DEVICE_TYPE)
32
tensors.append(x)
33
# release the memory
34
- allocator.sleep()
34
+ allocator.sleep(offload_tags=())
35
36
# allocate more memory than the total memory
37
y = torch.empty(alloc_bytes, dtype=torch.uint8, device=DEVICE_TYPE)
tests/standalone_tests/python_only_compile.sh
+4
-4
@@ -5,16 +5,16 @@
5
set -e
6
7
# ROCm CI runs this script inside `run-amd-test.sh` where /vllm-workspace often has no .git
8
-# (wheel artifact layout). The wrapper passes VLLM_STANDALONE_MERGE_BASE from the agent checkout.
8
+# (wheel artifact layout). The wrapper passes CI_STANDALONE_MERGE_BASE from the agent checkout.
9
merge_base_commit=""
10
-if [[ -n "${VLLM_STANDALONE_MERGE_BASE:-}" ]]; then
11
- merge_base_commit="${VLLM_STANDALONE_MERGE_BASE}"
10
+if [[ -n "${CI_STANDALONE_MERGE_BASE:-}" ]]; then
11
+ merge_base_commit="${CI_STANDALONE_MERGE_BASE}"
12
elif merge_base_commit="$(git -C /vllm-workspace merge-base HEAD origin/main 2>/dev/null)"; then
13
:
14
elif merge_base_commit="$(git merge-base HEAD origin/main 2>/dev/null)"; then
15
:
16
else
17
- echo "ERROR: need a git checkout or VLLM_STANDALONE_MERGE_BASE to resolve wheels.vllm.ai commit." >&2
17
+ echo "ERROR: need a git checkout or CI_STANDALONE_MERGE_BASE to resolve wheels.vllm.ai commit." >&2
18
exit 1
19
fi
20
tests/v1/kv_connector/nixl_integration/spec_decode_acceptance_test.sh
+12
-3
@@ -20,7 +20,8 @@
20
# SD_MODEL - drafter model path
21
# MODEL_NAME - target model (default: meta-llama/Llama-3.1-8B-Instruct)
22
# NUM_SPEC_TOKENS - number of speculative tokens (default: 3)
23
-# GPU_MEMORY_UTILIZATION - (default: 0.7)
23
+# GPU_MEMORY_UTILIZATION - used when KV_CACHE_MEMORY_BYTES is unset (default: 0.7)
24
+# KV_CACHE_MEMORY_BYTES - optional KV cache size per server
25
# ATTENTION_BACKEND - attention backend to use
26
# Default: TRITON_ATTN on ROCm, FLASH_ATTN on NVIDIA
27
# ROCm options: TRITON_ATTN, ROCM_ATTN, ROCM_AITER_FA,
@@ -52,10 +53,17 @@ NUM_DECODE_INSTANCES=${NUM_DECODE_INSTANCES:-1}
53
PREFILLER_TP_SIZE=${PREFILLER_TP_SIZE:-1}
54
DECODER_TP_SIZE=${DECODER_TP_SIZE:-1}
55
GPU_MEMORY_UTILIZATION=${GPU_MEMORY_UTILIZATION:-0.7}
56
+KV_CACHE_MEMORY_BYTES=${KV_CACHE_MEMORY_BYTES:-}
57
BLOCK_SIZE=${BLOCK_SIZE:-16}
58
SERVER_HOST="${SERVER_HOST:-127.0.0.1}"
59
NIXL_SIDE_CHANNEL_HOST="${NIXL_SIDE_CHANNEL_HOST:-$SERVER_HOST}"
60
61
+if [[ -n "$KV_CACHE_MEMORY_BYTES" ]]; then
62
+ KV_CACHE_ARGS=(--kv-cache-memory-bytes "$KV_CACHE_MEMORY_BYTES")
63
+else
64
+ KV_CACHE_ARGS=(--gpu-memory-utilization "$GPU_MEMORY_UTILIZATION")
65
+fi
66
+
67
# Resolve the repository root from the script location instead of `.git`.
68
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
69
GIT_ROOT="${GIT_ROOT:-$(cd -- "${SCRIPT_DIR}/../../../.." && pwd -P)}"
@@ -209,6 +217,7 @@ run_test_for_device() {
217
echo "SD model: ${SD_MODEL}"
218
echo "Spec tokens: ${NUM_SPEC_TOKENS}"
219
echo "KV buffer device: ${kv_device}"
220
+ echo "KV cache memory: ${KV_CACHE_MEMORY_BYTES:-auto-sized}"
221
echo "Attention backend: ${ATTENTION_BACKEND}"
222
echo "GPU platform: ${GPU_PLATFORM}"
223
echo "Server host: ${SERVER_HOST}"
@@ -248,7 +257,7 @@ run_test_for_device() {
257
--enforce-eager \
258
--max-model-len $MAX_MODEL_LEN \
259
--block-size ${BLOCK_SIZE} \
251
- --gpu-memory-utilization $GPU_MEMORY_UTILIZATION \
260
+ "${KV_CACHE_ARGS[@]}" \
261
--tensor-parallel-size $PREFILLER_TP_SIZE \
262
--kv-transfer-config "$kv_config_p" \
263
--speculative-config "$PREFILL_SPEC_CONFIG" \
@@ -287,7 +296,7 @@ run_test_for_device() {
296
--enforce-eager \
297
--max-model-len $MAX_MODEL_LEN \
298
--block-size ${BLOCK_SIZE} \
290
- --gpu-memory-utilization $GPU_MEMORY_UTILIZATION \
299
+ "${KV_CACHE_ARGS[@]}" \
300
--tensor-parallel-size $DECODER_TP_SIZE \
301
--kv-transfer-config "$kv_config_d" \
302
--speculative-config "$DECODE_SPEC_CONFIG" \
tests/v1/kv_connector/unit/test_mooncake_store_hma_e2e.py
+3
-1
@@ -97,14 +97,16 @@ def _build_worker_with_dict_store(vllm_config, kv_cache_config, store):
97
with (
98
patch.dict(sys.modules, {"mooncake.store": fake_mooncake_store}),
99
patch.object(mooncake_store_worker, "MooncakeStoreConfig") as MCfg,
100
+ patch.object(mooncake_store_worker, "LookupKeyServer"),
101
):
101
- sc = MCfg.load_from_env.return_value
102
+ sc = MCfg.load_from_config.return_value
103
sc.metadata_server = ""
104
sc.global_segment_size = 1 << 20
105
sc.local_buffer_size = 1 << 20
106
sc.protocol = "tcp"
107
sc.device_name = ""
108
sc.master_server_address = ""
109
+ sc.mode = "embedded"
110
sc.enable_offload = False
111
with (
112
patch(
vllm/model_executor/model_loader/weight_utils.py
+14
-2
@@ -694,10 +694,22 @@ def _get_checkpoints_size_bytes(files: list[str]) -> int:
694
695
696
def _get_available_ram_bytes() -> int:
697
- """Return the available RAM in bytes."""
697
+ """Return available RAM, honoring cgroup limits on ROCm."""
698
import psutil
699
700
- return psutil.virtual_memory().available
700
+ host_available = psutil.virtual_memory().available
701
+ if not current_platform.is_rocm():
702
+ return host_available
703
+
704
+ from vllm.utils.cpu_resource_utils import get_cgroup_memory_limit
705
+
706
+ cgroup_limit, cgroup_usage = get_cgroup_memory_limit()
707
+ if cgroup_limit is None:
708
+ return host_available
709
+ cgroup_available = (
710
+ cgroup_limit if cgroup_usage is None else max(0, cgroup_limit - cgroup_usage)
711
+ )
712
+ return min(host_available, cgroup_available)
713
714
715
def _get_fs_type(files: list[str]) -> str: