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通信, 并发处理, 并行计算, 机器学习基础设施, 深度学习, 计算机集群, 跨节点通信, 通信原语, 集合通信, 高性能计算