HALOps Build Guide¶
To use HALOps, install the prebuilt package; see Quick Start. This guide is for building from source: environment setup, wheel and development builds, and installation checks. The CUDA/C++ extension is built by setup.py through PyTorch CUDAExtension.
1. Requirements¶
Component |
Requirement |
|---|---|
Python |
3.10 or later |
CUDA Toolkit |
13.0 or later; |
NVIDIA GPU |
Blackwell GPU with compute capability compatible with |
NVIDIA Driver |
R580 or later, compatible with CUDA 13.x |
PyTorch |
2.13.0 or later |
C++ compiler |
C++20 support |
2. Prepare the Build Environment¶
Run all commands below from the HALOps repository root.
2.1 Initialize CUTLASS¶
git submodule update --init --recursive
If 3rdparty/cutlass/include is missing, setup.py performs a shallow initialization of 3rdparty/cutlass automatically.
2.2 Install Python Dependencies¶
Activate a virtual or Conda environment, then install the dependencies:
python -m pip install -r requirements.txt
PyTorch must be a CUDA build compatible with the local Toolkit.
2.3 Configure the CUDA Path¶
If CUDA is not installed in the default location, or several CUDA versions are installed, select the Toolkit explicitly:
export CUDA_HOME=/usr/local/cuda
export PATH="$CUDA_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
CUDA_HOME should point to the CUDA Toolkit root that contains bin/nvcc, include/ and lib64/.
2.4 Optional Checks¶
nvcc --version
python -c "import torch; print(torch.__version__, torch.version.cuda)"
Make sure nvcc is CUDA 13.0+ and PyTorch is built with a compatible CUDA version.
3. Build and Install¶
3.1 Install from Source¶
Build and install into the current environment:
python -m pip install --no-build-isolation --no-deps -v .
--no-build-isolation reuses the current PyTorch/CUDA toolchain, --no-deps leaves installed dependencies untouched, and -v prints the full compiler log.
3.2 Build and Install a Wheel¶
Use a wheel to validate the final artifact:
rm -rf build dist
python -m pip wheel --no-build-isolation --no-deps -v -w dist .
python -m pip install dist/halops-*.whl --force-reinstall --no-deps
Cleaning dist/ first ensures the wildcard only matches the wheel from this build.
These steps are equivalent to bash build.sh --release.
3.3 Development Build¶
To make the current environment reference the source tree in editable mode, run:
python -m pip install --no-build-isolation --no-deps -e . -v
After changing CUDA/C++ code, run an incremental build to refresh the .so in the source tree:
bash build.sh
3.4 Control Build Parallelism¶
PyTorch extensions compile in parallel through Ninja by default. Reduce the number of parallel jobs if memory is limited:
MAX_JOBS=4 python -m pip install --no-build-isolation --no-deps -v .
4. Verify the Build¶
Check the installation with an import check and the operator tests.
4.1 Import Check¶
The check below only verifies that the Python package and the extension load; it does not launch any GPU kernel:
python - <<'PY'
import halops
import halops.halops_kernel as kernel
print("Package path:", halops.__file__)
print("Extension path:", kernel.__file__)
PY
4.2 Operator Tests¶
Operator tests require an NVIDIA Blackwell GPU compatible with sm_100f; the build does not run on other architectures.
A minimal operator test:
python -m pytest tests/test_dense_gemm.py