main
ppc64le 157 lines 6.12 KB
Raw
1 # Base UBI image
2 ARG BASE_UBI_IMAGE_TAG=9.6-1754584681
3
4 ###############################################################
5 # BUILDER STAGE #
6 ###############################################################
7
8 FROM registry.access.redhat.com/ubi9/ubi-minimal:${BASE_UBI_IMAGE_TAG} AS builder-base
9
10 ARG VLLM_VERSION="0.22.1"
11 ARG PYTHON_VERSION=3.12
12 ARG VLLM_TARGET_DEVICE=cpu
13
14 USER root
15 WORKDIR /root
16
17 ENV HOME=/root \
18 WHEEL_DIR=/wheelsdir \
19 VIRTUAL_ENV=/opt/vllm \
20 GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \
21 CARGO_HOME=/root/.cargo \
22 RUSTUP_HOME=/root/.rustup \
23 UV_CACHE_DIR=$HOME/.cache/uv \
24 PATH=/root/.cargo/bin:/root/.rustup/bin:${VIRTUAL_ENV}/bin:$PATH
25 ENV UV_COMPILE_BYTECODE=1
26
27 RUN echo "DEBUG: VLLM_VERSION=${VLLM_VERSION}"
28 RUN --mount=type=cache,target=/var/cache/dnf \
29 microdnf install -y \
30 python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip \
31 && python${PYTHON_VERSION} -m venv ${VIRTUAL_ENV} \
32 && python${PYTHON_VERSION} -m pip install -U pip uv --no-cache
33
34 # Important: Copy only bare minimum required for the script to run
35 COPY requirements/ requirements/
36 COPY pyproject.toml ./
37
38 # The script is expected to install whatever python dependencies are missing
39 # as well as whatever system libraries need to be installed from source
40 COPY docker/build_vllm_*.sh docker/
41
42 RUN --mount=type=cache,target=/root/.cache/uv \
43 sh ./docker/build_vllm_$(uname -m).sh
44
45 # copy vllm source code to build cache
46 COPY . .
47
48 RUN --mount=type=cache,target=/root/.cache/uv \
49 source /opt/rh/gcc-toolset-14/enable && \
50 pip install -U uv
51
52 # build & install vLLM so that all transitive dependencies are build/downloaded into the uv cache
53 RUN --mount=type=cache,target=/root/.cache/uv \
54 source /opt/rh/gcc-toolset-14/enable && \
55 export PATH=/opt/rh/gcc-toolset-14/root/usr/bin:$PATH && \
56 export CC=/opt/rh/gcc-toolset-14/root/usr/bin/gcc && \
57 export CXX=/opt/rh/gcc-toolset-14/root/usr/bin/g++ && \
58 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:$PKG_CONFIG_PATH && \
59 export CMAKE_PREFIX_PATH=/usr/local:/usr:$CMAKE_PREFIX_PATH && \
60 export Protobuf_PROTOC_EXECUTABLE=/usr/bin/protoc && \
61 export CFLAGS="-mcpu=power10 -mtune=power10" && \
62 export CXXFLAGS="-mcpu=power10 -mtune=power10" && \
63 export DNNL_ARCH_OPT_FLAGS="-mcpu=power10 -mtune=power10" && \
64 export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH && \
65 export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH && \
66 uv pip install 'setuptools>=78.1.1' && \
67 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/OpenBLAS/lib/:/usr/local/lib64:/usr/local/lib && \
68 export LIBGOMP=/opt/rh/gcc-toolset-14/root/usr/lib/gcc/ppc64le-redhat-linux/14/libgomp.so && \
69
70 export CMAKE_LIBRARY_PATH=$(dirname $LIBGOMP):${CMAKE_LIBRARY_PATH} && \
71 export LIBRARY_PATH=$(dirname $LIBGOMP):${LIBRARY_PATH} && \
72 export LD_LIBRARY_PATH=$(dirname $LIBGOMP):${LD_LIBRARY_PATH} && \
73
74 echo "LIBGOMP=${LIBGOMP}" && \
75 find /root/.cache/uv -name "*.whl" && \
76 SETUPTOOLS_SCM_PRETEND_VERSION="$VLLM_VERSION" uv build \
77 --wheel --out-dir ${WHEEL_DIR} --no-build-isolation && \
78 uv pip install "$(echo ${WHEEL_DIR}/vllm*.whl)[tensorizer]" --refresh
79
80 ###############################################################
81 # FINAL VLLM IMAGE STAGE #
82 ###############################################################
83
84 FROM registry.access.redhat.com/ubi9/ubi-minimal:${BASE_UBI_IMAGE_TAG} AS vllm-openai
85
86 ARG PYTHON_VERSION=3.12
87 ENV VLLM_NO_USAGE_STATS=1
88
89 # Set Environment Variables for venv & openblas
90 ENV VIRTUAL_ENV=/opt/vllm
91 ENV PCP_DIR=/opt/rh/gcc-toolset-14/root
92 ENV PATH=${VIRTUAL_ENV}/bin:${PCP_DIR}/usr/bin:/usr/local/bin:$PATH
93 ENV PKG_CONFIG_PATH=${PCP_DIR}/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig/
94 ENV C_INCLUDE_PATH="/usr/local/include:$C_INCLUDE_PATH"
95 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
96 ENV UV_LINK_MODE=copy
97 ARG VLLM_VERSION="0.22.1"
98 ARG UV_EXTRA_INDEX_URL="https://wheels.developerfirst.ibm.com/ppc64le/linux/+simple/"
99 ENV UV_EXTRA_INDEX_URL=${UV_EXTRA_INDEX_URL}
100 ENV UV_INDEX_STRATEGY=first-match
101
102
103 RUN --mount=type=cache,target=/root/.cache/uv \
104 rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
105 microdnf install --nodocs -y \
106 libomp libicu tar autoconf automake libtool findutils openssl numactl numactl-devel \
107 pkgconfig xsimd gcc-toolset-14 libsndfile \
108 libtiff libjpeg openjpeg2 zlib zeromq \
109 freetype lcms2 libwebp tcl tk utf8proc \
110 harfbuzz fribidi libraqm libimagequant libxcb util-linux gperftools-libs \
111 python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip \
112 && source /opt/rh/gcc-toolset-14/enable \
113 && microdnf update -y \
114 && microdnf clean all
115
116 # The `lscpu` command was added as a requirement in part of https://github.com/vllm-project/vllm/pull/21032, so installing it.
117 RUN microdnf install --nodocs -y util-linux && \
118 microdnf clean all
119
120 COPY --from=builder-base /usr/lib64/libprotobuf.so.25 /usr/lib64/
121 COPY --from=builder-base /usr/lib64/libprotobuf.so.25.0.0 /usr/lib64/
122
123 # Use builder venv in final stage instead of wheel reinstallation
124 COPY --from=builder-base /opt/vllm /opt/vllm
125
126 ENV LD_PRELOAD=/usr/lib64/libtcmalloc.so.4
127
128 WORKDIR /home/vllm
129
130 # setup non-root user for OpenShift
131 RUN umask 002 && \
132 useradd --uid 2000 --gid 0 vllm && \
133 mkdir -p /home/vllm && \
134 chmod g+rwx /home/vllm
135
136 ENV HOME=/home/vllm
137
138 # Add labels to document build configuration
139 LABEL org.opencontainers.image.title="vLLM CPU"
140 LABEL org.opencontainers.image.description="vLLM inference engine for CPU platforms"
141 LABEL org.opencontainers.image.vendor="vLLM Project"
142 LABEL org.opencontainers.image.source="https://github.com/vllm-project/vllm"
143
144 # Build configuration labels
145 ARG TARGETARCH
146 ARG VLLM_CPU_PPC64LE
147 ARG PYTHON_VERSION
148
149 LABEL ai.vllm.build.target-arch="${TARGETARCH}"
150 LABEL ai.vllm.build.cpu-ppc64le="${VLLM_CPU_PPC64LE:-false}"
151 LABEL ai.vllm.build.python-version="${PYTHON_VERSION:-3.12}"
152
153 USER 2000
154
155 ENTRYPOINT ["vllm", "serve"]
156
157