是什么(What)
高性能通信库,专为多GPU通信优化。加速分布式深度学习训练的集合通信
。
集合通信
?
点对点通信
?
为什么(Why)
通用通信库在GPU通信中性能不足,无法充分利用GPU高带宽和低延迟。
所以需要一个针对GPU架构优化,支持NVLink,NVSwitch的高速互联。
主要还是需要低延迟
和高带宽
怎么样(How)
怎么通信?其实和MPI差不多。
NCCL中:
进程叫做rank
每个rank
都有一个rank ID
rank
的集合构成了一个"communicator"
也就是一些可以互相通信的进程。
一个rank
可以分属于多个communicators
而且在不同的地方可能有不同的rank ID
然后呢?
ncclCommInitRank():
初始化指定rank的communicator。
ncclCommInitAll():
同时初始化所有rank的communicator。
initTransportsRank():
检测可用GPU设备以及拓扑结构,计算最佳通信路径,建立连接。
ncclTopoFillGpu():
建立包含GPU的XML树结构,可以设置环境变量NCCL_TOPO_DUMP_FILE来书输出XML文件,并通过该XML文件来查看机器的拓扑结构。
然后两种算法?
Ring算法:
基本算法,环形、只能和相邻两个邻居进行数据交换。
特点:
简洁;对等
缺点:
如果是Ring的all-reduce,延迟比较高
Tree算法:
因为二叉树大约一半节点都是叶子节点,那么通过将叶子节点变换为非叶子节点,得到两棵二叉树,每个节点在其中好一棵二叉树是叶子节点,另一棵二叉树是非叶子节点。
特点:
延迟更低,高效利用带宽和拓扑结构
单机多卡
:NVLink 和 NVSwitch
多机多卡
:nfiniBand 或 RoCE
谁(Who)
开发者
何时(When)
初始版本:NCCL 1.0 于 2016 年发布,支持单机多卡通信。
NCCL 2.0:支持多机多卡通信,引入跨节点通信功能。
NCCL 2.6:引入 SHArP 算法,优化 InfiniBand 网络下的通信性能。
何地(Where)
数据中心
:
GPU 集群中的分布式训练和并行计算。
云计算平台
:
AWS、Google Cloud、Azure 等云服务提供商的 GPU 实例。
边缘计算
:
高性能边缘计算设备中的实时数据处理。
NCCL 的硬件环境
:
GPU:支持 NVLink 和 NVSwitch 的 NVIDIA GPU(如 A100、V100)。
网络:支持 InfiniBand 或 RoCE 的高速网络。
如何解决(How to Solve)
性能优化
:
自动化选择最优
Ring all reduce
SHArP 算法
分析问题
:
NCCL 的日志和性能分析工具诊断通信性能瓶颈。
如何解决死锁、数据不一致等通信错误。
结果与影响(Outcome & Impact)
待定,待笔者实际操作。