NCCL
GPU间通信的优化原语。
简介
NCCL(发音为"Nickel")是一个独立的GPU标准通信例程库,实现了全归约、全聚合、归约、广播、归约-散播以及任何基于发送/接收的通信模式。它已经过优化,可以在使用PCIe、NVLink、NVswitch以及使用InfiniBand Verbs或TCP/IP套接字的网络平台上实现高带宽。NCCL支持安装在单个节点或多个节点上的任意数量的GPU,可用于单进程或多进程(如MPI)应用程序。
有关NCCL使用的更多信息,请参阅NCCL文档。
构建
注意:NCCL的官方测试版本可以从以下地址下载:https://developer.nvidia.com/nccl。如果您选择使用官方版本,可以跳过以下构建步骤。
构建库:
$ cd nccl
$ make -j src.build
如果CUDA未安装在默认的/usr/local/cuda路径下,您可以通过以下方式定义CUDA路径:
$ make src.build CUDA_HOME=<cuda安装路径>
NCCL将被编译并安装在build/
目录下,除非设置了BUILDDIR
。
默认情况下,NCCL会为所有支持的架构进行编译。为加快编译速度并减小二进制文件大小,可以考虑重新定义NVCC_GENCODE
(定义在makefiles/common.mk
中),只包含目标平台的架构:
$ make -j src.build NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70"
安装
要在系统上安装NCCL,请创建一个软件包,然后以root身份安装。
Debian/Ubuntu:
$ # 安装创建debian软件包的工具
$ sudo apt install build-essential devscripts debhelper fakeroot
$ # 构建NCCL deb软件包
$ make pkg.debian.build
$ ls build/pkg/deb/
RedHat/CentOS:
$ # 安装创建rpm软件包的工具
$ sudo yum install rpm-build rpmdevtools
$ # 构建NCCL rpm软件包
$ make pkg.redhat.build
$ ls build/pkg/rpm/
与操作系统无关的tarball:
$ make pkg.txz.build
$ ls build/pkg/txz/
测试
NCCL的测试单独维护在https://github.com/nvidia/nccl-tests。
$ git clone https://github.com/NVIDIA/nccl-tests.git
$ cd nccl-tests
$ make
$ ./build/all_reduce_perf -b 8 -e 256M -f 2 -g <ngpus>
版权
所有源代码和随附文档的版权归 (c) 2015-2020 NVIDIA CORPORATION 所有。保留所有权利。