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 .

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-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl (23.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

nixl-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl (22.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

nixl-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl (23.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

nixl-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl (22.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

nixl-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl (23.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

nixl-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl (22.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

nixl-0.7.0-cp39-cp39-manylinux_2_28_x86_64.whl (23.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

nixl-0.7.0-cp39-cp39-manylinux_2_28_aarch64.whl (22.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

File details

Details for the file nixl-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9a825f38057c352d1a2ca77fea423d9f2e8c751892aedfa590723ce9c739ffcd
MD5 ac555b42907621823297d84113bae29f
BLAKE2b-256 a2b43fba8da135f99e63807e4b57d9c9a098c1c02730bb057ec299bb74648790

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 86d96e8f5637cf2de861273be4d305a0a3b8ab32317d96f8262108c0249d16f1
MD5 b2be6446a6c5ac3d5bd5a4f1f7370c08
BLAKE2b-256 32243c08a12967ad9809dd01a4a6fed16fb3ef8e1ddfb011f0da26f8f5eeea74

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e343bf4a18b0529293cca5d2af2b0dc47fa9ac8179904800f647cc016debb782
MD5 1abdbd47687331b534398f9454c167a2
BLAKE2b-256 320522496145bb28875df694a2d4e80ed020b18ce7ef334b51a5621a31dc3cad

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0aa40e37ef123a81ee10f92da73f495e3be4335c7fd23d5cf4c60f20734d73c4
MD5 52834b50610778b5ae228f35886870d1
BLAKE2b-256 b6d6627129fc9f948be2c87ad8e1b3678d64f1fa4cc6a066429834b9a8e8a3ff

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b2c1a5e9e532de41f579b88703448317dd4b536f1c2f66736acd18b5502c5b6
MD5 be4ec391b1d45372e9e227f69854eaf5
BLAKE2b-256 ae57fe5bb2d44b25d88c7aa59d96b57d30f50ee4b81fe70af7d7459e83b4e7e7

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 73b4bd65af7f3b451c7f8407bd6c32089c87f74cfd395b5d2ce43ad96ae33a03
MD5 6eda5dc4622e8c6c0c5c6e28f9cc101a
BLAKE2b-256 14dca480308e6959ad9f5b9d16f37b48bee23b653a53519554d468d0a4f9d0fa

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: nixl-0.7.0-cp39-cp39-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 23.6 MB
  • Tags: CPython 3.9, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.19

File hashes

Hashes for nixl-0.7.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 44d8909740bf3d8d7ae55d37eb3381b622e0cba10eb710cde1d50c4260007045
MD5 d67c126805ba9b42455c4f09b6d7189b
BLAKE2b-256 79e143452a714e25838be337b35b1bc55022899a323f07a9ba012cdb866d6318

See more details on using hashes here.

File details

Details for the file nixl-0.7.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nixl-0.7.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6b7f08d003b3870a11e4200f866b38e9ca1897e225bda850c64c54428c55c0bf
MD5 4e58ee2e267702d495840d0fdd1c7610
BLAKE2b-256 79ec1458bc3aedad0c9a5b11fc19c90275af86e8165edd96be23be88c0c1bf19

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