main
sh 241 lines 7.21 KB
Raw
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