HcclCommConfig
功能说明
初始化具有特定配置的通信域时,此数据类型用于定义通信域配置信息,包含缓存区大小、确定性计算开关和通信域名称。
定义原型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const uint32_t HCCL_COMM_CONFIG_INFO_BYTES = 24; const uint32_t COMM_NAME_MAX_LENGTH = 128; const uint32_t UDI_MAX_LENGTH = 128; typedef struct HcclCommConfigDef { char reserved[HCCL_COMM_CONFIG_INFO_BYTES]; /* 保留字段,不可修改 */ uint32_t hcclBufferSize; uint32_t hcclDeterministic; char hcclCommName[COMM_NAME_MAX_LENGTH]; char hcclUdi[UDI_MAX_LENGTH]; uint32_t hcclOpExpansionMode; uint32_t hcclRdmaTrafficClass; uint32_t hcclRdmaServiceLevel; uint32_t hcclWorldRankID; uint64_t hcclJobID; } HcclCommConfig; |
参数说明
- hcclBufferSize:共享数据的缓存区大小,取值需大于等于1,单位为MByte。
- hcclDeterministic:确定性计算开关,取值及其含义可参见表1。
表1 hcclDeterministic参数取值说明 取值
含义
0
默认值,代表关闭确定性计算。
1
开启归约类通信算子的确定性计算。- 针对
Atlas A2 训练系列产品 ,支持通信算子AllReduce、ReduceScatter、Reduce、ReduceScatterV。 - 针对
Atlas A3 训练系列产品 /Atlas A3 推理系列产品 ,支持通信算子AllReduce和ReduceScatter。
2
开启归约类通信算子的严格确定性计算,即保序功能(在确定性的基础上保证所有bit位的归约顺序均一致),配置为该参数时需满足以下条件:- 仅支持
Atlas A2 训练系列产品 ,且仅支持多机对称分布场景,不支持非对称分布(即卡数非对称)的场景。 - 支持通信算子为AllReduce、ReduceScatter、ReduceScatterV。
- 开启保序时,不支持饱和模式,仅支持INF/NaN模式。
- 相较于确定性计算,开启保序功能后会产生一定的性能下降,建议在推理场景下使用该功能。
在不开启确定性计算的场景下,多次执行的结果可能不同。这个差异的来源,一般是因为在算子实现中存在异步的多线程执行,会导致浮点数累加的顺序变化。当开启确定性计算后,算子在相同的硬件和输入下,多次执行将产生相同的输出。
默认情况下,无需开启确定性计算或保序功能,但当发现模型执行多次结果不同或者精度调优时,可以开启确定性计算或保序功能辅助进行调试调优,但开启后,算子执行时间会变慢,导致性能下降。
- 针对
- hcclCommName:通信域名称,最大长度为128。
指定的通信域名称需确保与其他通信域中的名称不重复;不指定时由HCCL自动生成。
- hcclUdi:用户自定义信息,最大长度为128,默认为空。
- hcclOpExpansionMode:配置通信算法的编排展开位置,该参数为通信域粒度的配置,仅支持
Atlas A2 训练系列产品 与Atlas A3 训练系列产品 /Atlas A3 推理系列产品 ,取值及其含义可参见表2。表2 hcclOpExpansionMode参数取值说明 取值
含义
0
代表使用默认算法编排展开位置。
1
代表通信算法的编排展开位置为Host侧CPU。
针对
Atlas A3 训练系列产品 /Atlas A3 推理系列产品 ,不建议使用此配置,否则存在不可预期行为。2
代表通信算法的编排展开位置在Device侧的AI CPU计算单元。当前版本不支持此配置。
3
代表通信算法的编排展开位置在Device侧的Vector Core计算单元。仅支持推理特性。此配置下,若数据量不满足在“Vector Core”上的运行要求,部分算子会自动切换到默认模式。- 针对
Atlas A3 训练系列产品 /Atlas A3 推理系列产品 :- 该配置项仅支持Broadcast、AllReduce、ReduceScatter、AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子。
- 针对Broadcast算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持单机场景8卡以内的单算子模式。
- 针对AllReduce算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min,仅支持单机场景。
- 针对ReduceScatter算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min,仅支持超节点内的单机/多机通信,不支持跨超节点间通信。
- 针对AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持超节点内的单机/多机通信,不支持跨超节点间通信。
- 针对AllReduce、ReduceScatter、AllGather、AlltoAll(单机通信场景)算子,当数据量超过一定值时,为防止性能下降,系统会自动切换为“2:AI CPU模式”(该阈值并非固定,会根据算子运行模式、是否启动确定性计算及网络规模等因素有所调整);针对AlltoAllV、AlltoAllVC、AlltoAll(多机通信场景)算子,系统不会自动切换为“2:AI CPU”模式,为避免性能劣化,当任意两个rank之间的最大通信数据量不超过1MB时,建议配置为“3:AIV模式”,否则请采用“2:AI CPU模式”。
- 该配置项对业务编译时分配的Vector Core核数有最低数量要求,若业务编译分配的Vector Core核数无法满足算法编排的要求,HCCL会报错并提示所需要的最低Vector Core核数。
# 报错示例1:算法编排所需的最少Vector Core数量为8 [CalBlockDim]aivcore[3] is less than need[8]. # 报错示例2:算法编排所需的最少Vector Core数量为8 [CalBlockDim]aivcore[3] is less than ranksize[8]. # 报错示例3:算法编排所需的最少Vector Core数量为6 [CalBlockDim]aivCore[3] is invalid, at least need 6.
不同框架网络编译时分配Vector Core数量的方法不同,开发者可在对应框架的产品文档中搜索关键词“aicore_num”查询对应的配置方法。
- 该配置项仅支持Broadcast、AllReduce、ReduceScatter、AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子。
- 针对
Atlas A2 训练系列产品 :- 该配置项仅支持Broadcast、AllReduce、AlltoAll、AlltoAllV、AlltoAllVC、AllGather、ReduceScatter、AllGatherV、ReduceScatterV算子。
- 针对Broadcast算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持单机场景的单算子模式。
- 针对AllReduce算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min。
- 针对AlltoAll、AlltoAllV、AlltoAllVC算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16。针对AlltoAllV、AlltoAllVC算子,仅支持单机场景;针对AlltoAll算子的图模式运行方式,仅支持单机场景。
- 针对AllGather算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16。针对该算子的图模式运行方式,仅支持单机场景。
- 针对ReduceScatter算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min。针对该算子的图模式运行方式,仅支持单机场景。
- 针对AllGatherV算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持单算子模式。
- 针对ReduceScatterV算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min。
- 该配置项对业务编译时分配的Vector Core核数有最低数量要求,若业务编译分配的Vector Core核数无法满足算法编排的要求,HCCL会报错并提示所需要的最低Vector Core核数。
# 报错示例:算法编排所需的最少Vector Core数量为8 [CalBlockDim]aivcore[3] is less than need[8].
不同框架网络编译时分配Vector Core数量的方法不同,开发者可在对应框架的产品文档中搜索关键词“aicore_num”查询对应的配置方法。
- 该配置项仅支持Broadcast、AllReduce、AlltoAll、AlltoAllV、AlltoAllVC、AllGather、ReduceScatter、AllGatherV、ReduceScatterV算子。
4
代表通信算法的编排展开位置在Device侧的Vector Core计算单元。仅支持推理特性。此配置下,不会随着数据量的变化进行模式切换,始终使用Vector Core计算,如果不满足Vector Core的运行条件,会报错退出。- 该配置项仅支持AllReduce、ReduceScatter、AllGather、AlltoAllV、AlltoAll、AlltoAllVC算子。
- 针对
Atlas A3 训练系列产品 /Atlas A3 推理系列产品 :- 针对Broadcast算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持单机场景8卡以内的单算子模式。
- 针对AllReduce算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min,仅支持单机场景。
- 针对ReduceScatter算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min,仅支持超节点内的单机/多机通信,不支持跨超节点间通信。
- 针对AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持超节点内的单机/多机通信,不支持跨超节点间通信。
- 针对
Atlas A2 训练系列产品 :- 针对AllReduce算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min。
- 针对ReduceScatter算子,数据类型支持int8、int16、int32、float16、float32、bfp16,reduce的操作类型仅支持sum、max、min。针对该算子的图模式运行方式,仅支持单机场景。
- 针对AllGather算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16。针对该算子的图模式运行方式,仅支持单机场景。
- 针对AlltoAll、AlltoAllV、AlltoAllVC算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16。针对AlltoAllV、AlltoAllVC算子,仅支持单机场景;针对AlltoAll算子的图模式运行方式,仅支持单机场景。
- 多通信域并行场景下,不支持多个通信域同时配置为“3”或“4”(AIV Only模式)。
- 针对
Atlas A2 训练系列产品 ,算法编排展开位置设置为“3”或“4”时,同时设置hcclDeterministic配置为“1”(开启确定性计算),在单机单算子场景下,当数据量≤8MB时,仅AllReduce和ReduceScatter算子的确定性计算生效,其他场景和算子则以hcclDeterministic配置为准。 - 针对
Atlas A2 训练系列产品 ,若hcclDeterministic配置为“2”(开启保序功能),hcclOpExpansionMode不支持配置为“3”或“4”,以保序功能为准。 - 针对
Atlas A3 训练系列产品 /Atlas A3 推理系列产品 ,算法编排展开位置设置为“3”或“4”时,若同时设置hcclDeterministic为“1”(开启确定性计算)或“2”(开启保序功能),当数据量<8MB时,仅AllReduce和ReduceScatter算子的确定性计算生效,其他场景和算子则以hcclDeterministic配置为准。
- 针对
- hcclRdmaTrafficClass:配置RDMA网卡的traffic class,取值范围为[0,255],需要配置为4的整数倍。
在RoCE V2协议中,该值对应IP报文头中ToS(Type of Service)域段。共8个bit,其中,bit[0,1]固定为0,bit[2,7]为DSCP,因此,该值除以4即为DSCP的值。
注意事项:
0xFFFFFFFF被用作优先级判断标识,当配置为0xFFFFFFFF时,此通信域配置无效,会按照优先级取环境变量配置或默认值132。
- hcclRdmaServiceLevel:配置RDMA网卡的service level,取值需要和网卡配置的PFC优先级保持一致,若配置不一致可能导致性能劣化。
需要配置为无符号整数,取值范围[0,7]。
注意事项:
0xFFFFFFFF被用作优先级判断标识,当配置为0xFFFFFFFF时,此通信域配置无效,会按照优先级取环境变量配置或默认值4。
- hcclWorldRankID:NSLB-DP(Network Scale Load Balance-Data Plane:数据面网络级负载均衡)场景使用字段,代表当前进程在AI框架(如Pytorch)中的全局rank ID。
- hcclJobID:NSLB-DP场景使用字段,代表当前分布式业务的唯一标识,由AI框架生成。