集合通信算法
针对同一个通信算子,随着网络拓扑、通信数据量、硬件资源等的不同,往往会采用不同的通信算法,从而最大化集群通信性能。HCCL提供了Mesh、Ring、Recursive Halving-Doubling(RHD)、Pipeline、Pairwise等拓扑算法用于Server内和Server间的集合通信。
Server内通信算法
HCCL通信域Server内支持Mesh、Ring、Double-Ring和Star算法,具体使用的算法根据硬件拓扑自动选择,用户无须配置也不支持配置。
Server间通信算法
HCCL通信域Server间支持如下算法的自适应选择,自适应算法会根据产品形态、数据量和Server个数进行选择,用户默认无需配置。
- Ring算法:基于环结构的通信算法,通信步数多(线性复杂度),时延相对较高,但通信关系简单,受网络拥塞影响较小。适合通信域内Server个数较少、通信数据量较小、网络存在明显拥塞、且pipeline算法不适用的场景。
- RHD(Recursive Halving-Doubling)算法:递归二分和倍增算法,通信步数少(对数复杂度),时延相对较低,但在非2次幂节点规模下会引入额外的通信量。适合通信域内Server个数是2的整数次幂且pipeline算法不适用的场景,或Server个数不是2的整数次幂但通信数据量较小的场景。
- NHR(Nonuniform Hierarchical Ring)算法:非均衡的层次环算法,通信步数少(对数复杂度),时延相对较低。适合通信域内Server个数较多且pipeline算法不适用的场景。
- NB(Nonuniform Bruck)算法:非均匀的数据块通信算法,通信步数少(对数复杂度),时延相对较低。适合通信域内Server个数较多且pipeline算法不适用的场景。
- Pipeline算法:流水线并行算法,可并发使用Server内与Server间的链路,适合通信数据量较大且通信域内每机包含多卡的场景。
- Pairwise算法:逐对通信算法,仅用于AllToAll、AlltoAllV与AlltoAllVC算子,通信步数较多(线性复杂度),时延相对较高,但可以避免网络中出现一打多现象(指一个rank通过同一个端口给多个rank发送数据),适合通信数据量较大、需要规避网络一打多现象的场景。