NVIDIA/nccl
机器学习面向单机或多机多卡训练场景的 GPU 集合通信库,提供高效的 all-reduce、all-gather 等原语。
项目介绍
NCCL 是一个独立的 C++ GPU 通信例程库,实现了 all-reduce、all-gather、reduce、broadcast、reduce-scatter 以及基于 send/receive 的通信模式。它针对 PCIe、NVLink、NVSwitch、InfiniBand Verbs 和 TCP/IP socket 等平台做了高带宽优化,支持单节点或跨节点的任意数量 GPU,可用于单进程或多进程(例如 MPI)程序。它的主要使用者是构建或运行分布式 GPU 工作负载(如深度学习训练)的人,需要可靠的集合通信后端,而不是自己编写通信逻辑。具体用法可查阅 NCCL 文档。
快速使用
官方测试过的构建可从 NVIDIA NCCL 下载页 获取;如果不打算自行编译,可以直接使用官方版本。从代码检出开始构建:
cd nccl
make -j src.build
如果 CUDA 不在 /usr/local/cuda,可传入其位置,例如 make src.build CUDA_HOME=<path to cuda install>。除非设置了 BUILDDIR,产物输出到 build/。默认会编译所有支持的架构;若只针对目标 GPU 编译,可限制架构,例如:
make -j src.build NVCC_GENCODE="-gencode=arch=compute_90,code=sm_90"
测试需要克隆独立的 nccl-tests 仓库并构建,然后运行集合通信基准,例如 ./build/all_reduce_perf -b 8 -e 256M -f 2 -g <ngpus>,把 <ngpus> 换成实际 GPU 数量。
安装包
README 还介绍了打包方式。Debian/Ubuntu 上安装 build-essential devscripts debhelper fakeroot 后运行 make pkg.debian.build,产物在 build/pkg/deb/;RedHat/CentOS 上安装 rpm-build rpmdevtools 后运行 make pkg.redhat.build,产物在 build/pkg/rpm/。通用 tarball 由 make pkg.txz.build 生成到 build/pkg/txz/。Python wheel 可通过 make pkg.python_wheel.build 生成,README 的步骤会先通过安装脚本安装 uv,在受控环境中使用前应先评估这一依赖。安装系统包需要 root 权限。
使用约束
构建需要 CUDA 工具链,目标平台是 NVIDIA GPU 及上述互连方式;默认编译所有支持架构,会增加编译时间和二进制体积。测试不在本仓库,而在 nccl-tests 中。仓库许可证标记为 NOASSERTION,再分发前应确认实际许可条款。Python wheel 流程会向构建环境引入额外的 Python 依赖管理工具。
HotRepo 点评
NCCL 是 NVIDIA 长期维护的基础设施库,已有可观关注度(评审时超过 5,000 Star、近 1,500 Fork)。它不是面向终端用户的应用,而是分布式训练框架和 HPC 程序所依赖的底层组件。对读者来说,实际选择主要在于使用 NVIDIA 预编译包,还是针对特定 GPU 架构与互连方式自行编译;安装后应到独立的 nccl-tests 项目验证性能。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。