[ROCm][CI] Adding Rust parity (#47478)

Signed-off-by: Andreas Karatzas <akaratza@amd.com>

Andreas Karatzas committed Jul 6, 2026 at 17:05 UTC 8484ca5d456acb716b3a6a7f4871709506139d61
3 files changed +153 -1
.buildkite/scripts/run-rust-frontend-cargo-ci.sh
+6 -1
@@ -8,7 +8,12 @@ if [[ "$MODE" != "style-clippy" && "$MODE" != "test" ]]; then
8 exit 2
9 fi
10
11 -ROOT_DIR="$(git rev-parse --show-toplevel)"
11 +if ROOT_DIR="$(git rev-parse --show-toplevel 2>/dev/null)"; then
12 + :
13 +else
14 + SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
15 + ROOT_DIR="$(cd -- "${SCRIPT_DIR}/../.." && pwd -P)"
16 +fi
17 cd "$ROOT_DIR"
18
19 export CARGO_TERM_COLOR="${CARGO_TERM_COLOR:-always}"
.buildkite/test-amd.yaml
+142
@@ -404,6 +404,36 @@ steps:
404 - pytest -v -s transformers_utils
405 - pytest -v -s config
406
407 +#------------------------------------------------------------ mi250 · rust -----------------------------------------------------------#
408 +
409 +- label: Rust Frontend Cargo Style + Clippy # TBD
410 + timeout_in_minutes: 180
411 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
412 + agent_pool: mi250_1
413 + no_gpu: true
414 + working_dir: "/vllm-workspace"
415 + source_file_dependencies:
416 + - rust/
417 + - rust-toolchain.toml
418 + - .buildkite/test_areas/rust_frontend_cargo.yaml
419 + - .buildkite/scripts/run-rust-frontend-cargo-ci.sh
420 + commands:
421 + - bash .buildkite/scripts/run-rust-frontend-cargo-ci.sh style-clippy
422 +
423 +- label: Rust Frontend Cargo Tests # TBD
424 + timeout_in_minutes: 180
425 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx90anightly, amdmi250]
426 + agent_pool: mi250_1
427 + no_gpu: true
428 + working_dir: "/vllm-workspace"
429 + source_file_dependencies:
430 + - rust/
431 + - rust-toolchain.toml
432 + - .buildkite/test_areas/rust_frontend_cargo.yaml
433 + - .buildkite/scripts/run-rust-frontend-cargo-ci.sh
434 + commands:
435 + - bash .buildkite/scripts/run-rust-frontend-cargo-ci.sh test
436 +
437 #----------------------------------------------------------- mi250 · docker ----------------------------------------------------------#
438
439 - label: Docker Build Metadata (ROCm) # TBD
@@ -1930,6 +1960,118 @@ steps:
1960 - pip install "vllm-gguf-plugin >= 0.0.2"
1961 - pytest -v -s plugins_tests/gguf
1962
1963 +#------------------------------------------------------- mi300 · rust_frontend -------------------------------------------------------#
1964 +
1965 +- label: Rust Frontend OpenAI Coverage # TBD
1966 + timeout_in_minutes: 180
1967 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1968 + agent_pool: mi300_1
1969 + optional: true
1970 + working_dir: "/vllm-workspace/tests"
1971 + source_file_dependencies:
1972 + - rust/
1973 + - vllm/benchmarks/
1974 + - vllm/entrypoints/openai/
1975 + - vllm/entrypoints/serve/
1976 + - vllm/v1/sample/
1977 + - tests/utils.py
1978 + - tests/benchmarks/test_serve_cli.py
1979 + - tests/entrypoints/openai/chat_completion/test_chat_completion.py
1980 + - tests/entrypoints/openai/completion/test_shutdown.py
1981 + - tests/v1/sample/test_logprobs_e2e.py
1982 + - vllm/platforms/rocm.py
1983 + commands:
1984 + - export VLLM_USE_RUST_FRONTEND=1
1985 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
1986 + - pytest -v -s benchmarks/test_serve_cli.py -k "not insecure and not (test_bench_serve and not test_bench_serve_chat)"
1987 + - pytest -v -s entrypoints/openai/chat_completion/test_chat_completion.py -k "not test_invalid_json_schema and not test_invalid_regex"
1988 + - pytest -v -s entrypoints/openai/completion/test_shutdown.py -k "not engine_failure and not test_abort_timeout_exits_quickly"
1989 + - pytest -v -s v1/sample/test_logprobs_e2e.py -k "test_prompt_logprobs_e2e_server"
1990 +
1991 +- label: Rust Frontend Serve Admin Coverage # TBD
1992 + timeout_in_minutes: 180
1993 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
1994 + agent_pool: mi300_1
1995 + optional: true
1996 + working_dir: "/vllm-workspace/tests"
1997 + source_file_dependencies:
1998 + - rust/
1999 + - vllm/entrypoints/openai/
2000 + - vllm/entrypoints/serve/
2001 + - vllm/v1/engine/
2002 + - tests/utils.py
2003 + - tests/entrypoints/serve/disagg/test_serving_tokens.py
2004 + - tests/entrypoints/serve/instrumentator/test_basic.py
2005 + - tests/entrypoints/serve/instrumentator/test_metrics.py
2006 + - vllm/platforms/rocm.py
2007 + commands:
2008 + - export VLLM_USE_RUST_FRONTEND=1
2009 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
2010 + - pytest -v -s entrypoints/serve/instrumentator/test_basic.py -k "not show_version and not server_load"
2011 + - pytest -v -s entrypoints/serve/disagg/test_serving_tokens.py -k "not stream and not lora and not test_generate_logprobs and not stop_string_workflow"
2012 + - pytest -v -s entrypoints/serve/instrumentator/test_metrics.py -k "text and not show and not run_batch and not test_metrics_counts and not test_metrics_exist"
2013 +
2014 +- label: Rust Frontend Core Correctness # TBD
2015 + timeout_in_minutes: 180
2016 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2017 + agent_pool: mi300_1
2018 + optional: true
2019 + working_dir: "/vllm-workspace/tests"
2020 + source_file_dependencies:
2021 + - rust/
2022 + - vllm/entrypoints/openai/
2023 + - tests/utils.py
2024 + - tests/entrypoints/openai/correctness/test_lmeval.py
2025 + - vllm/platforms/rocm.py
2026 + commands:
2027 + - export VLLM_USE_RUST_FRONTEND=1
2028 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
2029 + - pytest -s entrypoints/openai/correctness/test_lmeval.py::test_lm_eval_accuracy_v1_engine
2030 +
2031 +- label: Rust Frontend Tool Use # TBD
2032 + timeout_in_minutes: 180
2033 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2034 + agent_pool: mi300_1
2035 + optional: true
2036 + working_dir: "/vllm-workspace/tests"
2037 + source_file_dependencies:
2038 + - rust/
2039 + - vllm/entrypoints/openai/
2040 + - vllm/tool_parsers/
2041 + - tests/utils.py
2042 + - tests/tool_use/
2043 + - vllm/platforms/rocm.py
2044 + commands:
2045 + - export VLLM_USE_RUST_FRONTEND=1
2046 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
2047 + - pytest -v -s tool_use --ignore=tool_use/mistral --models llama3.2 -k "not test_response_format_with_tool_choice_required and not test_parallel_tool_calls_false and not test_tool_call_and_choice"
2048 +
2049 +- label: Rust Frontend Distributed # TBD
2050 + timeout_in_minutes: 180
2051 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx942nightly, amdmi300]
2052 + agent_pool: mi300_4
2053 + num_gpus: 4
2054 + optional: true
2055 + working_dir: "/vllm-workspace/tests"
2056 + source_file_dependencies:
2057 + - rust/
2058 + - vllm/distributed/
2059 + - vllm/engine/
2060 + - vllm/executor/
2061 + - vllm/v1/engine/
2062 + - vllm/v1/worker/
2063 + - tests/utils.py
2064 + - tests/v1/distributed/test_external_lb_dp.py
2065 + - tests/v1/distributed/test_hybrid_lb_dp.py
2066 + - tests/v1/distributed/test_internal_lb_dp.py
2067 + - vllm/platforms/rocm.py
2068 + commands:
2069 + - export VLLM_USE_RUST_FRONTEND=1
2070 + - export VLLM_WORKER_MULTIPROC_METHOD=spawn
2071 + - TP_SIZE=1 DP_SIZE=4 pytest -v -s v1/distributed/test_internal_lb_dp.py -k "not 4 and not server_info"
2072 + - TP_SIZE=1 DP_SIZE=2 pytest -v -s v1/distributed/test_external_lb_dp.py -k "not 4 and not server_info"
2073 + - TP_SIZE=1 DP_SIZE=4 pytest -v -s v1/distributed/test_hybrid_lb_dp.py -k "not 4 and not server_info"
2074 +
2075 #------------------------------------------------------- mi300 · quantization --------------------------------------------------------#
2076
2077 - label: Quantization # TBD
docker/Dockerfile.rocm
+5
@@ -252,6 +252,8 @@ COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/docker/docker-bake.hcl /docker/doc
252 COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/docker/docker-bake-rocm.hcl /docker/docker-bake-rocm.hcl
253 COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/.buildkite /.buildkite
254 COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/pyproject.toml /pyproject.toml
255 +COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/rust /rust
256 +COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/rust-toolchain.toml /rust-toolchain.toml
257 COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/vllm/v1 /vllm_v1
258
259 # RIXL/UCX build stages
@@ -543,6 +545,8 @@ COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/docker/docker-bake.h
545 COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/docker/docker-bake-rocm.hcl /docker/docker-bake-rocm.hcl
546 COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/.buildkite /.buildkite
547 COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/pyproject.toml /pyproject.toml
548 +COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/rust /rust
549 +COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/rust-toolchain.toml /rust-toolchain.toml
550 COPY --from=build_vllm_wheel_release ${COMMON_WORKDIR}/vllm/vllm/v1 /vllm_v1
551
552 # -----------------------
@@ -576,6 +580,7 @@ RUN apt-get update -q -y && apt-get install -q -y --no-install-recommends \
580 libibverbs1 \
581 ibverbs-providers \
582 ibverbs-utils \
583 + unzip \
584 pkg-config ffmpeg libavcodec-dev libavformat-dev libavutil-dev \
585 libswscale-dev libavdevice-dev libavfilter-dev libswresample-dev \
586 && rm -rf /var/lib/apt/lists/*