Create NIXL wheel with CUObject Dependency for S3 RDMA (#1971)
## What? Enable RDMA support in the S3 Object plugin for CUDA 13 Python wheels by building them with cuObject Client support. This PR: - Parameterizes the `wheel_base` Docker stage: the PyPA manylinux base image is now passed as `MANYLINUX_IMAGE`/`MANYLINUX_IMAGE_TAG` instead of being hardcoded, so either can be overridden independently (e.g. to mirror to Artifactory). - Bumps the NGC CUDA source image from 13.0.1 to 13.2.1-devel-ubi8 — the minimum release that provides `cuobjclient-13.2.pc`. - Extracts `cuobjclient*.pc` from the CUDA stage and copies them into `/usr/lib64/pkgconfig/` in the manylinux build environment so meson auto-detects and links the OBJ plugin against `libcuobjclient.so.1`. - Verifies that `libplugin_OBJ.so` carries a `libcuobjclient.so.1` DT_NEEDED entry for CUDA 13 builds. - Keeps `libcuobjclient.so.1` external to the wheel via an auditwheel exclusion — the target system must supply the matching CUDA runtime package. - Updates both PR CI and nightly/release wheel pipelines to pass the new manylinux image parameters and enables a cached `wheel_base` image for the nightly, matching the PR CI approach. - Switches the nightly from the internal combined base image to the same public NGC ubi8 source used by the PR CI, so both environments are identical. CUDA 12 wheel builds are unaffected: no `cuobjclient*.pc` files are present in the build environment, so meson's auto-detection produces the same result as before. ## Why? The existing wheel build images did not provide cuObject Client. Because meson's `cuobjclient` option defaults to `auto`, CUDA 13 wheels could build successfully while silently excluding the accelerated S3 implementations, leaving the S3 Object plugin without RDMA support. CUDA 13.2's UBI8 development image provides the required cuObject headers, libraries, and pkg-config metadata. Copying the `.pc` files into the manylinux build environment ensures meson finds and links the accelerated implementation, while auditwheel keeps the runtime library out of the distributed wheel. ## How? The manylinux build uses two separate stages: 1. A pinned NGC CUDA devel image (`nvcr.io/nvidia/cuda:13.2.1-devel-ubi8`) supplies the CUDA toolkit and stages `cuobjclient*.pc` into `/opt/nixl-cuda-pkgconfig/`. 2. A pinned PyPA manylinux image (`quay.io/pypa/manylinux_2_28`) provides the wheel-compatible build environment. 3. Both the CUDA toolkit and the cuObject pkg-config files are copied into the manylinux stage; `/usr/lib64/pkgconfig` is added to `PKG_CONFIG_PATH`. 4. Meson auto-detects cuobjclient from `PKG_CONFIG_PATH` (no explicit `-Dcuobjclient` flag needed). 5. A `readelf` check verifies that `libplugin_OBJ.so` carries `libcuobjclient.so.1` as a DT_NEEDED entry for CUDA 13 builds. 6. `auditwheel repair` excludes `libcuobjclient*`, so the target system must provide the matching CUDA runtime package. The Jenkins PR and nightly matrices use `BASE_IMAGE`/`BASE_TAG` for the CUDA source image and the new `MANYLINUX_IMAGE`/`MANYLINUX_IMAGE_TAG` for the manylinux base, with separate cached `wheel_base` images per CUDA variant to keep CI and published-wheel builds consistent. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Chores** - Updated nightly and matrix wheel builds to support CUDA 13.2 and CUDA 12 variants. - Switched nightly CUDA builds to NVIDIA CUDA NGC base images. - Refreshed PyPA manylinux build images with configurable image and tag settings. - Updated container build defaults and caching for CUDA-specific wheel images. - Added configurable PyTorch version support for wheel builds. - Improved CUDA library detection across supported versions. - Enhanced CUDA 13 build validation and excluded additional client libraries from repaired wheel bundles. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Adit Ranadive <aranadive@nvidia.com>
A
Adit Ranadive committed
ea1b375ba0695d167eb40de92ce9402770c3d4da
Parent: 9824e1c
Committed by GitHub <noreply@github.com>
on 8/17/2026, 6:36:44 PM