Skip to main content

NIXL Python API

Project description

NVIDIA Inference Xfer Library (NIXL)

NVIDIA Inference Xfer Library (NIXL) is targeted for accelerating point to point communications in AI inference frameworks such as NVIDIA Dynamo, while providing an abstraction over various types of memory (e.g., CPU and GPU) and storage (e.g., file, block and object store) through a modular plug-in architecture.

License GitHub Release

Pre-build Distributions

PyPI Wheel

The nixl python API and libraries, including UCX, are available directly through PyPI:

pip install nixl

Prerequisites for source build

Ubuntu:

$ sudo apt install build-essential cmake pkg-config

Fedora:

$ sudo dnf install gcc-c++ cmake pkg-config

Python

$ pip3 install meson ninja pybind11

UCX

NIXL was tested with UCX version 1.19.0.

GDRCopy is available on Github and is necessary for maximum performance, but UCX and NIXL will work without it.

$ wget https://github.com/openucx/ucx/releases/download/v1.19.0/ucx-1.19.0.tar.gz
$ tar xzf ucx-1.19.0.tar.gz
$ cd ucx-1.19.0
$ ./configure                          \
    --enable-shared                    \
    --disable-static                   \
    --disable-doxygen-doc              \
    --enable-optimizations             \
    --enable-cma                       \
    --enable-devel-headers             \
    --with-cuda=<cuda install>         \
    --with-verbs                       \
    --with-dm                          \
    --with-gdrcopy=<gdrcopy install>   \
    --enable-mt
$ make -j
$ make -j install-strip
$ ldconfig

ETCD (Optional)

NIXL can use ETCD for metadata distribution and coordination between nodes in distributed environments. To use ETCD with NIXL:

ETCD Server and Client

$ sudo apt install etcd etcd-server etcd-client

# Or use Docker
$ docker run -d -p 2379:2379 quay.io/coreos/etcd:v3.5.1

ETCD CPP API

Installed from https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3

$ sudo apt install libgrpc-dev libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc
$ sudo apt install libcpprest-dev
$ git clone https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.git
$ cd etcd-cpp-apiv3
$ mkdir build && cd build
$ cmake ..
$ make -j$(nproc) && make install

Additional plugins

Some plugins may have additional build requirements, see them here:

Getting started

Build & install

$ meson setup <name_of_build_dir>
$ cd <name_of_build_dir>
$ ninja
$ ninja install

Build Options

Release build

$ meson setup <name_of_build_dir> --buildtype=release

Debug build (default)

$ meson setup <name_of_build_dir>

NIXL-specific build options

# Example with custom options
$ meson setup <name_of_build_dir> \
    -Dbuild_docs=true \           # Build Doxygen documentation
    -Ducx_path=/path/to/ucx \     # Custom UCX installation path
    -Dinstall_headers=true \      # Install development headers
    -Ddisable_gds_backend=false   # Enable GDS backend

Common build options:

  • build_docs: Build Doxygen documentation (default: false)
  • ucx_path: Path to UCX installation (default: system path)
  • install_headers: Install development headers (default: true)
  • disable_gds_backend: Disable GDS backend (default: false)
  • cudapath_inc, cudapath_lib: Custom CUDA paths
  • static_plugins: Comma-separated list of plugins to build statically

Building Documentation

If you have Doxygen installed, you can build the documentation:

# Configure with documentation enabled
$ meson setup <name_of_build_dir> -Dbuild_docs=true
$ cd <name_of_build_dir>
$ ninja

# Documentation will be generated in <name_of_build_dir>/html
# After installation (ninja install), documentation will be available in <prefix>/share/doc/nixl/

Python Interface

NIXL provides Python bindings through pybind11. For detailed Python API documentation, see docs/python_api.md.

The preferred way to install the Python bindings is through pip:

pip install nixl

Or build from source:

# From the root nixl directory
pip install .
pip install <name_of_build_dir>/src/bindings/python/nixl-meta/nixl-*.whl

For Python examples, see examples/python/.

Rust Bindings

Build

  • Use -Drust=true meson option to build rust bindings.
  • Use -Ddebug=false for a release build.
  • Or build manually:
    $ cargo build --release
    

Install

The bindings will be installed under nixl-sys in the configured installation prefix. Can be done using ninja, from project build directory:

$ ninja install

Test

# Rust bindings tests
$ cargo test

Use in your project by adding to Cargo.toml:

[dependencies]
nixl-sys = { path = "path/to/nixl/bindings/rust" }

Other build options

See contrib/README.md for more build options.

Building Docker container

To build the docker container, first clone the current repository. Also make sure you are able to pull docker images to your machine before attempting to build the container.

Run the following from the root folder of the cloned NIXL repository:

$ ./contrib/build-container.sh

By default, the container is built with Ubuntu 24.04. To build a container for Ubuntu 22.04 use the --os option as follows:

$ ./contrib/build-container.sh --os ubuntu22

To see all the options supported by the container use:

$ ./contrib/build-container.sh -h

The container also includes a prebuilt python wheel in /workspace/dist if required for installing/distributing. Also, the wheel can be built with a separate script (see below).

Building the python wheel

The contrib folder also includes a script to build the python wheel with the UCX dependencies. Note, that UCX and other NIXL dependencies are required to be installed.

$ ./contrib/build-wheel.sh

Running with ETCD

NIXL can use ETCD for metadata exchange between distributed nodes. This is especially useful in containerized or cloud-native environments.

Environment Setup

To use ETCD with NIXL, set the following environment variables:

# Set ETCD endpoints (required) - replace localhost with the hostname of the etcd server
export NIXL_ETCD_ENDPOINTS="http://localhost:2379"

# Set ETCD namespace (optional, defaults to /nixl/agents)
export NIXL_ETCD_NAMESPACE="/nixl/agents"

Running the ETCD Example

NIXL includes an example demonstrating metadata exchange and data transfer using ETCD:

# Start an ETCD server if not already running
# For example:
# docker run -d -p 2379:2379 quay.io/coreos/etcd:v3.5.1

# Set the ETCD env variables as above

# Run the example. The two agents in the example will exchange metadata through ETCD
# and perform data transfers
./<nixl_build_path>/examples/nixl_etcd_example

nixlbench Benchmark

For more comprehensive testing, the nixlbench benchmarking tool supports ETCD for worker coordination:

# Build nixlbench (see benchmark/nixlbench/README.md for details)
cd benchmark/nixlbench
meson setup build && cd build && ninja

# Run benchmark with ETCD
./nixlbench --etcd-endpoints http://localhost:2379 --backend UCX --initiator_seg_type VRAM

Examples

Third-Party Components

This project will download and install additional third-party open source software projects. Review the license terms of these open source projects before use.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

nixl_cu13-0.7.1-cp312-cp312-manylinux_2_28_x86_64.whl (21.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

nixl_cu13-0.7.1-cp312-cp312-manylinux_2_28_aarch64.whl (20.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

nixl_cu13-0.7.1-cp311-cp311-manylinux_2_28_x86_64.whl (21.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

nixl_cu13-0.7.1-cp311-cp311-manylinux_2_28_aarch64.whl (20.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

nixl_cu13-0.7.1-cp310-cp310-manylinux_2_28_x86_64.whl (21.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

nixl_cu13-0.7.1-cp310-cp310-manylinux_2_28_aarch64.whl (20.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

nixl_cu13-0.7.1-cp39-cp39-manylinux_2_28_x86_64.whl (21.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

nixl_cu13-0.7.1-cp39-cp39-manylinux_2_28_aarch64.whl (20.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

File details

Details for the file nixl_cu13-0.7.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d538d715f83e13b58ba1b48e730a20d876167cc90c93497baa78d25c5b83a9b4
MD5 61fe3698b007e783f26688b6b6f95a9c
BLAKE2b-256 629678f1f7f342f132d0c1587bed3d6bdfb0328e169013adc4762cd24f5c63f5

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 576433abda675a6eca45fa92abf6283bc615bc790275222e79c5016dd72a653a
MD5 ab69c23d804848870a4adc2af38e11af
BLAKE2b-256 cd37df0011efa82bd6b51246217bedef779f0f97e301598885a0749063b386ef

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dfa9a7c16a16f4456d730161af8da0940a464e45f4536421a2ddd59a5d0db1c7
MD5 f75b59089245e67fd36ce96aacf42e2d
BLAKE2b-256 4ab9fef0afffcad891a44a1ef81277c81ed073225b9a56dccc5fe6165e68e866

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c9a591360e32f8adaf05c76a3871294ac3aa8ac79b2a4fadc4eb327356a877ff
MD5 9ee8c0f2627c77f223a5967786fdc866
BLAKE2b-256 b324db51324d2cb07c43192e39ec53e5695a14e451e7deca68896822cf3b8882

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8cc23a7b34e056c3c7dab16d18cd1f150e9f76c9807cecaf8b67412a43d26b35
MD5 228b0fbcd695c0176eda71ed9fab7a27
BLAKE2b-256 20794f1ae0c32cc214e334a128f8694de99040338f78a7c6da7a1666cfc00261

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6e94d29308f68f65f5ba311f2e104d9bebd79a28a48b03608b367fd7ba61e68c
MD5 11e1b0562a1d54c6ef6e4700a0166ad7
BLAKE2b-256 afeeb8b86da141a3448048b987d7192ef07d07c38402bca3bbda3661562b59a2

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5a8caebee3b672612a3fd30af1e2a14cde29c6b366bdfb6935596f1376b99595
MD5 07ff355aa37922fb9705f91d3a511f24
BLAKE2b-256 fd52ade692becf76d2d014f2122734571e63340f4d4d5608006b752fed08de83

See more details on using hashes here.

File details

Details for the file nixl_cu13-0.7.1-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl_cu13-0.7.1-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 846a7d68b3db3c4b6238b32d5248b9e7540d011304cb8cec35dcf7a3c14d14b0
MD5 6ddc9a2acd641d5f70c1f9a090f126f6
BLAKE2b-256 4503b60b196fcc9822a08d6ee3834a6656d8210be546ee00d85458b0aadd3c99

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page