HCCL_ALGO
功能描述
此环境变量用于配置集合通信Server间跨机通信算法,支持全局配置算法类型与按算子配置算法类型两种配置方式。
- 全局配置算法类型,配置方式如下:export HCCL_ALGO="level0:NA;level1:<algo>" 其中level0代表server内通信算法,当前仅支持配置为NA;level1代表server间通信算法,支持如下几种取值:- ring:基于环结构的并行调度算法,适用于通信域内Server个数为非2的整数次幂且数量较少的场景,当无法使用pipeline算法时,配置为此算法可提升通信性能。
- H-D_R:递归二分和倍增算法(Recursive Halving-Doubling:RHD),适用于通信域内Server个数为2的整数次幂的场景,当无法使用pipeline算法时,配置为此算法具有较好的亲和性,有助于通信性能提升。
- NHR:非均衡的层次环算法(Nonuniform Hierarchical Ring),适用于通信域内Server个数为非2的整数次幂且集群规模较大的场景,当无法使用pipeline算法时,配置此算法可提升通信性能。
- NHR_V1:对应历史版本的NHR算法,支持通信域内Server个数为非2的整数次幂。NHR_V1算法理论性能低于新版NHR算法,该配置项未来会逐步下线,建议开发者使用NHR算法。
- NB:非均匀的数据块通信算法(Nonuniform Bruck),适用于通信域内Server个数为非2的整数次幂且集群规模较大的场景,当无法使用pipeline算法时,配置此算法可提升通信性能。当通信域内Server数与通信数据量较大时相对收益会更好。
- pipeline:流水线并行算法,针对通信数据量较大且通信域内每机包含多卡的场景,该算法可以获得较大的性能提升。
- pairwise:比较算法,仅用于AlltoAll、AlltoAllV与AlltoAllVC算子,数据量较小的场景有助于通信性能提升。
 
- 按算子类型配置通信算法,配置方式如下:export HCCL_ALGO="<op0>=level0:NA;level1:<algo0>/<op1>=level0:NA;level1:<algo1>" 其中:- <op>为通信算子的类型,支持配置为:allgather、reducescatter、allreduce、broadcast、reduce、scatter、alltoall。
- <algo>为指定的通信算子采用的server间通信算法,支持的配置同全局配置方法中的level1取值,请确保指定的通信算法为通信算子支持的算法类型,每种算法支持的通信算子可参见表1,未指定通信算法的通信算子会根据产品形态、节点数以及数据量自动选择通信算法。
- 多个算子之间的配置使用“/”分隔。
 
- 针对Atlas 训练系列产品,当通信域内Server的个数为非2的整数次幂时,默认使用ring算法;其他场景默认使用H-D_R算法。
- 针对Atlas A2 训练系列产品,内部会根据产品形态、节点数以及数据量自动选择算法。
配置示例
- 全局配置算法类型export HCCL_ALGO="level0:NA;level1:H-D_R" 
- 按算子配置算法类型# AlltoAll算子使用pairwise算法,其他算子根据产品形态、节点数以及数据量自动选择通信算法。 export HCCL_ALGO="alltoall=level0:NA;level1:pairwise" 
Server间通信算法支持度
| 算法类型 | 集合通信算子 | 数据类型 | 归约类型 | 网络运行模式 | 是否支持确定性计算 | 支持的产品型号 | 不支持算子处理方法 | 
|---|---|---|---|---|---|---|---|
| ring | ReduceScatter、AllGather、AllReduce、Reduce、Scatter | int8、int16、int32、 int64、float16、float32、bfp16 | sum、prod、max、min | 单算子/图模式 | 是 | Atlas 训练系列产品 Atlas A2 训练系列产品 | 自动选择为H-D_R | 
| H-D_R | ReduceScatter、AllGather、AllReduce、Broadcast、Reduce | int8、int16、int32、int64、float16、float32、bfp16 | sum、prod、max、min | 单算子/图模式 | 是 | Atlas 训练系列产品 Atlas A2 训练系列产品 | 自动选择为ring算法 | 
| NHR | ReduceScatter、AllGather、AllReduce、Broadcast、Scatter | int8、int16、int32、int64、float16、float32、bfp16 | sum、prod、max、min | 单算子/图模式 | 是 | Atlas 训练系列产品 Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | 
| NHR_V1 | ReduceScatter、AllGather、AllReduce、Broadcast | int8、int16、int32、int64、float16、float32、bfp16 | sum、prod、max、min | 单算子/图模式 | 是 | Atlas 训练系列产品 Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | 
| NB | ReduceScatter、AllGather、AllReduce、Broadcast、Scatter | int8、int16、int32、int64、float16、float32、bfp16 | sum、prod、max、min | 单算子/图模式 | 是 | Atlas 训练系列产品 Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | 
| pipeline | AllReduce | int8、int16、int32、float16、float32、bfp16 | sum、max、min | 单算子模式 | 否 | Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | 
| AllGather | int8、int16、int32、int64、float16、float32、bfp16 | - | 单算子模式 | - | Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | |
| ReduceScatter | int8、int16、int32、float16、float32、bfp16 | sum、max、min | 单算子模式 | 否 | Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | |
| AlltoAll | int8、int16、int32、int64、float16、float32、bfp16 | - | 单算子模式 | - | Atlas A2 训练系列产品 | 自动选择为pairwise算法 | |
| AlltoAllV | int8、int16、int32、int64、float16、float32、bfp16 | - | 单算子模式 | - | Atlas A2 训练系列产品 | 自动选择为pairwise算法 | |
| pairwise | AlltoAll、AlltoAllV、AlltoAllVC | int8、int16、int32、int64、float16、float32、bfp16 | - | 单算子模式/图模式 | - | Atlas A2 训练系列产品 | 自动选择为H-D_R或者ring算法 | 
使用约束
当前版本Server内通信算法仅支持配置为“NA”。
支持的型号
Atlas 训练系列产品
Atlas A2 训练系列产品
