统一通信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地址或主机名。
以下是一个先启动服务器,然后客户端连接到本地服务器(localhost
(127.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
库。当前仅使用的级别是INFO
和DEBUG
,可以通过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_cu12-0.39.1.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | d3e5089ba674cad88f400b2cd2ded237fddcd24011af4269bf880e97b30728f6 |
|
MD5 | cf6ab36d1ba353ac4f2059425d7032f0 |
|
BLAKE2b-256 | c5c637178531a067f7f30c69a88d7d0e41fdd2460ce98eaab8beea81700d050d |