A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 15, 04:45 UTC
[CI/Build] Allow hermetic builds (#18064)
Signed-off-by: Fabien Dupont <fdupont@redhat.com> Signed-off-by: Tyler Michael Smith <tyler@neuralmagic.com> Signed-off-by: Fabien Dupont <fabiendupont@pm.me> Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com> Co-authored-by: Tyler Michael Smith <tyler@neuralmagic.com> Co-authored-by: Elias Levy <eliaslevy@google.com> Co-authored-by: Harry Mellor <19981378+hmellor@users.noreply.github.com>
Fabien Dupont committed
Jun 27, 2025 at 18:04 UTC
3c545c0c3b98ee642373a308197d750d0e449403
1 file changed
+158
-30
docker/Dockerfile
+158
-30
@@ -6,30 +6,106 @@
6
# docs/assets/contributing/dockerfile-stages-dependency.png
7
8
ARG CUDA_VERSION=12.8.1
9
+ARG PYTHON_VERSION=3.12
10
+
11
+# By parameterizing the base images, we allow third-party to use their own
12
+# base images. One use case is hermetic builds with base images stored in
13
+# private registries that use a different repository naming conventions.
14
+#
15
+# Example:
16
+# docker build --build-arg BUILD_BASE_IMAGE=registry.acme.org/mirror/nvidia/cuda:${CUDA_VERSION}-devel-ubuntu20.04
17
+ARG BUILD_BASE_IMAGE=nvidia/cuda:${CUDA_VERSION}-devel-ubuntu20.04
18
+ARG FINAL_BASE_IMAGE=nvidia/cuda:${CUDA_VERSION}-devel-ubuntu22.04
19
+
20
+# By parameterizing the Deadsnakes repository URL, we allow third-party to use
21
+# their own mirror. When doing so, we don't benefit from the transparent
22
+# installation of the GPG key of the PPA, as done by add-apt-repository, so we
23
+# also need a URL for the GPG key.
24
+ARG DEADSNAKES_MIRROR_URL
25
+ARG DEADSNAKES_GPGKEY_URL
26
+
27
+# The PyPA get-pip.py script is a self contained script+zip file, that provides
28
+# both the installer script and the pip base85-encoded zip archive. This allows
29
+# bootstrapping pip in environment where a dsitribution package does not exist.
30
+#
31
+# By parameterizing the URL for get-pip.py installation script, we allow
32
+# third-party to use their own copy of the script stored in a private mirror.
33
+# We set the default value to the PyPA owned get-pip.py script.
34
+#
35
+# Reference: https://pip.pypa.io/en/stable/installation/#get-pip-py
36
+ARG GET_PIP_URL="https://bootstrap.pypa.io/get-pip.py"
37
+
38
+# PIP supports fetching the packages from custom indexes, allowing third-party
39
+# to host the packages in private mirrors. The PIP_INDEX_URL and
40
+# PIP_EXTRA_INDEX_URL are standard PIP environment variables to override the
41
+# default indexes. By letting them empty by default, PIP will use its default
42
+# indexes if the build process doesn't override the indexes.
43
+#
44
+# Uv uses different variables. We set them by default to the same values as
45
+# PIP, but they can be overridden.
46
+ARG PIP_INDEX_URL
47
+ARG PIP_EXTRA_INDEX_URL
48
+ARG UV_INDEX_URL=${PIP_INDEX_URL}
49
+ARG UV_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL}
50
+
51
+# PyTorch provides its own indexes for standard and nightly builds
52
+ARG PYTORCH_CUDA_INDEX_BASE_URL=https://download.pytorch.org/whl
53
+ARG PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL=https://download.pytorch.org/whl/nightly
54
+
55
+# PIP supports multiple authentication schemes, including keyring
56
+# By parameterizing the PIP_KEYRING_PROVIDER variable and setting it to
57
+# disabled by default, we allow third-party to use keyring authentication for
58
+# their private Python indexes, while not changing the default behavior which
59
+# is no authentication.
60
+#
61
+# Reference: https://pip.pypa.io/en/stable/topics/authentication/#keyring-support
62
+ARG PIP_KEYRING_PROVIDER=disabled
63
+ARG UV_KEYRING_PROVIDER=${PIP_KEYRING_PROVIDER}
64
+
65
#################### BASE BUILD IMAGE ####################
66
# prepare basic build environment
11
-FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu20.04 AS base
12
-ARG CUDA_VERSION=12.8.1
13
-ARG PYTHON_VERSION=3.12
67
+FROM ${BUILD_BASE_IMAGE} AS base
68
+ARG CUDA_VERSION
69
+ARG PYTHON_VERSION
70
ARG TARGETPLATFORM
71
ENV DEBIAN_FRONTEND=noninteractive
72
73
+ARG DEADSNAKES_MIRROR_URL
74
+ARG DEADSNAKES_GPGKEY_URL
75
+ARG GET_PIP_URL
76
+
77
# Install Python and other dependencies
78
RUN echo 'tzdata tzdata/Areas select America' | debconf-set-selections \
79
&& echo 'tzdata tzdata/Zones/America select Los_Angeles' | debconf-set-selections \
80
&& apt-get update -y \
81
&& apt-get install -y ccache software-properties-common git curl sudo \
22
- && for i in 1 2 3; do \
23
- add-apt-repository -y ppa:deadsnakes/ppa && break || \
24
- { echo "Attempt $i failed, retrying in 5s..."; sleep 5; }; \
25
- done \
82
+ && if [ ! -z ${DEADSNAKES_MIRROR_URL} ] ; then \
83
+ if [ ! -z "${DEADSNAKES_GPGKEY_URL}" ] ; then \
84
+ mkdir -p -m 0755 /etc/apt/keyrings ; \
85
+ curl -L ${DEADSNAKES_GPGKEY_URL} | gpg --dearmor > /etc/apt/keyrings/deadsnakes.gpg ; \
86
+ sudo chmod 644 /etc/apt/keyrings/deadsnakes.gpg ; \
87
+ echo "deb [signed-by=/etc/apt/keyrings/deadsnakes.gpg] ${DEADSNAKES_MIRROR_URL} $(lsb_release -cs) main" > /etc/apt/sources.list.d/deadsnakes.list ; \
88
+ fi ; \
89
+ else \
90
+ for i in 1 2 3; do \
91
+ add-apt-repository -y ppa:deadsnakes/ppa && break || \
92
+ { echo "Attempt $i failed, retrying in 5s..."; sleep 5; }; \
93
+ done ; \
94
+ fi \
95
&& apt-get update -y \
96
&& apt-get install -y python${PYTHON_VERSION} python${PYTHON_VERSION}-dev python${PYTHON_VERSION}-venv \
97
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 1 \
98
&& update-alternatives --set python3 /usr/bin/python${PYTHON_VERSION} \
99
&& ln -sf /usr/bin/python${PYTHON_VERSION}-config /usr/bin/python3-config \
31
- && curl -sS https://bootstrap.pypa.io/get-pip.py | python${PYTHON_VERSION} \
100
+ && curl -sS ${GET_PIP_URL} | python${PYTHON_VERSION} \
101
&& python3 --version && python3 -m pip --version
102
+
103
+ARG PIP_INDEX_URL UV_INDEX_URL
104
+ARG PIP_EXTRA_INDEX_URL UV_EXTRA_INDEX_URL
105
+ARG PYTORCH_CUDA_INDEX_BASE_URL
106
+ARG PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL
107
+ARG PIP_KEYRING_PROVIDER UV_KEYRING_PROVIDER
108
+
109
# Install uv for faster pip installs
110
RUN --mount=type=cache,target=/root/.cache/uv \
111
python3 -m pip install uv
@@ -63,15 +139,19 @@ WORKDIR /workspace
139
# after this step
140
RUN --mount=type=cache,target=/root/.cache/uv \
141
if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
66
- uv pip install --system --index-url https://download.pytorch.org/whl/nightly/cu128 "torch==2.8.0.dev20250318+cu128" "torchvision==0.22.0.dev20250319"; \
67
- uv pip install --system --index-url https://download.pytorch.org/whl/nightly/cu128 --pre pytorch_triton==3.3.0+gitab727c40; \
142
+ uv pip install --system \
143
+ --index-url ${PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.') \
144
+ "torch==2.8.0.dev20250318+cu128" "torchvision==0.22.0.dev20250319"; \
145
+ uv pip install --system \
146
+ --index-url ${PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.') \
147
+ --pre pytorch_triton==3.3.0+gitab727c40; \
148
fi
149
150
COPY requirements/common.txt requirements/common.txt
151
COPY requirements/cuda.txt requirements/cuda.txt
152
RUN --mount=type=cache,target=/root/.cache/uv \
153
uv pip install --system -r requirements/cuda.txt \
74
- --extra-index-url https://download.pytorch.org/whl/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
154
+ --extra-index-url ${PYTORCH_CUDA_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
155
156
# cuda arch list used by torch
157
# can be useful for both `dev` and `test`
@@ -88,6 +168,10 @@ ENV VLLM_FA_CMAKE_GPU_ARCHES=${vllm_fa_cmake_gpu_arches}
168
FROM base AS build
169
ARG TARGETPLATFORM
170
171
+ARG PIP_INDEX_URL UV_INDEX_URL
172
+ARG PIP_EXTRA_INDEX_URL UV_EXTRA_INDEX_URL
173
+ARG PYTORCH_CUDA_INDEX_BASE_URL
174
+
175
# install build dependencies
176
COPY requirements/build.txt requirements/build.txt
177
@@ -98,7 +182,7 @@ ENV UV_INDEX_STRATEGY="unsafe-best-match"
182
183
RUN --mount=type=cache,target=/root/.cache/uv \
184
uv pip install --system -r requirements/build.txt \
101
- --extra-index-url https://download.pytorch.org/whl/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
185
+ --extra-index-url ${PYTORCH_CUDA_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
186
187
COPY . .
188
ARG GIT_REPO_CHECK=0
@@ -113,6 +197,8 @@ ARG nvcc_threads=8
197
ENV NVCC_THREADS=$nvcc_threads
198
199
ARG USE_SCCACHE
200
+ARG SCCACHE_DOWNLOAD_URL=https://github.com/mozilla/sccache/releases/download/v0.8.1/sccache-v0.8.1-x86_64-unknown-linux-musl.tar.gz
201
+ARG SCCACHE_ENDPOINT
202
ARG SCCACHE_BUCKET_NAME=vllm-build-sccache
203
ARG SCCACHE_REGION_NAME=us-west-2
204
ARG SCCACHE_S3_NO_CREDENTIALS=0
@@ -121,10 +207,11 @@ RUN --mount=type=cache,target=/root/.cache/uv \
207
--mount=type=bind,source=.git,target=.git \
208
if [ "$USE_SCCACHE" = "1" ]; then \
209
echo "Installing sccache..." \
124
- && curl -L -o sccache.tar.gz https://github.com/mozilla/sccache/releases/download/v0.8.1/sccache-v0.8.1-x86_64-unknown-linux-musl.tar.gz \
210
+ && curl -L -o sccache.tar.gz ${SCCACHE_DOWNLOAD_URL} \
211
&& tar -xzf sccache.tar.gz \
212
&& sudo mv sccache-v0.8.1-x86_64-unknown-linux-musl/sccache /usr/bin/sccache \
213
&& rm -rf sccache.tar.gz sccache-v0.8.1-x86_64-unknown-linux-musl \
214
+ && if [ ! -z ${SCCACHE_ENDPOINT} ] ; then export SCCACHE_ENDPOINT=${SCCACHE_ENDPOINT} ; fi \
215
&& export SCCACHE_BUCKET=${SCCACHE_BUCKET_NAME} \
216
&& export SCCACHE_REGION=${SCCACHE_REGION_NAME} \
217
&& export SCCACHE_S3_NO_CREDENTIALS=${SCCACHE_S3_NO_CREDENTIALS} \
@@ -162,6 +249,10 @@ RUN if [ "$RUN_WHEEL_CHECK" = "true" ]; then \
249
#################### DEV IMAGE ####################
250
FROM base as dev
251
252
+ARG PIP_INDEX_URL UV_INDEX_URL
253
+ARG PIP_EXTRA_INDEX_URL UV_EXTRA_INDEX_URL
254
+ARG PYTORCH_CUDA_INDEX_BASE_URL
255
+
256
# This timeout (in seconds) is necessary when installing some dependencies via uv since it's likely to time out
257
# Reference: https://github.com/astral-sh/uv/pull/1694
258
ENV UV_HTTP_TIMEOUT=500
@@ -176,21 +267,25 @@ COPY requirements/test.txt requirements/test.txt
267
COPY requirements/dev.txt requirements/dev.txt
268
RUN --mount=type=cache,target=/root/.cache/uv \
269
uv pip install --system -r requirements/dev.txt \
179
- --extra-index-url https://download.pytorch.org/whl/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
270
+ --extra-index-url ${PYTORCH_CUDA_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
271
#################### DEV IMAGE ####################
272
273
#################### vLLM installation IMAGE ####################
274
# image with vLLM installed
275
# TODO: Restore to base image after FlashInfer AOT wheel fixed
185
-FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu22.04 AS vllm-base
186
-ARG CUDA_VERSION=12.8.1
187
-ARG PYTHON_VERSION=3.12
276
+FROM ${FINAL_BASE_IMAGE} AS vllm-base
277
+ARG CUDA_VERSION
278
+ARG PYTHON_VERSION
279
WORKDIR /vllm-workspace
280
ENV DEBIAN_FRONTEND=noninteractive
281
ARG TARGETPLATFORM
282
283
SHELL ["/bin/bash", "-c"]
284
285
+ARG DEADSNAKES_MIRROR_URL
286
+ARG DEADSNAKES_GPGKEY_URL
287
+ARG GET_PIP_URL
288
+
289
RUN PYTHON_VERSION_STR=$(echo ${PYTHON_VERSION} | sed 's/\.//g') && \
290
echo "export PYTHON_VERSION_STR=${PYTHON_VERSION_STR}" >> /etc/environment
291
@@ -200,17 +295,33 @@ RUN echo 'tzdata tzdata/Areas select America' | debconf-set-selections \
295
&& apt-get update -y \
296
&& apt-get install -y ccache software-properties-common git curl wget sudo vim python3-pip \
297
&& apt-get install -y ffmpeg libsm6 libxext6 libgl1 \
203
- && for i in 1 2 3; do \
204
- add-apt-repository -y ppa:deadsnakes/ppa && break || \
205
- { echo "Attempt $i failed, retrying in 5s..."; sleep 5; }; \
206
- done \
298
+ && if [ ! -z ${DEADSNAKES_MIRROR_URL} ] ; then \
299
+ if [ ! -z "${DEADSNAKES_GPGKEY_URL}" ] ; then \
300
+ mkdir -p -m 0755 /etc/apt/keyrings ; \
301
+ curl -L ${DEADSNAKES_GPGKEY_URL} | gpg --dearmor > /etc/apt/keyrings/deadsnakes.gpg ; \
302
+ sudo chmod 644 /etc/apt/keyrings/deadsnakes.gpg ; \
303
+ echo "deb [signed-by=/etc/apt/keyrings/deadsnakes.gpg] ${DEADSNAKES_MIRROR_URL} $(lsb_release -cs) main" > /etc/apt/sources.list.d/deadsnakes.list ; \
304
+ fi ; \
305
+ else \
306
+ for i in 1 2 3; do \
307
+ add-apt-repository -y ppa:deadsnakes/ppa && break || \
308
+ { echo "Attempt $i failed, retrying in 5s..."; sleep 5; }; \
309
+ done ; \
310
+ fi \
311
&& apt-get update -y \
312
&& apt-get install -y python${PYTHON_VERSION} python${PYTHON_VERSION}-dev python${PYTHON_VERSION}-venv libibverbs-dev \
313
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 1 \
314
&& update-alternatives --set python3 /usr/bin/python${PYTHON_VERSION} \
315
&& ln -sf /usr/bin/python${PYTHON_VERSION}-config /usr/bin/python3-config \
212
- && curl -sS https://bootstrap.pypa.io/get-pip.py | python${PYTHON_VERSION} \
316
+ && curl -sS ${GET_PIP_URL} | python${PYTHON_VERSION} \
317
&& python3 --version && python3 -m pip --version
318
+
319
+ARG PIP_INDEX_URL UV_INDEX_URL
320
+ARG PIP_EXTRA_INDEX_URL UV_EXTRA_INDEX_URL
321
+ARG PYTORCH_CUDA_INDEX_BASE_URL
322
+ARG PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL
323
+ARG PIP_KEYRING_PROVIDER UV_KEYRING_PROVIDER
324
+
325
# Install uv for faster pip installs
326
RUN --mount=type=cache,target=/root/.cache/uv \
327
python3 -m pip install uv
@@ -232,15 +343,19 @@ RUN ldconfig /usr/local/cuda-$(echo $CUDA_VERSION | cut -d. -f1,2)/compat/
343
# after this step
344
RUN --mount=type=cache,target=/root/.cache/uv \
345
if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
235
- uv pip install --system --index-url https://download.pytorch.org/whl/nightly/cu128 "torch==2.8.0.dev20250318+cu128" "torchvision==0.22.0.dev20250319"; \
236
- uv pip install --system --index-url https://download.pytorch.org/whl/nightly/cu128 --pre pytorch_triton==3.3.0+gitab727c40; \
346
+ uv pip install --system \
347
+ --index-url ${PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.') \
348
+ "torch==2.8.0.dev20250318+cu128" "torchvision==0.22.0.dev20250319" ; \
349
+ uv pip install --system \
350
+ --index-url ${PYTORCH_CUDA_NIGHTLY_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.') \
351
+ --pre pytorch_triton==3.3.0+gitab727c40 ; \
352
fi
353
354
# Install vllm wheel first, so that torch etc will be installed.
355
RUN --mount=type=bind,from=build,src=/workspace/dist,target=/vllm-workspace/dist \
356
--mount=type=cache,target=/root/.cache/uv \
357
uv pip install --system dist/*.whl --verbose \
243
- --extra-index-url https://download.pytorch.org/whl/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
358
+ --extra-index-url ${PYTORCH_CUDA_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
359
360
# If we need to build FlashInfer wheel before its release:
361
# $ # Note we remove 7.0 from the arch list compared to the list below, since FlashInfer only supports sm75+
@@ -254,15 +369,20 @@ RUN --mount=type=bind,from=build,src=/workspace/dist,target=/vllm-workspace/dist
369
# -rw-rw-r-- 1 mgoin mgoin 205M Jun 9 18:03 flashinfer_python-0.2.6.post1-cp39-abi3-linux_x86_64.whl
370
# $ # upload the wheel to a public location, e.g. https://wheels.vllm.ai/flashinfer/v0.2.6.post1/flashinfer_python-0.2.6.post1-cp39-abi3-linux_x86_64.whl
371
372
+# Allow specifying a version, Git revision or local .whl file
373
+ARG FLASHINFER_CUDA128_INDEX_URL="https://download.pytorch.org/whl/cu128/flashinfer"
374
+ARG FLASHINFER_CUDA128_WHEEL="flashinfer_python-0.2.6.post1%2Bcu128torch2.7-cp39-abi3-linux_x86_64.whl"
375
+ARG FLASHINFER_GIT_REPO="https://github.com/flashinfer-ai/flashinfer.git"
376
+ARG FLASHINFER_GIT_REF="v0.2.6.post1"
377
RUN --mount=type=cache,target=/root/.cache/uv \
378
. /etc/environment && \
379
if [ "$TARGETPLATFORM" != "linux/arm64" ]; then \
380
# FlashInfer already has a wheel for PyTorch 2.7.0 and CUDA 12.8. This is enough for CI use
381
if [[ "$CUDA_VERSION" == 12.8* ]]; then \
262
- uv pip install --system https://download.pytorch.org/whl/cu128/flashinfer/flashinfer_python-0.2.6.post1%2Bcu128torch2.7-cp39-abi3-linux_x86_64.whl; \
382
+ uv pip install --system ${FLASHINFER_CUDA128_INDEX_URL}/${FLASHINFER_CUDA128_WHEEL} ; \
383
else \
384
export TORCH_CUDA_ARCH_LIST='7.5 8.0 8.9 9.0a 10.0a 12.0' && \
265
- git clone https://github.com/flashinfer-ai/flashinfer.git --single-branch --branch v0.2.6.post1 --recursive && \
385
+ git clone ${FLASHINFER_GIT_REPO} --single-branch --branch ${FLASHINFER_GIT_REF} --recursive && \
386
# Needed to build AOT kernels
387
(cd flashinfer && \
388
python3 -m flashinfer.aot && \
@@ -286,7 +406,7 @@ uv pip list
406
COPY requirements/build.txt requirements/build.txt
407
RUN --mount=type=cache,target=/root/.cache/uv \
408
uv pip install --system -r requirements/build.txt \
289
- --extra-index-url https://download.pytorch.org/whl/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
409
+ --extra-index-url ${PYTORCH_CUDA_INDEX_BASE_URL}/cu$(echo $CUDA_VERSION | cut -d. -f1,2 | tr -d '.')
410
411
#################### vLLM installation IMAGE ####################
412
@@ -297,6 +417,11 @@ FROM vllm-base AS test
417
418
ADD . /vllm-workspace/
419
420
+ARG PYTHON_VERSION
421
+
422
+ARG PIP_INDEX_URL UV_INDEX_URL
423
+ARG PIP_EXTRA_INDEX_URL UV_EXTRA_INDEX_URL
424
+
425
# This timeout (in seconds) is necessary when installing some dependencies via uv since it's likely to time out
426
# Reference: https://github.com/astral-sh/uv/pull/1694
427
ENV UV_HTTP_TIMEOUT=500
@@ -307,7 +432,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \
432
uv pip install --system --no-build-isolation "git+https://github.com/state-spaces/mamba@v2.2.4"
433
434
# install development dependencies (for testing)
310
-RUN --mount=type=cache,target=/root/.cache/uv \
435
+RUN --mount=type=cache,target=/root/.cache/uv \
436
CUDA_MAJOR="${CUDA_VERSION%%.*}"; \
437
if [ "$CUDA_MAJOR" -ge 12 ]; then \
438
uv pip install --system -r requirements/dev.txt; \
@@ -323,7 +448,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \
448
ENV HF_HUB_ENABLE_HF_TRANSFER 1
449
450
# Copy in the v1 package for testing (it isn't distributed yet)
326
-COPY vllm/v1 /usr/local/lib/python3.12/dist-packages/vllm/v1
451
+COPY vllm/v1 /usr/local/lib/python${PYTHON_VERSION}/dist-packages/vllm/v1
452
453
# doc requires source code
454
# we hide them inside `test_docs/` , so that this source code
@@ -340,6 +465,9 @@ RUN mv mkdocs.yaml test_docs/
465
FROM vllm-base AS vllm-openai-base
466
ARG TARGETPLATFORM
467
468
+ARG PIP_INDEX_URL UV_INDEX_URL
469
+ARG PIP_EXTRA_INDEX_URL UV_EXTRA_INDEX_URL
470
+
471
# This timeout (in seconds) is necessary when installing some dependencies via uv since it's likely to time out
472
# Reference: https://github.com/astral-sh/uv/pull/1694
473
ENV UV_HTTP_TIMEOUT=500