[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: