@@ -16,7 +16,7 @@ ENV LANG=C.UTF-8 \
1616RUN microdnf install -y \
1717 which procps findutils tar vim git gcc gcc-gfortran g++ make patch zlib-devel \
1818 libjpeg-turbo-devel libtiff-devel libpng-devel libwebp-devel freetype-devel harfbuzz-devel \
19- openssl-devel openblas openblas-devel autoconf automake libtool cmake numpy && \
19+ openssl-devel openblas openblas-devel autoconf automake libtool cmake numpy libsndfile && \
2020 microdnf clean all
2121
2222# Python Installation
@@ -136,6 +136,71 @@ RUN --mount=type=cache,target=/root/.cache/uv \
136136 mkdir -p /tmp/hf-xet/dist && \
137137 cp dist/*.whl /tmp/hf-xet/dist/
138138
139+ # Build numba
140+ FROM python-install AS numba-builder
141+
142+ ARG MAX_JOBS
143+ ARG NUMBA_VERSION=0.61.2
144+
145+ WORKDIR /tmp
146+
147+ # Clone all required dependencies
148+ RUN --mount=type=cache,target=/root/.cache/uv \
149+ microdnf install ninja-build gcc gcc-c++ -y && \
150+ git clone --recursive https://github.com/llvm/llvm-project.git -b llvmorg-15.0.7 && \
151+ git clone --recursive https://github.com/numba/llvmlite.git -b v0.44.0 && \
152+ git clone --recursive https://github.com/numba/numba.git -b ${NUMBA_VERSION} && \
153+ cd llvm-project && mkdir build && cd build && \
154+ uv pip install 'cmake<4' setuptools numpy && \
155+ export PREFIX=/usr/local && CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_ENABLE_PROJECTS=lld;libunwind;compiler-rt" \
156+ CFLAGS="$(echo $CFLAGS | sed 's/-fno-plt //g')" \
157+ CXXFLAGS="$(echo $CXXFLAGS | sed 's/-fno-plt //g')" \
158+ CMAKE_ARGS="${CMAKE_ARGS} -DFFI_INCLUDE_DIR=$PREFIX/include" \
159+ CMAKE_ARGS="${CMAKE_ARGS} -DFFI_LIBRARY_DIR=$PREFIX/lib" \
160+ cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" \
161+ -DCMAKE_BUILD_TYPE=Release \
162+ -DCMAKE_LIBRARY_PATH="${PREFIX}" \
163+ -DLLVM_ENABLE_LIBEDIT=OFF \
164+ -DLLVM_ENABLE_LIBXML2=OFF \
165+ -DLLVM_ENABLE_RTTI=ON \
166+ -DLLVM_ENABLE_TERMINFO=OFF \
167+ -DLLVM_INCLUDE_BENCHMARKS=OFF \
168+ -DLLVM_INCLUDE_DOCS=OFF \
169+ -DLLVM_INCLUDE_EXAMPLES=OFF \
170+ -DLLVM_INCLUDE_GO_TESTS=OFF \
171+ -DLLVM_INCLUDE_TESTS=OFF \
172+ -DLLVM_INCLUDE_UTILS=ON \
173+ -DLLVM_INSTALL_UTILS=ON \
174+ -DLLVM_UTILS_INSTALL_DIR=libexec/llvm \
175+ -DLLVM_BUILD_LLVM_DYLIB=OFF \
176+ -DLLVM_LINK_LLVM_DYLIB=OFF \
177+ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
178+ -DLLVM_ENABLE_FFI=ON \
179+ -DLLVM_ENABLE_Z3_SOLVER=OFF \
180+ -DLLVM_OPTIMIZED_TABLEGEN=ON \
181+ -DCMAKE_POLICY_DEFAULT_CMP0111=NEW \
182+ -DCOMPILER_RT_BUILD_BUILTINS=ON \
183+ -DCOMPILER_RT_BUILTINS_HIDE_SYMBOLS=OFF \
184+ -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
185+ -DCOMPILER_RT_BUILD_CRT=OFF \
186+ -DCOMPILER_RT_BUILD_MEMPROF=OFF \
187+ -DCOMPILER_RT_BUILD_PROFILE=OFF \
188+ -DCOMPILER_RT_BUILD_SANITIZERS=OFF \
189+ -DCOMPILER_RT_BUILD_XRAY=OFF \
190+ -DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
191+ -DCOMPILER_RT_BUILD_ORC=OFF \
192+ -DCOMPILER_RT_INCLUDE_TESTS=OFF \
193+ ${CMAKE_ARGS} -GNinja ../llvm \
194+
195+ && ninja install . && \
196+ # build llvmlite
197+ cd ../../llvmlite && python setup.py bdist_wheel && \
198+ cd ../numba && \
199+ if ! grep '#include "dynamic_annotations.h"' numba/_dispatcher.cpp; then \
200+ sed -i '/#include "internal\/pycore_atomic.h"/i\#include "dynamic_annotations.h"' numba/_dispatcher.cpp; \
201+ fi && python setup.py bdist_wheel
202+
203+
139204# Final build stage
140205FROM python-install AS vllm-cpu
141206ARG PYTHON_VERSION
@@ -163,23 +228,30 @@ RUN --mount=type=cache,target=/root/.cache/uv \
163228 --mount=type=bind,from=torch-vision,source=/tmp/vision/dist,target=/tmp/vision-wheels/ \
164229 --mount=type=bind,from=hf-xet-builder,source=/tmp/hf-xet/dist,target=/tmp/hf-xet-wheels/ \
165230 --mount=type=bind,from=torch,source=/tmp/pytorch/dist,target=/tmp/torch-wheels/ \
231+ --mount=type=bind,from=numba-builder,source=/tmp/llvmlite/dist,target=/tmp/llvmlite-wheels/ \
232+ --mount=type=bind,from=numba-builder,source=/tmp/numba/dist,target=/tmp/numba-wheels/ \
166233 sed -i '/^torch/d' requirements/build.txt && \
167- ARROW_WHL_FILE=$(ls /tmp/arrow-wheels/pyarrow-*.whl | head -n 1) && \
168- VISION_WHL_FILE=$(ls /tmp/vision-wheels/*.whl | head -n 1) && \
169- HF_XET_WHL_FILE=$(ls /tmp/hf-xet-wheels/*.whl | head -n 1) && \
170- TORCH_WHL_FILE=$(ls /tmp/torch-wheels/*.whl | head -n 1) && \
234+ ARROW_WHL_FILE=$(ls /tmp/arrow-wheels/pyarrow-*.whl) && \
235+ VISION_WHL_FILE=$(ls /tmp/vision-wheels/*.whl) && \
236+ HF_XET_WHL_FILE=$(ls /tmp/hf-xet-wheels/*.whl) && \
237+ TORCH_WHL_FILE=$(ls /tmp/torch-wheels/*.whl) && \
238+ LLVM_WHL_FILE=$(ls /tmp/llvmlite-wheels/*.whl) && \
239+ NUMBA_WHL_FILE=$(ls /tmp/numba-wheels/*.whl) && \
171240 uv pip install -v \
172241 $ARROW_WHL_FILE \
173242 $VISION_WHL_FILE \
174243 $HF_XET_WHL_FILE \
175244 $TORCH_WHL_FILE \
245+ $LLVM_WHL_FILE \
246+ $NUMBA_WHL_FILE \
176247 --index-strategy unsafe-best-match \
177248 -r requirements/build.txt \
178- -r requirements/cpu.txt
249+ -r requirements/cpu.txt
250+
179251
180252# Build and install vllm
181253RUN --mount=type=cache,target=/root/.cache/uv \
182- VLLM_TARGET_DEVICE=cpu python setup.py bdist_wheel && \
254+ VLLM_TARGET_DEVICE=cpu VLLM_CPU_MOE_PREPACK=0 python setup.py bdist_wheel && \
183255 uv pip install "$(echo dist/*.whl)[tensorizer]"
184256
185257# setup non-root user for vllm
@@ -196,4 +268,3 @@ WORKDIR /home/vllm
196268
197269# Set the default entrypoint
198270ENTRYPOINT ["python", "-m", "vllm.entrypoints.openai.api_server"]
199-
0 commit comments