157 lines
6.1 KiB
Docker
157 lines
6.1 KiB
Docker
# Base UBI image
|
|
ARG BASE_UBI_IMAGE_TAG=9.6-1754584681
|
|
|
|
###############################################################
|
|
# BUILDER STAGE #
|
|
###############################################################
|
|
|
|
FROM registry.access.redhat.com/ubi9/ubi-minimal:${BASE_UBI_IMAGE_TAG} AS builder-base
|
|
|
|
ARG VLLM_VERSION="0.22.1"
|
|
ARG PYTHON_VERSION=3.12
|
|
ARG VLLM_TARGET_DEVICE=cpu
|
|
|
|
USER root
|
|
WORKDIR /root
|
|
|
|
ENV HOME=/root \
|
|
WHEEL_DIR=/wheelsdir \
|
|
VIRTUAL_ENV=/opt/vllm \
|
|
GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \
|
|
CARGO_HOME=/root/.cargo \
|
|
RUSTUP_HOME=/root/.rustup \
|
|
UV_CACHE_DIR=$HOME/.cache/uv \
|
|
PATH=/root/.cargo/bin:/root/.rustup/bin:${VIRTUAL_ENV}/bin:$PATH
|
|
|
|
RUN echo "DEBUG: VLLM_VERSION=${VLLM_VERSION}"
|
|
RUN --mount=type=cache,target=/var/cache/dnf \
|
|
microdnf install -y \
|
|
python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip \
|
|
&& python${PYTHON_VERSION} -m venv ${VIRTUAL_ENV} \
|
|
&& python${PYTHON_VERSION} -m pip install -U pip uv --no-cache
|
|
|
|
# Important: Copy only bare minimum required for the script to run
|
|
COPY requirements/ requirements/
|
|
COPY pyproject.toml ./
|
|
|
|
# The script is expected to install whatever python dependencies are missing
|
|
# as well as whatever system libraries need to be installed from source
|
|
COPY build_vllm_*.sh ./
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
sh ./build_vllm_$(uname -m).sh
|
|
|
|
# copy vllm source code to build cache
|
|
COPY . .
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
source /opt/rh/gcc-toolset-14/enable && \
|
|
pip install -U uv
|
|
|
|
# build & install vLLM so that all transitive dependencies are build/downloaded into the uv cache
|
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
source /opt/rh/gcc-toolset-14/enable && \
|
|
export PATH=/opt/rh/gcc-toolset-14/root/usr/bin:$PATH && \
|
|
export CC=/opt/rh/gcc-toolset-14/root/usr/bin/gcc && \
|
|
export CXX=/opt/rh/gcc-toolset-14/root/usr/bin/g++ && \
|
|
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:$PKG_CONFIG_PATH && \
|
|
export CMAKE_PREFIX_PATH=/usr/local:/usr:$CMAKE_PREFIX_PATH && \
|
|
export Protobuf_PROTOC_EXECUTABLE=/usr/bin/protoc && \
|
|
export CFLAGS="-mcpu=power10 -mtune=power10" && \
|
|
export CXXFLAGS="-mcpu=power10 -mtune=power10" && \
|
|
export DNNL_ARCH_OPT_FLAGS="-mcpu=power10 -mtune=power10" && \
|
|
export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH && \
|
|
export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH && \
|
|
uv pip install 'setuptools>=78.1.1' && \
|
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/OpenBLAS/lib/:/usr/local/lib64:/usr/local/lib && \
|
|
export LIBGOMP=/opt/rh/gcc-toolset-14/root/usr/lib/gcc/ppc64le-redhat-linux/14/libgomp.so && \
|
|
|
|
export CMAKE_LIBRARY_PATH=$(dirname $LIBGOMP):${CMAKE_LIBRARY_PATH} && \
|
|
export LIBRARY_PATH=$(dirname $LIBGOMP):${LIBRARY_PATH} && \
|
|
export LD_LIBRARY_PATH=$(dirname $LIBGOMP):${LD_LIBRARY_PATH} && \
|
|
|
|
echo "LIBGOMP=${LIBGOMP}" && \
|
|
find /root/.cache/uv -name "*.whl" && \
|
|
SETUPTOOLS_SCM_PRETEND_VERSION="$VLLM_VERSION" uv build \
|
|
--wheel --out-dir ${WHEEL_DIR} --no-build-isolation && \
|
|
uv pip install "$(echo ${WHEEL_DIR}/vllm*.whl)[tensorizer]" --refresh
|
|
|
|
###############################################################
|
|
# FINAL VLLM IMAGE STAGE #
|
|
###############################################################
|
|
|
|
FROM registry.access.redhat.com/ubi9/ubi-minimal:${BASE_UBI_IMAGE_TAG} AS vllm-openai
|
|
|
|
ARG PYTHON_VERSION=3.12
|
|
ENV VLLM_NO_USAGE_STATS=1
|
|
|
|
# Set Environment Variables for venv & openblas
|
|
ENV VIRTUAL_ENV=/opt/vllm
|
|
ENV PCP_DIR=/opt/rh/gcc-toolset-14/root
|
|
ENV PATH=${VIRTUAL_ENV}/bin:${PCP_DIR}/usr/bin:/usr/local/bin:$PATH
|
|
ENV PKG_CONFIG_PATH=${PCP_DIR}/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig/
|
|
ENV C_INCLUDE_PATH="/usr/local/include:$C_INCLUDE_PATH"
|
|
ENV LD_LIBRARY_PATH=${PCP_DIR}/usr/lib64:${PCP_DIR}/usr/lib:${VIRTUAL_ENV}/lib64/python${PYTHON_VERSION}/site-packages/torch/lib:/usr/local/lib:$LD_LIBRARY_PATH:/usr/local/lib64:/usr/lib64:/usr/lib
|
|
ENV UV_LINK_MODE=copy
|
|
ARG VLLM_VERSION="0.22.1"
|
|
ARG UV_EXTRA_INDEX_URL="https://wheels.developerfirst.ibm.com/ppc64le/linux/+simple/"
|
|
ENV UV_EXTRA_INDEX_URL=${UV_EXTRA_INDEX_URL}
|
|
ENV UV_INDEX_STRATEGY=first-match
|
|
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
|
|
microdnf install --nodocs -y \
|
|
libomp libicu tar autoconf automake libtool findutils openssl numactl numactl-devel \
|
|
pkgconfig xsimd gcc-toolset-14 libsndfile \
|
|
libtiff libjpeg openjpeg2 zlib zeromq \
|
|
freetype lcms2 libwebp tcl tk utf8proc \
|
|
harfbuzz fribidi libraqm libimagequant libxcb util-linux gperftools-libs \
|
|
python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip \
|
|
&& source /opt/rh/gcc-toolset-14/enable \
|
|
&& microdnf update -y \
|
|
&& microdnf clean all
|
|
|
|
# The `lscpu` command was added as a requirement in part of https://github.com/vllm-project/vllm/pull/21032, so installing it.
|
|
RUN microdnf install --nodocs -y util-linux && \
|
|
microdnf clean all
|
|
|
|
COPY --from=builder-base /usr/lib64/libprotobuf.so.25 /usr/lib64/
|
|
COPY --from=builder-base /usr/lib64/libprotobuf.so.25.0.0 /usr/lib64/
|
|
|
|
# Use builder venv in final stage instead of wheel reinstallation
|
|
COPY --from=builder-base /opt/vllm /opt/vllm
|
|
|
|
ENV LD_PRELOAD=/usr/lib64/libtcmalloc.so.4
|
|
|
|
WORKDIR /home/vllm
|
|
|
|
# setup non-root user for OpenShift
|
|
RUN umask 002 && \
|
|
useradd --uid 2000 --gid 0 vllm && \
|
|
mkdir -p /home/vllm && \
|
|
chmod g+rwx /home/vllm
|
|
|
|
ENV HOME=/home/vllm
|
|
|
|
# Add labels to document build configuration
|
|
LABEL org.opencontainers.image.title="vLLM CPU"
|
|
LABEL org.opencontainers.image.description="vLLM inference engine for CPU platforms"
|
|
LABEL org.opencontainers.image.vendor="vLLM Project"
|
|
LABEL org.opencontainers.image.source="https://github.com/vllm-project/vllm"
|
|
|
|
# Build configuration labels
|
|
ARG TARGETARCH
|
|
ARG VLLM_CPU_PPC64LE
|
|
ARG PYTHON_VERSION
|
|
|
|
LABEL ai.vllm.build.target-arch="${TARGETARCH}"
|
|
LABEL ai.vllm.build.cpu-ppc64le="${VLLM_CPU_PPC64LE:-false}"
|
|
LABEL ai.vllm.build.python-version="${PYTHON_VERSION:-3.12}"
|
|
|
|
USER 2000
|
|
|
|
ENTRYPOINT ["vllm", "serve"]
|
|
|
|
|