下载
中文
注册

集合通信算法

针对同一个通信算子,随着网络拓扑、通信数据量、硬件资源等的不同,往往会采用不同的通信算法,从而最大化集群通信性能。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发送数据),适合通信数据量较大、需要规避网络一打多现象的场景。
  • cann-hccl仓当前开放的算法有Mesh、Ring、RHD、PairWise、Star,开发者可访问Gitee-cann-hccl详细了解对应实现。
  • 开发者若想指定集合通信Server间跨机通信算法,可通过环境变量HCCL_ALGO进行设置。需要注意,若通过环境变量HCCL_ALGO指定了Server间跨机通信算法,Server间的通信算法自适应选择功能不再生效,以用户指定的算法为准。