| 1 | #!/bin/bash |
| 2 | set -eoux pipefail |
| 3 | |
| 4 | ######################################## |
| 5 | # Resolve repo root (IMPORTANT) |
| 6 | ######################################## |
| 7 | REPO_ROOT="$(pwd)" |
| 8 | |
| 9 | cd "$REPO_ROOT" |
| 10 | |
| 11 | ######################################## |
| 12 | # DevPI configuration |
| 13 | ######################################## |
| 14 | |
| 15 | IBM_DEVPI_URL=${IBM_DEVPI_URL:-"https://wheels.developerfirst.ibm.com/ppc64le/linux/+simple/"} |
| 16 | RHOAI_INDEX_URL=${RHOAI_INDEX_URL:-"https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple/"} |
| 17 | |
| 18 | ######################################## |
| 19 | # wheel dir |
| 20 | ######################################## |
| 21 | |
| 22 | WHEEL_DIR=${WHEEL_DIR:-"/tmp/wheels"} |
| 23 | mkdir -p "$WHEEL_DIR" |
| 24 | |
| 25 | ######################################## |
| 26 | # Helpers |
| 27 | ######################################## |
| 28 | try_install_from_devpi() { |
| 29 | local pkg=$1 |
| 30 | uv pip install \ |
| 31 | --extra-index-url "${IBM_DEVPI_URL}" \ |
| 32 | --index-strategy unsafe-best-match \ |
| 33 | --no-build-isolation \ |
| 34 | "${pkg}" |
| 35 | } |
| 36 | |
| 37 | ######################################## |
| 38 | # Package Versions |
| 39 | ######################################## |
| 40 | cd "$REPO_ROOT" |
| 41 | TORCH_VERSION=${TORCH_VERSION:-$(grep -E '^torch==.+==\s*"ppc64le"' requirements/cpu.txt | grep -Eo '\b[0-9\.]+\b' || true)} |
| 42 | TORCH_VERSION=${TORCH_VERSION:-2.11.0} |
| 43 | |
| 44 | TORCHVISION_VERSION=${TORCHVISION_VERSION:-0.26.0} |
| 45 | TORCHAUDIO_VERSION=${TORCHAUDIO_VERSION:-${TORCH_VERSION}} |
| 46 | |
| 47 | export TORCH_VERSION |
| 48 | export TORCHVISION_VERSION |
| 49 | export TORCHAUDIO_VERSION |
| 50 | export OPENCV_VERSION=${OPENCV_VERSION:-4.13.0.92} |
| 51 | export XGRAMMAR_VERSION=${XGRAMMAR_VERSION:-0.2.1} |
| 52 | |
| 53 | ######################################## |
| 54 | # install system dependencies |
| 55 | ######################################## |
| 56 | |
| 57 | rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm || true |
| 58 | |
| 59 | microdnf install -y \ |
| 60 | python3.12 python3.12-devel python3.12-pip gcc \ |
| 61 | git jq gcc-toolset-14 gcc-toolset-14-libatomic-devel \ |
| 62 | automake libtool clang-devel openssl-devel \ |
| 63 | harfbuzz-devel kmod lcms2-devel libimagequant-devel libjpeg-turbo-devel \ |
| 64 | llvm15-devel libraqm-devel libtiff-devel libwebp-devel libxcb-devel \ |
| 65 | ninja-build openjpeg2-devel pkgconfig \ |
| 66 | tcl-devel tk-devel xsimd-devel zeromq-devel zlib-devel patchelf file openblas openblas-devel protobuf numactl numactl-devel openmpi openmpi-devel |
| 67 | |
| 68 | rpm -ivh --nodeps \ |
| 69 | https://mirror.stream.centos.org/9-stream/CRB/ppc64le/os/Packages/protobuf-lite-devel-3.14.0-17.el9.ppc64le.rpm |
| 70 | |
| 71 | rpm -ivh --nodeps \ |
| 72 | https://mirror.stream.centos.org/9-stream/CRB/ppc64le/os/Packages/protobuf-devel-3.14.0-17.el9.ppc64le.rpm |
| 73 | |
| 74 | rpm -ivh --nodeps \ |
| 75 | https://mirror.stream.centos.org/9-stream/CRB/ppc64le/os/Packages/protobuf-compiler-3.14.0-17.el9.ppc64le.rpm |
| 76 | |
| 77 | ######################################## |
| 78 | # Python 3.12 virtual environment |
| 79 | ######################################## |
| 80 | |
| 81 | python3.12 -m venv /opt/vllm |
| 82 | source /opt/vllm/bin/activate |
| 83 | |
| 84 | export PATH=/opt/vllm/bin:$PATH |
| 85 | |
| 86 | python --version |
| 87 | |
| 88 | ######################################## |
| 89 | # install build tools (stable uv) |
| 90 | ######################################## |
| 91 | |
| 92 | pip install -U pip setuptools-rust |
| 93 | pip install uv |
| 94 | pip install "setuptools<70" build wheel cmake auditwheel |
| 95 | uv pip install "setuptools<70" cython meson-python pybind11 "sympy>=1.13.3" --no-build-isolation |
| 96 | |
| 97 | ######################################## |
| 98 | # Rust |
| 99 | ######################################## |
| 100 | |
| 101 | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
| 102 | source /root/.cargo/env |
| 103 | |
| 104 | ######################################## |
| 105 | # Compiler env |
| 106 | ######################################## |
| 107 | |
| 108 | source /opt/rh/gcc-toolset-14/enable |
| 109 | |
| 110 | export PATH=/usr/lib64/llvm15/bin:$PATH |
| 111 | export LLVM_CONFIG=/usr/lib64/llvm15/bin/llvm-config |
| 112 | export CMAKE_ARGS="-DPython3_EXECUTABLE=python" |
| 113 | |
| 114 | export MAX_JOBS=${MAX_JOBS:-$(nproc)} |
| 115 | export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 |
| 116 | |
| 117 | ######################################## |
| 118 | # Install Packages From Devpi |
| 119 | ######################################## |
| 120 | uv pip install numpy==2.3.5 pillow==12.2.0 --extra-index-url "$IBM_DEVPI_URL" |
| 121 | try_install_from_devpi "opencv-python-headless==${OPENCV_VERSION}" |
| 122 | try_install_from_devpi "torch==${TORCH_VERSION}" |
| 123 | try_install_from_devpi "torchvision==${TORCHVISION_VERSION}" |
| 124 | |
| 125 | ######################################## |
| 126 | # torch audio |
| 127 | ######################################## |
| 128 | |
| 129 | TEMP_BUILD_DIR=$(mktemp -d) |
| 130 | cd "${TEMP_BUILD_DIR}" |
| 131 | export BUILD_SOX=1 BUILD_KALDI=1 BUILD_RNNT=1 USE_FFMPEG=0 USE_ROCM=0 USE_CUDA=0 |
| 132 | export TORCHAUDIO_TEST_ALLOW_SKIP_IF_NO_FFMPEG=1 |
| 133 | git clone --recursive https://github.com/pytorch/audio.git -b "v${TORCHAUDIO_VERSION}" |
| 134 | cd audio |
| 135 | #patching |
| 136 | sed -i ' |
| 137 | s|_CSRC_DIR / "_torchaudio.cpp"|str(_CSRC_DIR / "_torchaudio.cpp")|; |
| 138 | s|_CSRC_DIR / "utils.cpp"|str(_CSRC_DIR / "utils.cpp")|; |
| 139 | s|sources=\[_CSRC_DIR / s for s in sources\]|sources=[str(_CSRC_DIR / s) for s in sources]|; |
| 140 | ' tools/setup_helpers/extension.py |
| 141 | MAX_JOBS=${MAX_JOBS:-$(nproc)} \ |
| 142 | BUILD_VERSION=${TORCHAUDIO_VERSION} \ |
| 143 | uv build --wheel --out-dir "${WHEEL_DIR}" --no-build-isolation |
| 144 | uv pip install "${WHEEL_DIR}"/torchaudio*.whl |
| 145 | cd "${REPO_ROOT}" |
| 146 | rm -rf "${TEMP_BUILD_DIR}" |
| 147 | |
| 148 | ######################################## |
| 149 | # Xgrammar |
| 150 | ######################################## |
| 151 | uv pip install \ |
| 152 | "scikit-build-core==0.11.6" \ |
| 153 | "pyproject-metadata<0.8" \ |
| 154 | pathspec \ |
| 155 | packaging \ |
| 156 | distro \ |
| 157 | "setuptools<70" \ |
| 158 | setuptools_scm \ |
| 159 | cmake \ |
| 160 | ninja \ |
| 161 | pybind11 \ |
| 162 | nanobind |
| 163 | uv pip install apache-tvm-ffi==0.1.12 \ |
| 164 | --no-build-isolation \ |
| 165 | --no-cache |
| 166 | |
| 167 | TEMP_BUILD_DIR=$(mktemp -d) |
| 168 | |
| 169 | pushd "${TEMP_BUILD_DIR}" |
| 170 | |
| 171 | export CFLAGS="-fno-lto -mcpu=power9" |
| 172 | export CXXFLAGS="-fno-lto -mcpu=power9" |
| 173 | export LDFLAGS="-fno-lto" |
| 174 | export PATH=/opt/vllm/bin:$PATH |
| 175 | |
| 176 | export Python_EXECUTABLE=/opt/vllm/bin/python3 |
| 177 | export Python3_EXECUTABLE=/opt/vllm/bin/python3 |
| 178 | export PYTHON_EXECUTABLE=/opt/vllm/bin/python3 |
| 179 | |
| 180 | export Python_ROOT_DIR=/opt/vllm |
| 181 | export Python3_ROOT_DIR=/opt/vllm |
| 182 | |
| 183 | git clone \ |
| 184 | --recursive \ |
| 185 | https://github.com/mlc-ai/xgrammar \ |
| 186 | -b "v${XGRAMMAR_VERSION}" |
| 187 | |
| 188 | cd xgrammar |
| 189 | |
| 190 | cp cmake/config.cmake . |
| 191 | export PYTHONPATH=/opt/vllm/lib64/python3.12/site-packages:/opt/vllm/lib/python3.12/site-packages:${PYTHONPATH:-} |
| 192 | |
| 193 | uv build \ |
| 194 | --wheel \ |
| 195 | --out-dir "${WHEEL_DIR}" \ |
| 196 | --no-build-isolation |
| 197 | |
| 198 | uv pip install "${WHEEL_DIR}"/xgrammar*.whl -v |
| 199 | |
| 200 | popd |
| 201 | |
| 202 | rm -rf "${TEMP_BUILD_DIR}" |
| 203 | cd "${REPO_ROOT}" |
| 204 | |
| 205 | ######################################## |
| 206 | # RHOAI Binary Downloads |
| 207 | ######################################## |
| 208 | pip download \ |
| 209 | --index-url "${RHOAI_INDEX_URL}" \ |
| 210 | --only-binary=:all: \ |
| 211 | --no-deps \ |
| 212 | llvmlite==0.47.0 \ |
| 213 | -d "${WHEEL_DIR}" |
| 214 | |
| 215 | pip download \ |
| 216 | --index-url "${RHOAI_INDEX_URL}" \ |
| 217 | --only-binary=:all: \ |
| 218 | --no-deps \ |
| 219 | Numba==0.65.0 \ |
| 220 | -d "${WHEEL_DIR}" |
| 221 | |
| 222 | ######################################## |
| 223 | # install built wheels |
| 224 | ######################################## |
| 225 | uv pip install setuptools_scm maturin setuptools-rust ninja scikit-build-core pybind11 nanobind \ |
| 226 | --no-build-isolation |
| 227 | uv pip install "${WHEEL_DIR}"/*.whl |
| 228 | |
| 229 | ######################################## |
| 230 | # install remaining deps |
| 231 | ######################################## |
| 232 | |
| 233 | sed -i.bak -e 's/.*torch.*//g' pyproject.toml requirements/*.txt |
| 234 | |
| 235 | uv pip install "setuptools>=78.1.1" --no-build-isolation |
| 236 | |
| 237 | export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig |
| 238 | |
| 239 | uv pip install -r requirements/common.txt \ |
| 240 | -r requirements/cpu.txt \ |
| 241 | -r requirements/build/cpu.txt --index-strategy unsafe-best-match |