NVIDIA/nccl
GitHub: NVIDIA/nccl
NVIDIA 开源的高性能 GPU 集合通信库,为多卡和多节点分布式训练提供底层通信原语支持。
Stars: 4484 | Forks: 1145
# NCCL
用于 GPU 间通信的优化原语。
## 简介
NCCL(读音同 "Nickel")是一个独立的 GPU 标准通信例程库,实现了 all-reduce、all-gather、reduce、broadcast、reduce-scatter 以及任何基于 send/receive 的通信模式。它经过优化,旨在通过 PCIe、NVLink、NVswitch 以及使用 InfiniBand Verbs 或 TCP/IP sockets 的网络平台上实现高带宽。NCCL 支持安装在单个节点或跨多个节点的任意数量 GPU,并可在单进程或多进程(例如 MPI)应用程序中使用。
有关 NCCL 用法的更多信息,请参阅 [NCCL 文档](https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/index.html)。
## 构建
注意:NCCL 的官方且经过测试的构建版本可从以下网址下载:https://developer.nvidia.com/nccl。如果您选择使用官方构建版本,则可以跳过以下构建步骤。
构建该库:
```
$ cd nccl
$ make -j src.build
```
如果 CUDA 未安装在默认的 /usr/local/cuda 路径中,您可以使用以下命令定义 CUDA 路径:
```
$ make src.build CUDA_HOME=
```
除非设置了 `BUILDDIR`,否则 NCCL 将被编译并安装在 `build/` 中。
默认情况下,NCCL 是为所有支持的架构编译的。为了加速编译并减少二进制文件大小,请考虑重新定义 `NVCC_GENCODE`(在 `makefiles/common.mk` 中定义),以仅包含目标平台的架构:
```
$ make -j src.build NVCC_GENCODE="-gencode=arch=compute_90,code=sm_90"
```
## 安装
要在系统上安装 NCCL,请创建一个软件包,然后以 root 身份安装。
Debian/Ubuntu:
```
$ # Install tools to create debian packages
$ sudo apt install build-essential devscripts debhelper fakeroot
$ # Build NCCL deb package
$ make pkg.debian.build
$ ls build/pkg/deb/
```
RedHat/CentOS:
```
$ # Install tools to create rpm packages
$ sudo yum install rpm-build rpmdevtools
$ # Build NCCL rpm package
$ 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
```
## 版权
所有源代码和随附文档的版权归 (c) 2015-2020 NVIDIA CORPORATION 所有。保留所有权利。
标签:All-Reduce, CUDA, HPC, InfiniBand, NCCL, NVLink, PCIe, RDMA, UML, Vectored Exception Handling, 分布式系统, 响应大小分析, 多GPU通信, 并发处理, 并行计算, 机器学习基础设施, 深度学习, 计算机集群, 跨节点通信, 通信原语, 集合通信, 高性能计算