Optimize ppc64le vLLM runtime image size (#48074)
Signed-off-by: puneetsharma21 <puneet.sharma21@ibm.com>
This commit is contained in:
+12
-17
@@ -1,5 +1,5 @@
|
||||
# Base UBI image
|
||||
ARG BASE_UBI_IMAGE_TAG=9.6-1754584681
|
||||
ARG BASE_UBI_IMAGE_TAG=9.8
|
||||
|
||||
###############################################################
|
||||
# BUILDER STAGE #
|
||||
@@ -7,7 +7,7 @@ ARG BASE_UBI_IMAGE_TAG=9.6-1754584681
|
||||
|
||||
FROM registry.access.redhat.com/ubi9/ubi-minimal:${BASE_UBI_IMAGE_TAG} AS builder-base
|
||||
|
||||
ARG VLLM_VERSION="0.22.1"
|
||||
ARG VLLM_VERSION="0.0.0.dev"
|
||||
ARG PYTHON_VERSION=3.12
|
||||
ARG VLLM_TARGET_DEVICE=cpu
|
||||
|
||||
@@ -45,10 +45,6 @@ RUN --mount=type=cache,target=/root/.cache/uv \
|
||||
# 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 && \
|
||||
@@ -63,19 +59,24 @@ RUN --mount=type=cache,target=/root/.cache/uv \
|
||||
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
|
||||
uv pip install "$(echo ${WHEEL_DIR}/vllm*.whl)[tensorizer]" --refresh && \
|
||||
uv pip install "setuptools==80.10.2" && \
|
||||
uv pip uninstall -y pip cmake meson-python scikit-build-core maturin build wheel auditwheel pybind11 nanobind cython setuptools-rust && \
|
||||
# Remove packaged test suites
|
||||
find ${VIRTUAL_ENV}/lib64/python${PYTHON_VERSION}/site-packages \
|
||||
-type d \( -name tests -o -name test \) -exec rm -rf {} + && \
|
||||
find ${VIRTUAL_ENV} -name "__pycache__" -type d -exec rm -rf {} + && \
|
||||
find ${VIRTUAL_ENV} -name "*.pyc" -delete && \
|
||||
rm -f ${VIRTUAL_ENV}/lib64/python${PYTHON_VERSION}/site-packages/xgrammar/lib/libxgrammar.a
|
||||
|
||||
###############################################################
|
||||
# FINAL VLLM IMAGE STAGE #
|
||||
@@ -94,7 +95,6 @@ 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
|
||||
@@ -103,7 +103,7 @@ 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 \
|
||||
libomp libicu tar autoconf automake libtool findutils openssl openblas-devel numactl numactl-devel \
|
||||
pkgconfig xsimd gcc-toolset-14 libsndfile \
|
||||
libtiff libjpeg openjpeg2 zlib zeromq \
|
||||
freetype lcms2 libwebp tcl tk utf8proc \
|
||||
@@ -113,10 +113,6 @@ RUN --mount=type=cache,target=/root/.cache/uv \
|
||||
&& 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/
|
||||
|
||||
@@ -154,4 +150,3 @@ USER 2000
|
||||
|
||||
ENTRYPOINT ["vllm", "serve"]
|
||||
|
||||
|
||||
|
||||
+334
-100
@@ -13,7 +13,6 @@ cd "$REPO_ROOT"
|
||||
########################################
|
||||
|
||||
IBM_DEVPI_URL=${IBM_DEVPI_URL:-"https://wheels.developerfirst.ibm.com/ppc64le/linux/+simple/"}
|
||||
RHOAI_INDEX_URL=${RHOAI_INDEX_URL:-"https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/"}
|
||||
|
||||
########################################
|
||||
# wheel dir
|
||||
@@ -39,16 +38,65 @@ try_install_from_devpi() {
|
||||
########################################
|
||||
cd "$REPO_ROOT"
|
||||
TORCH_VERSION=${TORCH_VERSION:-$(grep -E '^torch==.+==\s*"ppc64le"' requirements/cpu.txt | grep -Eo '\b[0-9\.]+\b' || true)}
|
||||
TORCH_VERSION=${TORCH_VERSION:-2.11.0}
|
||||
TORCH_VERSION=${TORCH_VERSION:-2.13.0}
|
||||
|
||||
TORCHVISION_VERSION=${TORCHVISION_VERSION:-0.26.0}
|
||||
TORCHAUDIO_VERSION=${TORCHAUDIO_VERSION:-${TORCH_VERSION}}
|
||||
# Parse version parts
|
||||
TORCH_MAJOR=$(echo "${TORCH_VERSION}" | cut -d. -f1)
|
||||
TORCH_MINOR=$(echo "${TORCH_VERSION}" | cut -d. -f2)
|
||||
TORCH_PATCH=$(echo "${TORCH_VERSION}" | cut -d. -f3 | cut -d+ -f1)
|
||||
TORCH_PATCH=${TORCH_PATCH:-0}
|
||||
|
||||
# 1. Calculate torchvision (always minor + 15)
|
||||
VISION_MINOR=$((TORCH_MINOR + 15))
|
||||
TORCHVISION_VERSION="0.${VISION_MINOR}.${TORCH_PATCH}"
|
||||
|
||||
# 2. Calculate torchaudio (minor - 2 for >= 2.13, otherwise same as torch)
|
||||
if [ "${TORCH_MAJOR}" -eq 2 ] && [ "${TORCH_MINOR}" -ge 13 ]; then
|
||||
AUDIO_MINOR=$((TORCH_MINOR - 2))
|
||||
TORCHAUDIO_VERSION="${TORCH_MAJOR}.${AUDIO_MINOR}.${TORCH_PATCH}"
|
||||
else
|
||||
TORCHAUDIO_VERSION="${TORCH_VERSION}"
|
||||
fi
|
||||
|
||||
export TORCH_VERSION
|
||||
export TORCHVISION_VERSION
|
||||
export TORCHAUDIO_VERSION
|
||||
export OPENCV_VERSION=${OPENCV_VERSION:-4.13.0.92}
|
||||
export XGRAMMAR_VERSION=${XGRAMMAR_VERSION:-0.2.1}
|
||||
|
||||
echo "Resolved PyTorch versions:"
|
||||
echo " torch: ${TORCH_VERSION}"
|
||||
echo " torchvision: ${TORCHVISION_VERSION}"
|
||||
echo " torchaudio: ${TORCHAUDIO_VERSION}"
|
||||
|
||||
OPENCV_REQUIREMENT=$(grep -E '^opencv-python-headless[[:space:]]*(==|>=|<=|~=)' \
|
||||
requirements/common.txt |
|
||||
sed -E 's/^opencv-python-headless[[:space:]]*//' |
|
||||
sed -E 's/[[:space:]]*#.*$//' |
|
||||
tr -d ' ' |
|
||||
head -n1)
|
||||
|
||||
export OPENCV_REQUIREMENT
|
||||
echo "OpenCV requirement: ${OPENCV_REQUIREMENT}"
|
||||
|
||||
|
||||
XGRAMMAR_VERSION=$(
|
||||
sed -nE 's/^xgrammar[[:space:]]*==[[:space:]]*([^,;[:space:]]+).*/\1/p' requirements/common.txt |
|
||||
head -n1
|
||||
)
|
||||
|
||||
if [ -z "${XGRAMMAR_VERSION}" ]; then
|
||||
XGRAMMAR_VERSION=$(
|
||||
sed -nE 's/^xgrammar[[:space:]]*>=[[:space:]]*([^,;[:space:]]+).*/\1/p' requirements/common.txt |
|
||||
head -n1
|
||||
)
|
||||
fi
|
||||
|
||||
export XGRAMMAR_VERSION
|
||||
|
||||
if [ -z "${XGRAMMAR_VERSION}" ]; then
|
||||
echo "xgrammar version not found in requirements/common.txt"
|
||||
exit 1
|
||||
fi
|
||||
echo "XGRAMMAR_VERSION=${XGRAMMAR_VERSION}"
|
||||
|
||||
########################################
|
||||
# install system dependencies
|
||||
@@ -56,15 +104,20 @@ export XGRAMMAR_VERSION=${XGRAMMAR_VERSION:-0.2.1}
|
||||
|
||||
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm || true
|
||||
|
||||
# Dynamically match openssl-devel version with installed openssl-libs
|
||||
OPENSSL_DEVEL="openssl-devel-$(rpm -q --queryformat '%{VERSION}-%{RELEASE}' openssl-libs 2>/dev/null || echo 'openssl-devel')"
|
||||
|
||||
microdnf install -y \
|
||||
"${OPENSSL_DEVEL}" \
|
||||
python3.12 python3.12-devel python3.12-pip gcc \
|
||||
git jq gcc-toolset-14 gcc-toolset-14-libatomic-devel \
|
||||
automake libtool clang-devel openssl-devel \
|
||||
automake libtool clang-devel \
|
||||
harfbuzz-devel kmod lcms2-devel libimagequant-devel libjpeg-turbo-devel \
|
||||
llvm15-devel libraqm-devel libtiff-devel libwebp-devel libxcb-devel \
|
||||
ninja-build openjpeg2-devel pkgconfig \
|
||||
tcl-devel tk-devel xsimd-devel zeromq-devel zlib-devel patchelf file openblas openblas-devel protobuf numactl numactl-devel openmpi openmpi-devel
|
||||
|
||||
tcl-devel tk-devel xsimd-devel zeromq-devel zlib-devel patchelf file \
|
||||
openblas openblas-devel protobuf numactl numactl-devel openmpi openmpi-devel
|
||||
|
||||
rpm -ivh --nodeps \
|
||||
https://mirror.stream.centos.org/9-stream/CRB/ppc64le/os/Packages/protobuf-lite-devel-3.14.0-17.el9.ppc64le.rpm
|
||||
|
||||
@@ -88,11 +141,9 @@ python --version
|
||||
########################################
|
||||
# install build tools (stable uv)
|
||||
########################################
|
||||
|
||||
pip install -U pip setuptools-rust
|
||||
pip install uv
|
||||
pip install "setuptools<70" build wheel cmake auditwheel
|
||||
uv pip install "setuptools<70" cython meson-python pybind11 "sympy>=1.13.3" --no-build-isolation
|
||||
pip install build cmake
|
||||
uv pip install setuptools==78.1.1 cython meson-python pybind11 "sympy>=1.13.3" --no-build-isolation
|
||||
|
||||
########################################
|
||||
# Rust
|
||||
@@ -115,127 +166,310 @@ export MAX_JOBS=${MAX_JOBS:-$(nproc)}
|
||||
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
|
||||
|
||||
########################################
|
||||
# Install Packages From Devpi
|
||||
########################################
|
||||
uv pip install numpy==2.3.5 pillow==12.2.0 --extra-index-url "$IBM_DEVPI_URL"
|
||||
try_install_from_devpi "opencv-python-headless==${OPENCV_VERSION}"
|
||||
try_install_from_devpi "torch==${TORCH_VERSION}"
|
||||
try_install_from_devpi "torchvision==${TORCHVISION_VERSION}"
|
||||
|
||||
########################################
|
||||
# torch audio
|
||||
# Install Torch packages from DevPI or build from source
|
||||
########################################
|
||||
|
||||
TEMP_BUILD_DIR=$(mktemp -d)
|
||||
cd "${TEMP_BUILD_DIR}"
|
||||
export BUILD_SOX=1 BUILD_KALDI=1 BUILD_RNNT=1 USE_FFMPEG=0 USE_ROCM=0 USE_CUDA=0
|
||||
export TORCHAUDIO_TEST_ALLOW_SKIP_IF_NO_FFMPEG=1
|
||||
git clone --recursive https://github.com/pytorch/audio.git -b "v${TORCHAUDIO_VERSION}"
|
||||
cd audio
|
||||
#patching
|
||||
sed -i '
|
||||
s|_CSRC_DIR / "_torchaudio.cpp"|str(_CSRC_DIR / "_torchaudio.cpp")|;
|
||||
s|_CSRC_DIR / "utils.cpp"|str(_CSRC_DIR / "utils.cpp")|;
|
||||
s|sources=\[_CSRC_DIR / s for s in sources\]|sources=[str(_CSRC_DIR / s) for s in sources]|;
|
||||
' tools/setup_helpers/extension.py
|
||||
MAX_JOBS=${MAX_JOBS:-$(nproc)} \
|
||||
BUILD_VERSION=${TORCHAUDIO_VERSION} \
|
||||
uv build --wheel --out-dir "${WHEEL_DIR}" --no-build-isolation
|
||||
uv pip install "${WHEEL_DIR}"/torchaudio*.whl
|
||||
cd "${REPO_ROOT}"
|
||||
rm -rf "${TEMP_BUILD_DIR}"
|
||||
is_available_on_devpi() {
|
||||
local pkg=$1
|
||||
local version=$2
|
||||
|
||||
echo "Checking DevPI for ${pkg}==${version}..."
|
||||
|
||||
if pip index versions "${pkg}" \
|
||||
--index-url "${IBM_DEVPI_URL}" 2>/dev/null |
|
||||
grep -F "${version}" >/dev/null; then
|
||||
|
||||
echo "${pkg}==${version} is available on DevPI"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "${pkg}==${version} is NOT available on DevPI"
|
||||
return 1
|
||||
}
|
||||
|
||||
########################################
|
||||
# Common packages from DevPI
|
||||
########################################
|
||||
uv pip install numpy==2.3.5 pillow --extra-index-url "$IBM_DEVPI_URL"
|
||||
|
||||
########################################
|
||||
# OpenCV
|
||||
########################################
|
||||
|
||||
if [[ "${OPENCV_REQUIREMENT}" == ">=4.13.0" ]]; then
|
||||
echo "OpenCV requirement is ${OPENCV_REQUIREMENT}"
|
||||
echo "Installing opencv-python-headless from DevPI"
|
||||
|
||||
OPENCV_VERSION="==4.13.0.92+ppc64le1"
|
||||
else
|
||||
echo "Using OpenCV requirement: ${OPENCV_REQUIREMENT}"
|
||||
|
||||
OPENCV_VERSION="${OPENCV_REQUIREMENT}"
|
||||
fi
|
||||
|
||||
try_install_from_devpi "opencv-python-headless${OPENCV_VERSION}"
|
||||
|
||||
########################################
|
||||
# Check Torch / Torchvision / Torchaudio
|
||||
########################################
|
||||
|
||||
TORCH_FROM_DEVPI=false
|
||||
TORCHVISION_FROM_DEVPI=false
|
||||
TORCHAUDIO_FROM_DEVPI=false
|
||||
|
||||
if is_available_on_devpi "torch" "${TORCH_VERSION}"; then
|
||||
TORCH_FROM_DEVPI=true
|
||||
fi
|
||||
|
||||
if is_available_on_devpi "torchvision" "${TORCHVISION_VERSION}"; then
|
||||
TORCHVISION_FROM_DEVPI=true
|
||||
fi
|
||||
|
||||
if is_available_on_devpi "torchaudio" "${TORCHAUDIO_VERSION}"; then
|
||||
TORCHAUDIO_FROM_DEVPI=true
|
||||
fi
|
||||
|
||||
########################################
|
||||
# Torch
|
||||
########################################
|
||||
|
||||
if [[ "${TORCH_FROM_DEVPI}" == "true" ]]; then
|
||||
echo "Installing torch==${TORCH_VERSION} from DevPI"
|
||||
|
||||
uv pip install \
|
||||
--extra-index-url "${IBM_DEVPI_URL}" \
|
||||
--index-strategy unsafe-best-match \
|
||||
--only-binary=:all: \
|
||||
--no-build-isolation \
|
||||
"torch==${TORCH_VERSION}"
|
||||
else
|
||||
echo "Torch wheel not available on DevPI. Building torch==${TORCH_VERSION} from source."
|
||||
|
||||
TEMP_BUILD_DIR=$(mktemp -d)
|
||||
cd "${TEMP_BUILD_DIR}"
|
||||
|
||||
git clone \
|
||||
--recursive \
|
||||
https://github.com/pytorch/pytorch.git \
|
||||
-b "v${TORCH_VERSION}"
|
||||
|
||||
cd pytorch
|
||||
|
||||
export BLAS=OpenBLAS
|
||||
export USE_OPENMP=1
|
||||
export USE_MKLDNN=OFF
|
||||
export USE_MKLDNN_CBLAS=OFF
|
||||
export _GLIBCXX_USE_CXX11_ABI=1
|
||||
uv pip install maturin
|
||||
pip install -r requirements.txt --extra-index-url "$IBM_DEVPI_URL"
|
||||
python setup.py develop
|
||||
rm -f dist/torch*+git*whl
|
||||
MAX_JOBS=${MAX_JOBS:-$(nproc)} \
|
||||
PYTORCH_BUILD_VERSION=${TORCH_VERSION} PYTORCH_BUILD_NUMBER=1 uv build --wheel --out-dir "${WHEEL_DIR}"
|
||||
uv pip install "${WHEEL_DIR}"/torch*.whl
|
||||
cd "${REPO_ROOT}"
|
||||
rm -rf "${TEMP_BUILD_DIR}"
|
||||
fi
|
||||
|
||||
########################################
|
||||
# Torchvision
|
||||
########################################
|
||||
|
||||
if [[ "${TORCHVISION_FROM_DEVPI}" == "true" ]]; then
|
||||
echo "Installing torchvision==${TORCHVISION_VERSION} from DevPI"
|
||||
|
||||
uv pip install \
|
||||
--extra-index-url "${IBM_DEVPI_URL}" \
|
||||
--index-strategy unsafe-best-match \
|
||||
--only-binary=:all: \
|
||||
--no-build-isolation \
|
||||
"torchvision==${TORCHVISION_VERSION}"
|
||||
else
|
||||
echo "Torchvision wheel not available on DevPI. Building torchvision==${TORCHVISION_VERSION} from source."
|
||||
|
||||
TEMP_BUILD_DIR=$(mktemp -d)
|
||||
cd "${TEMP_BUILD_DIR}"
|
||||
|
||||
export TORCHVISION_USE_NVJPEG=0 TORCHVISION_USE_FFMPEG=0
|
||||
git clone \
|
||||
--recursive \
|
||||
https://github.com/pytorch/vision.git \
|
||||
-b "v${TORCHVISION_VERSION}"
|
||||
|
||||
cd vision
|
||||
uv pip install standard-pkg-resources --no-build-isolation
|
||||
MAX_JOBS=${MAX_JOBS:-$(nproc)} \
|
||||
BUILD_VERSION=${TORCHVISION_VERSION} \
|
||||
uv build --wheel --out-dir "${WHEEL_DIR}" --no-build-isolation
|
||||
|
||||
export BUILD_VERSION="${TORCHVISION_VERSION}"
|
||||
|
||||
uv build \
|
||||
--wheel \
|
||||
--out-dir "${WHEEL_DIR}" \
|
||||
--no-build-isolation
|
||||
|
||||
uv pip install "${WHEEL_DIR}"/torchvision*.whl
|
||||
|
||||
cd "${REPO_ROOT}"
|
||||
rm -rf "${TEMP_BUILD_DIR}"
|
||||
fi
|
||||
|
||||
########################################
|
||||
# Torchaudio
|
||||
########################################
|
||||
|
||||
if [[ "${TORCHAUDIO_FROM_DEVPI}" == "true" ]]; then
|
||||
echo "Installing torchaudio==${TORCHAUDIO_VERSION} from DevPI"
|
||||
|
||||
uv pip install \
|
||||
--extra-index-url "${IBM_DEVPI_URL}" \
|
||||
--index-strategy unsafe-best-match \
|
||||
--only-binary=:all: \
|
||||
--no-build-isolation \
|
||||
"torchaudio==${TORCHAUDIO_VERSION}"
|
||||
else
|
||||
echo "Torchaudio wheel not available on DevPI. Building torchaudio==${TORCHAUDIO_VERSION} from source."
|
||||
|
||||
TEMP_BUILD_DIR=$(mktemp -d)
|
||||
cd "${TEMP_BUILD_DIR}"
|
||||
|
||||
export BUILD_SOX=1
|
||||
export BUILD_KALDI=1
|
||||
export BUILD_RNNT=1
|
||||
export USE_FFMPEG=0
|
||||
export USE_ROCM=0
|
||||
export USE_CUDA=0
|
||||
export TORCHAUDIO_TEST_ALLOW_SKIP_IF_NO_FFMPEG=1
|
||||
|
||||
git clone \
|
||||
--recursive \
|
||||
https://github.com/pytorch/audio.git \
|
||||
-b "v${TORCHAUDIO_VERSION}"
|
||||
|
||||
cd audio
|
||||
|
||||
# Patches required for newer Python versions
|
||||
sed -i '
|
||||
s|_CSRC_DIR / "_torchaudio.cpp"|str(_CSRC_DIR / "_torchaudio.cpp")|;
|
||||
s|_CSRC_DIR / "utils.cpp"|str(_CSRC_DIR / "utils.cpp")|;
|
||||
s|sources=\[_CSRC_DIR / s for s in sources\]|sources=[str(_CSRC_DIR / s) for s in sources]|;
|
||||
' tools/setup_helpers/extension.py
|
||||
|
||||
MAX_JOBS="${MAX_JOBS}" \
|
||||
BUILD_VERSION="${TORCHAUDIO_VERSION}" \
|
||||
uv build \
|
||||
--wheel \
|
||||
--out-dir "${WHEEL_DIR}" \
|
||||
--no-build-isolation
|
||||
|
||||
uv pip install "${WHEEL_DIR}"/torchaudio*.whl
|
||||
|
||||
cd "${REPO_ROOT}"
|
||||
rm -rf "${TEMP_BUILD_DIR}"
|
||||
fi
|
||||
|
||||
########################################
|
||||
# Xgrammar
|
||||
########################################
|
||||
uv pip install \
|
||||
"scikit-build-core==0.11.6" \
|
||||
"pyproject-metadata<0.8" \
|
||||
pathspec \
|
||||
packaging \
|
||||
distro \
|
||||
"setuptools<70" \
|
||||
setuptools_scm \
|
||||
cmake \
|
||||
ninja \
|
||||
pybind11 \
|
||||
nanobind
|
||||
uv pip install apache-tvm-ffi==0.1.12 \
|
||||
--no-build-isolation \
|
||||
--no-cache
|
||||
XGRAMMAR_FROM_DEVPI=false
|
||||
|
||||
TEMP_BUILD_DIR=$(mktemp -d)
|
||||
if is_available_on_devpi "xgrammar" "${XGRAMMAR_VERSION}"; then
|
||||
XGRAMMAR_FROM_DEVPI=true
|
||||
fi
|
||||
|
||||
pushd "${TEMP_BUILD_DIR}"
|
||||
if [[ "${XGRAMMAR_FROM_DEVPI}" == "true" ]]; then
|
||||
echo "Installing xgrammar==${XGRAMMAR_VERSION} from DevPI"
|
||||
|
||||
export CFLAGS="-fno-lto -mcpu=power9"
|
||||
export CXXFLAGS="-fno-lto -mcpu=power9"
|
||||
export LDFLAGS="-fno-lto"
|
||||
export PATH=/opt/vllm/bin:$PATH
|
||||
uv pip install \
|
||||
--extra-index-url "${IBM_DEVPI_URL}" \
|
||||
--index-strategy unsafe-best-match \
|
||||
--only-binary=:all: \
|
||||
--no-build-isolation \
|
||||
"xgrammar==${XGRAMMAR_VERSION}"
|
||||
else
|
||||
echo "Xgrammar wheel not available on DevPI. Building xgrammar==${XGRAMMAR_VERSION} from source."
|
||||
# Install xgrammar build dependencies only when building from source.
|
||||
uv pip install \
|
||||
"scikit-build-core==0.11.6" \
|
||||
"pyproject-metadata<0.8" \
|
||||
pathspec \
|
||||
packaging \
|
||||
distro \
|
||||
setuptools_scm \
|
||||
cmake \
|
||||
ninja \
|
||||
pybind11 \
|
||||
nanobind
|
||||
uv pip install apache-tvm-ffi==0.1.12 \
|
||||
--no-build-isolation \
|
||||
--no-cache
|
||||
|
||||
export Python_EXECUTABLE=/opt/vllm/bin/python3
|
||||
export Python3_EXECUTABLE=/opt/vllm/bin/python3
|
||||
export PYTHON_EXECUTABLE=/opt/vllm/bin/python3
|
||||
TEMP_BUILD_DIR=$(mktemp -d)
|
||||
|
||||
export Python_ROOT_DIR=/opt/vllm
|
||||
export Python3_ROOT_DIR=/opt/vllm
|
||||
pushd "${TEMP_BUILD_DIR}"
|
||||
|
||||
git clone \
|
||||
--recursive \
|
||||
https://github.com/mlc-ai/xgrammar \
|
||||
-b "v${XGRAMMAR_VERSION}"
|
||||
export CFLAGS="-fno-lto -mcpu=power9"
|
||||
export CXXFLAGS="-fno-lto -mcpu=power9"
|
||||
export LDFLAGS="-fno-lto"
|
||||
export PATH=/opt/vllm/bin:$PATH
|
||||
|
||||
cd xgrammar
|
||||
export Python_EXECUTABLE=/opt/vllm/bin/python3
|
||||
export Python3_EXECUTABLE=/opt/vllm/bin/python3
|
||||
export PYTHON_EXECUTABLE=/opt/vllm/bin/python3
|
||||
|
||||
cp cmake/config.cmake .
|
||||
export PYTHONPATH=/opt/vllm/lib64/python3.12/site-packages:/opt/vllm/lib/python3.12/site-packages:${PYTHONPATH:-}
|
||||
export Python_ROOT_DIR=/opt/vllm
|
||||
export Python3_ROOT_DIR=/opt/vllm
|
||||
|
||||
uv build \
|
||||
--wheel \
|
||||
--out-dir "${WHEEL_DIR}" \
|
||||
--no-build-isolation
|
||||
git clone \
|
||||
--recursive \
|
||||
https://github.com/mlc-ai/xgrammar \
|
||||
-b "v${XGRAMMAR_VERSION}"
|
||||
|
||||
uv pip install "${WHEEL_DIR}"/xgrammar*.whl -v
|
||||
cd xgrammar
|
||||
|
||||
popd
|
||||
cp cmake/config.cmake .
|
||||
export PYTHONPATH=/opt/vllm/lib64/python3.12/site-packages:/opt/vllm/lib/python3.12/site-packages:${PYTHONPATH:-}
|
||||
|
||||
rm -rf "${TEMP_BUILD_DIR}"
|
||||
cd "${REPO_ROOT}"
|
||||
uv build \
|
||||
--wheel \
|
||||
--out-dir "${WHEEL_DIR}" \
|
||||
--no-build-isolation
|
||||
|
||||
########################################
|
||||
# RHOAI Binary Downloads
|
||||
########################################
|
||||
pip download \
|
||||
--index-url "${RHOAI_INDEX_URL}" \
|
||||
--only-binary=:all: \
|
||||
--no-deps \
|
||||
llvmlite==0.47.0 \
|
||||
-d "${WHEEL_DIR}"
|
||||
uv pip install "${WHEEL_DIR}"/xgrammar*.whl -v
|
||||
|
||||
pip download \
|
||||
--index-url "${RHOAI_INDEX_URL}" \
|
||||
--only-binary=:all: \
|
||||
--no-deps \
|
||||
Numba==0.65.0 \
|
||||
-d "${WHEEL_DIR}"
|
||||
popd
|
||||
|
||||
rm -rf "${TEMP_BUILD_DIR}"
|
||||
cd "${REPO_ROOT}"
|
||||
fi
|
||||
|
||||
NUMBA_REQUIREMENT=$(grep -E '^numba[[:space:]]*(==|>=|<=|~=)' \
|
||||
requirements/cpu.txt |
|
||||
sed -E 's/^numba[[:space:]]*//' |
|
||||
sed -E 's/[[:space:]]*#.*$//' |
|
||||
sed -E 's/;.*$//' |
|
||||
tr -d ' ' |
|
||||
head -n1)
|
||||
|
||||
echo "Numba requirement: ${NUMBA_REQUIREMENT}"
|
||||
try_install_from_devpi "numba${NUMBA_REQUIREMENT}"
|
||||
|
||||
########################################
|
||||
# install built wheels
|
||||
########################################
|
||||
uv pip install setuptools_scm maturin setuptools-rust ninja scikit-build-core pybind11 nanobind \
|
||||
--no-build-isolation
|
||||
uv pip install "${WHEEL_DIR}"/*.whl
|
||||
|
||||
########################################
|
||||
# install remaining deps
|
||||
########################################
|
||||
|
||||
sed -i.bak -e 's/.*torch.*//g' pyproject.toml requirements/*.txt
|
||||
|
||||
uv pip install "setuptools>=78.1.1" --no-build-isolation
|
||||
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig
|
||||
|
||||
uv pip install -r requirements/common.txt \
|
||||
-r requirements/cpu.txt \
|
||||
-r requirements/build/cpu.txt --index-strategy unsafe-best-match
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user