diff --git a/docker/Dockerfile.rocm b/docker/Dockerfile.rocm index 42466d1801cf6..4aabe2661088a 100644 --- a/docker/Dockerfile.rocm +++ b/docker/Dockerfile.rocm @@ -65,6 +65,8 @@ COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/tests /tests COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/examples /examples COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/docker/Dockerfile.rocm /docker/ COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/.buildkite /.buildkite +# Centralized v1 package - copied to both test and final stages +COPY --from=build_vllm ${COMMON_WORKDIR}/vllm/vllm/v1 /vllm_v1 # ----------------------- # Test vLLM image @@ -88,10 +90,22 @@ COPY --from=build_vllm ${COMMON_WORKDIR}/vllm /vllm-workspace # install development dependencies (for testing) RUN cd /vllm-workspace \ - && rm -rf vllm \ && python3 -m pip install -e tests/vllm_test_utils \ && python3 -m pip install pytest-shard +# enable fast downloads from hf (for testing) +RUN --mount=type=cache,target=/root/.cache/uv \ + uv pip install --system hf_transfer +ENV HF_HUB_ENABLE_HF_TRANSFER=1 + +# Copy in the v1 package +COPY --from=export_vllm /vllm_v1 /usr/local/lib/python${PYTHON_VERSION}/dist-packages/vllm/v1 + +# Source code is used in the `python_only_compile.sh` test +# We hide it inside `src/` so that this source code +# will not be imported by other tests +RUN mkdir src && mv vllm src/vllm + # ----------------------- # Final vLLM image FROM base AS final @@ -116,6 +130,9 @@ RUN --mount=type=bind,from=export_vllm,src=/,target=/install \ && pip uninstall -y vllm \ && uv pip install --system *.whl +# Copy in the v1 package +COPY --from=export_vllm /vllm_v1 /usr/local/lib/python${PYTHON_VERSION}/dist-packages/vllm/v1 + ARG COMMON_WORKDIR # Copy over the benchmark scripts as well diff --git a/docker/Dockerfile.rocm_base b/docker/Dockerfile.rocm_base index df4f9b6c26e7d..a57ee728d9243 100644 --- a/docker/Dockerfile.rocm_base +++ b/docker/Dockerfile.rocm_base @@ -5,6 +5,8 @@ ARG PYTORCH_BRANCH="1c57644d" ARG PYTORCH_VISION_BRANCH="v0.23.0" ARG PYTORCH_REPO="https://github.com/ROCm/pytorch.git" ARG PYTORCH_VISION_REPO="https://github.com/pytorch/vision.git" +ARG PYTORCH_AUDIO_BRANCH="v2.9.0" +ARG PYTORCH_AUDIO_REPO="https://github.com/pytorch/audio.git" ARG FA_BRANCH="0e60e394" ARG FA_REPO="https://github.com/Dao-AILab/flash-attention.git" ARG AITER_BRANCH="59bd8ff2" @@ -23,6 +25,7 @@ ENV AITER_ROCM_ARCH=gfx942;gfx950 ENV HSA_NO_SCRATCH_RECLAIM=1 ARG PYTHON_VERSION=3.12 +ENV PYTHON_VERSION=${PYTHON_VERSION} RUN mkdir -p /app WORKDIR /app @@ -45,6 +48,7 @@ RUN apt-get update -y \ && python3 --version && python3 -m pip --version RUN pip install -U packaging 'cmake<4' ninja wheel 'setuptools<80' pybind11 Cython +RUN apt-get update && apt-get install -y libjpeg-dev libsox-dev libsox-fmt-all sox && rm -rf /var/lib/apt/lists/* FROM base AS build_triton ARG TRITON_BRANCH @@ -66,11 +70,14 @@ RUN mkdir -p /app/install && cp /opt/rocm/share/amd_smi/dist/*.whl /app/install FROM base AS build_pytorch ARG PYTORCH_BRANCH ARG PYTORCH_VISION_BRANCH +ARG PYTORCH_AUDIO_BRANCH ARG PYTORCH_REPO ARG PYTORCH_VISION_REPO +ARG PYTORCH_AUDIO_REPO + RUN git clone ${PYTORCH_REPO} pytorch -RUN cd pytorch && git checkout ${PYTORCH_BRANCH} && \ - pip install -r requirements.txt && git submodule update --init --recursive \ +RUN cd pytorch && git checkout ${PYTORCH_BRANCH} \ + && pip install -r requirements.txt && git submodule update --init --recursive \ && python3 tools/amd_build/build_amd.py \ && CMAKE_PREFIX_PATH=$(python3 -c 'import sys; print(sys.prefix)') python3 setup.py bdist_wheel --dist-dir=dist \ && pip install dist/*.whl @@ -78,8 +85,15 @@ RUN git clone ${PYTORCH_VISION_REPO} vision RUN cd vision && git checkout ${PYTORCH_VISION_BRANCH} \ && python3 setup.py bdist_wheel --dist-dir=dist \ && pip install dist/*.whl +RUN git clone ${PYTORCH_AUDIO_REPO} audio +RUN cd audio && git checkout ${PYTORCH_AUDIO_BRANCH} \ + && git submodule update --init --recursive \ + && pip install -r requirements.txt \ + && python3 setup.py bdist_wheel --dist-dir=dist \ + && pip install dist/*.whl RUN mkdir -p /app/install && cp /app/pytorch/dist/*.whl /app/install \ - && cp /app/vision/dist/*.whl /app/install + && cp /app/vision/dist/*.whl /app/install \ + && cp /app/audio/dist/*.whl /app/install FROM base AS build_fa ARG FA_BRANCH @@ -130,6 +144,8 @@ ARG PYTORCH_BRANCH ARG PYTORCH_VISION_BRANCH ARG PYTORCH_REPO ARG PYTORCH_VISION_REPO +ARG PYTORCH_AUDIO_BRANCH +ARG PYTORCH_AUDIO_REPO ARG FA_BRANCH ARG FA_REPO ARG AITER_BRANCH @@ -141,7 +157,9 @@ RUN echo "BASE_IMAGE: ${BASE_IMAGE}" > /app/versions.txt \ && echo "PYTORCH_VISION_BRANCH: ${PYTORCH_VISION_BRANCH}" >> /app/versions.txt \ && echo "PYTORCH_REPO: ${PYTORCH_REPO}" >> /app/versions.txt \ && echo "PYTORCH_VISION_REPO: ${PYTORCH_VISION_REPO}" >> /app/versions.txt \ + && echo "PYTORCH_AUDIO_BRANCH: ${PYTORCH_AUDIO_BRANCH}" >> /app/versions.txt \ + && echo "PYTORCH_AUDIO_REPO: ${PYTORCH_AUDIO_REPO}" >> /app/versions.txt \ && echo "FA_BRANCH: ${FA_BRANCH}" >> /app/versions.txt \ && echo "FA_REPO: ${FA_REPO}" >> /app/versions.txt \ && echo "AITER_BRANCH: ${AITER_BRANCH}" >> /app/versions.txt \ - && echo "AITER_REPO: ${AITER_REPO}" >> /app/versions.txt + && echo "AITER_REPO: ${AITER_REPO}" >> /app/versions.txt \ No newline at end of file diff --git a/requirements/rocm-test.txt b/requirements/rocm-test.txt index 8a91b59de6f72..ae61d4c6c6a81 100644 --- a/requirements/rocm-test.txt +++ b/requirements/rocm-test.txt @@ -1,51 +1,85 @@ # Common dependencies -r common.txt -tblib==3.1.0 -bm25s==0.2.13 -pystemmer==3.0.0 -# Entrypoints test -# librosa==0.10.2.post1 # required by audio tests in entrypoints/openai +# Test infrastructure +tblib==3.1.0 +pytest==8.3.5 +pytest-asyncio==0.24.0 +pytest-timeout==2.3.1 +pytest-cov==6.3.0 +pytest-forked==1.6.0 +pytest-rerunfailures==14.0 +pytest-shard==0.1.2 + +# Async/HTTP dependencies +anyio==4.6.2.post1 + # via httpx, starlette +aiohttp==3.13.0 + # via gpt-oss +httpx==0.27.2 + # HTTP testing + +# Audio processing dependencies audioread==3.0.1 + # via librosa cffi==1.17.1 + # via soundfile decorator==5.2.1 + # via librosa lazy-loader==0.4 + # via librosa platformdirs==4.3.6 + # via pooch pooch==1.8.2 -#pycparse==2.22 + # via librosa soundfile==0.13.1 + # via librosa soxr==0.5.0.post1 + # via librosa librosa==0.10.2.post1 -# Entrypoints test -#vllm[video] # required by entrypoints/openai/test_video.py -decord==0.6.0 +# Retrieval and search +bm25s==0.2.13 + # via mteb +pystemmer==3.0.0 + # via mteb -# Entrypoints test -#sentence-transformers # required by entrypoints/openai/test_score.py -sentence-transformers==3.4.1 - -# Basic Models Test -matplotlib==3.10.3 - -# Multi-Modal Models Test (Extended) 3 +# Multi-modal processing blobfile==3.0.0 + # Multi-Modal Models Test +decord==0.6.0 + # video processing, required by entrypoints/openai/test_video.py -# Required for openai schema test. +# OpenAI compatibility and testing +gpt-oss==0.0.8 + # OpenAI compatibility tests schemathesis==3.39.15 + # OpenAI schema test -# Required for mteb test -mteb[bm25s]>=1.38.11, <2 - -# Required for eval tests +# Evaluation and benchmarking lm-eval[api] @ git+https://github.com/EleutherAI/lm-evaluation-harness.git@206b7722158f58c35b7ffcd53b035fdbdda5126d -# Required for multiprocessed tests that use spawn method +# Required for multiprocessed tests that use spawn method, Datasets and Evaluate Test multiprocess==0.70.16 # Plugins test terratorch @ git+https://github.com/IBM/terratorch.git@07184fcf91a1324f831ff521dd238d97fe350e3e torchgeo==0.7.0 + # via terratorch +# MTEB Benchmark Test +mteb==2.1.2 + +# Data processing +xgrammar @ git+https://github.com/mlc-ai/xgrammar.git@eafd4db51b78acc64b3f0764ef27dfd206c28628 + # Test async scheduling + +# Utilities +num2words==0.5.14 + # via lm-eval +pqdm==0.2.0 + # via lm-eval # Required for suffix decoding test arctic-inference == 0.1.1 +# Required for Nemotron test +open-clip-torch==2.32.0 diff --git a/tests/models/multimodal/processing/test_tensor_schema.py b/tests/models/multimodal/processing/test_tensor_schema.py index a287d5b87d1b7..66a3fbe11b6a5 100644 --- a/tests/models/multimodal/processing/test_tensor_schema.py +++ b/tests/models/multimodal/processing/test_tensor_schema.py @@ -30,6 +30,7 @@ from vllm.model_executor.models.interfaces import ( from vllm.multimodal import MULTIMODAL_REGISTRY, BatchedTensorInputs from vllm.multimodal.processing import BaseMultiModalProcessor, InputProcessingContext from vllm.multimodal.utils import group_mm_kwargs_by_modality +from vllm.platforms import current_platform from vllm.transformers_utils.tokenizer import cached_tokenizer_from_config from vllm.utils.collection_utils import is_list_of from vllm.utils.torch_utils import set_default_torch_dtype @@ -176,6 +177,12 @@ def test_model_tensor_schema(model_id: str): exist_overrides=model_info.hf_overrides, ) + # ROCm: Detect if model uses AWQ quantization and set appropriate dtype + if "awq" in model_id.lower() and current_platform.is_rocm(): + dtype = "float16" + else: + dtype = model_info.dtype + model_config = ModelConfig( model_id, tokenizer=model_info.tokenizer or model_id, @@ -187,7 +194,7 @@ def test_model_tensor_schema(model_id: str): enable_prompt_embeds=model_info.require_embed_inputs, enable_mm_embeds=model_info.require_embed_inputs, enforce_eager=model_info.enforce_eager, - dtype=model_info.dtype, + dtype=dtype, ) model_cls = MULTIMODAL_REGISTRY._get_model_cls(model_config)