Signed-off-by: tzhouam <tzhouam@connect.ust.hk> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
78 lines
3.5 KiB
Docker
78 lines
3.5 KiB
Docker
# Target vllm version: v0.28.0 (tag v0.28.0 @ 2cf0a6915ce5).
|
|
# Keep VLLM_BASE_TAG aligned with the target vLLM release on every rebase.
|
|
#
|
|
# Release-boundary form: there is no precompiled-wheel pin here, because the
|
|
# base image already ships exactly the target vLLM. Everything the runtime
|
|
# needs — torch, flashinfer, nvJitLink, numpy — comes from that image as one
|
|
# self-consistent set.
|
|
#
|
|
# This block reappears only when the rebase targets a vLLM commit that is NOT a
|
|
# released tag. During the 0.27 rebase, targeting v0.27.0rc1 on top of the
|
|
# v0.26.0 base image required reinstalling vLLM from wheels.vllm.ai and then
|
|
# hand-repairing the fallout: pinning torch ahead of flashinfer (installing it
|
|
# after bound flashinfer's TVM FFI runtime to the old torch and aborted engine
|
|
# core init), registering libnvJitLink.so.13 with ldconfig, and re-pinning numpy
|
|
# under numba's ceiling. All of it was compensation for a base image and a vLLM
|
|
# that disagreed. At a real release boundary they agree, so none of it is
|
|
# needed. The 0.28 rebase repeated the cycle: the v0.28.0rc / final-tag wheels
|
|
# rode on the v0.27.0 base image with the full reinstall block until the
|
|
# official v0.28.0 image shipped, at which point this file dropped back to the
|
|
# form you are reading. If you pin an untagged commit again, restore the
|
|
# reinstall block — agent/tasks/20_update_wheel_url.sh fails the run rather
|
|
# than letting the Dockerfile silently ship the wrong vLLM.
|
|
ARG VLLM_BASE_IMAGE=vllm/vllm-openai
|
|
ARG VLLM_BASE_TAG=v0.28.0
|
|
|
|
# We use registry-based layer caching for the dependencies,
|
|
# where the tag is determined based on the hash of the contents
|
|
# of files like pyproject.toml, etc. The deps stage should have
|
|
# everything except the actual project dir, since that should not
|
|
# change much across branches.
|
|
FROM ${VLLM_BASE_IMAGE}:${VLLM_BASE_TAG} AS deps
|
|
# Keep APP_DIR outside /workspace so k8s Buildkite workspace mounts cannot
|
|
# shadow the editable install target (#5364). Docker WORKDIR creates /opt if
|
|
# needed.
|
|
ARG APP_DIR=/opt/vllm-omni
|
|
WORKDIR ${APP_DIR}
|
|
|
|
RUN ln -sf /usr/bin/python3 /usr/bin/python
|
|
|
|
# Placeholder package tree so editable install can register APP_DIR.
|
|
# The final stage COPY --link fills this directory with the real sources;
|
|
# the editable .pth / egg-link keeps resolving imports there — no PYTHONPATH.
|
|
RUN mkdir -p vllm_omni && touch vllm_omni/__init__.py
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && \
|
|
apt-get install -y espeak-ng git jq && \
|
|
apt-get clean && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy dependency related things first and install deps/
|
|
# We set the version str to 0.0.0 since it doesn't matter
|
|
# for CI
|
|
COPY pyproject.toml setup.py ./
|
|
COPY requirements/ requirements/
|
|
ENV SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0
|
|
# Editable install: deps + project metadata are cached in this layer, while
|
|
# the package itself is linked to APP_DIR (populated later by COPY --link).
|
|
# Do NOT use a non-editable install here — that copies an empty stub into
|
|
# site-packages and breaks ``import vllm_omni.entrypoints``.
|
|
RUN uv pip install --system -e ".[dev]"
|
|
|
|
# The final stage just copies the working dir on top of the
|
|
# dependencies image. This uses --link so that we can skip
|
|
# the image pull in Buildkite when we have a cache hit.
|
|
#
|
|
# IMPORTANT: Do not make any modifications that depend on the
|
|
# file system after the --link copy, otherwise we'd need to pull
|
|
# the heavy base image to build it. Editable install above already
|
|
# registered APP_DIR, so we must not re-pip-install after COPY.
|
|
FROM deps
|
|
ARG APP_DIR=/opt/vllm-omni
|
|
WORKDIR ${APP_DIR}
|
|
|
|
COPY --link . .
|
|
|
|
ENTRYPOINT []
|