跳转到主要内容

统一通信X库(UCX)的Python绑定

项目描述

UCXX

UCXX是UCX的面向对象的C++接口,具有原生Python绑定支持。

构建

环境设置

在开始之前,需要安装必要的依赖项。最简单的方法是安装Miniconda,然后使用提供的发展文件创建并激活一个环境

$ conda env create -n ucxx -f conda/environments/all_cuda-118_arch-x86_64.yaml
$ conda activate ucxx

加快conda依赖项解析

上述过程应该没有问题,但它可能比必要的慢。加快依赖项解析的一个替代方法是,在创建新环境之前安装mamba。安装Miniconda后,可以使用以下命令安装mamba:

$ conda install -c conda-forge mamba

之后,可以像之前一样继续操作,只需在环境创建命令中将conda替换为mamba即可。

$ mamba env create -n ucxx -f conda/environments/all_cuda-118_arch-x86_64.yaml
$ conda activate ucxx

便捷脚本

为了方便,我们提供了./build.sh脚本。默认情况下,它将构建并安装C++和Python库。有关可用选项的详细说明,请查看./build.sh --help

手动构建C++和Python库也是可能的,请参阅构建C++Python的说明。

此外,还有一个./build_and_run.sh脚本,它将调用./build.sh来构建所有内容以及运行C++和Python测试和一些基准测试。同样,可以使用./build_and_run.sh查询现有选项的详细信息。

C++

构建并安装到${CONDA_PREFIX}的C++库,支持Python和RMM,同时构建所有测试运行

mkdir cpp/build
cd cpp/build
cmake .. -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} \
      -DBUILD_TESTS=ON \
      -DCMAKE_BUILD_TYPE=Release \
      -DUCXX_ENABLE_PYTHON=ON \
      -DUCXX_ENABLE_RMM=ON
make -j install

Python

cd python
python setup.py install

运行基准测试

C++

目前只有一个C++基准测试,选项很少。它位于cpp/build/benchmarks/ucxx_perftest下,要获取完整的选项列表,可以使用--help参数。

基准测试由两个进程组成:一个服务器和一个客户端。服务器不得指定IP地址或主机名,将绑定到所有可用接口,而客户端必须指定服务器所在的IP地址或主机名。

以下是一个先运行服务器,然后客户端连接到localhost127.0.0.1)服务器的示例。两个进程都指定了一个参数列表,包括消息大小(字节-s 8388608),分配应被重用(-r),要执行的迭代次数(-n 10)和进度模式(-m polling)。

$ UCX_TCP_CM_REUSEADDR=y ./benchmarks/ucxx_perftest -s 800000000 -r -n 10 -m polling &
$ ./benchmarks/ucxx_perftest -s 800000000 -r -n 10 -m polling 127.0.0.1

建议在绑定支持TCP的接口时使用UCX_TCP_CM_REUSEADDR=y,以防止等待进程的TIME_WAIT状态完成,这通常在服务器终止后60秒内完成。

Python

基准测试适用于Python "核心"(同步)API和"高级"(异步)API。

同步

# Thread progress without delayed notification NumPy transfer, 100 iterations
# of single buffer with 100 bytes
python -m ucxx.benchmarks.send_recv \
    --backend ucxx-core \
    --object_type numpy \
    --n-iter 100 \
    --n-bytes 100

# Blocking progress without delayed notification RMM transfer between GPUs 0
# and 3, 100 iterations of 2 buffers (using multi-buffer interface) each with
# 1 MiB
python -m ucxx.benchmarks.send_recv \
    --backend ucxx-core \
    --object_type rmm \
    --server-dev 0 \
    --client-dev 3 \
    --n-iter 100 \
    --n-bytes 100 \
    --progress-mode blocking

异步

# NumPy transfer, 100 iterations of 8 buffers (using multi-buffer interface)
# each with 100 bytes
python -m ucxx.benchmarks.send_recv \
    --backend ucxx-async \
    --object_type numpy \
    --n-iter 100 \
    --n-bytes 100 \
    --n-buffers 8

# RMM transfer between GPUs 0 and 3, 100 iterations of 2 buffers (using
# multi-buffer interface) each with 1 MiB
python -m ucxx.benchmarks.send_recv \
    --backend ucxx-async \
    --object_type rmm \
    --server-dev 0 \
    --client-dev 3 \
    --n-iter 100 \
    --n-bytes 1MiB \
    --n-buffers 2

# Polling progress mode without delayed notification NumPy transfer,
# 100 iterations of single buffer with 1 MiB
UCXPY_ENABLE_DELAYED_SUBMISSION=0 \
    python -m ucxx.benchmarks.send_recv \
    --backend ucxx-async \
    --object_type numpy \
    --n-iter 100 \
    --n-bytes 1MiB \
    --progress-mode polling

日志记录

日志记录对C++和Python API都是独立可用的。由于Python接口使用C++后端,因此在运行Python代码时也可以启用C++日志记录。

C++

C++接口重用了UCX记录器,并提供相同的日志级别,可以通过UCXX_LOG_LEVEL环境变量启用。但是,它不会启用UCX日志记录,必须仍然设置UCX_LOG_LEVEL以进行UCX日志记录。以下是一些示例

# Request trace log level
UCXX_LOG_LEVEL=TRACE_REQ

# Debug log level
UCXX_LOG_LEVEL=DEBUG

Python

UCXX Python接口使用Python中包含的logging库。目前使用的唯一级别是INFODEBUG,可以通过UCXPY_LOG_LEVEL环境变量启用。以下是一些示例

# Enable Python info log level
UCXPY_LOG_LEVEL=INFO

# Enable Python debug log level, UCXX request trace log level and UCX data log level
UCXPY_LOG_LEVEL=DEBUG UCXX_LOG_LEVEL=TRACE_REQ UCX_LOG_LEVEL=DATA

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

ucxx_cu11-0.39.1.tar.gz (3.0 KB 查看散列

上传时间:

支持者

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF 赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面