Files
vllm-project--vllm/docker/Dockerfile.ppc64le
T
wehub-resource-sync 7ce4c8e27e
pre-commit / pre-run-check (push) Has been cancelled
pre-commit / pre-commit (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:55:37 +08:00

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"]