昇腾社区首页
中文
注册
开发者
下载

HcclCommConfig

功能说明

初始化具有特定配置的通信域时,此数据类型用于定义通信域配置信息,包含缓存区大小、确定性计算开关和通信域名称。

定义原型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const uint32_t HCCL_COMM_CONFIG_INFO_BYTES = 24;
const uint32_t COMM_NAME_MAX_LENGTH = 128;
const uint32_t BUFFER_NAME_MAX_LENGTH = 128;
const uint32_t UDI_MAX_LENGTH = 128;
const uint32_t HCCL_COMM_ALGO_MAX_LENGTH = 1600;
const uint32_t HCCL_COMM_RETRY_ENABLE_MAX_LENGTH = 50;
const uint32_t HCCL_COMM_RETRY_PARAMS_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;
    uint8_t aclGraphZeroCopyEnable;
    int32_t hcclExecTimeOut;
    char hcclAlgo[HCCL_COMM_ALGO_MAX_LENGTH];
    char hcclRetryEnable[HCCL_COMM_RETRY_ENABLE_MAX_LENGTH];
    char hcclRetryParams[HCCL_COMM_RETRY_PARAMS_MAX_LENGTH];
    char hcclBufferName[BUFFER_NAME_MAX_LENGTH];
    uint32_t hcclQos;
    uint64_t hcclSymWinMaxMemSizePerRank;
} HcclCommConfig;

参数说明

  • hcclBufferSize:共享数据的缓存区大小,取值需大于等于1,单位为MByte。
  • hcclDeterministic:确定性计算开关,支持如下型号:
    下面分别列出不同AI处理器支持的取值及含义,未列出的代表不支持配置。
    • Atlas 350 加速卡:仅支持配置为“1”或不配置,代表开启归约类通信算子的确定性计算,支持通信算子AllReduce、ReduceScatter、Reduce、ReduceScatterV。
    • Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ,支持的取值及含义如下:
      • 0(默认值):代表关闭确定性计算。
      • 1:开启归约类通信算子的确定性计算,支持通信算子AllReduce和ReduceScatter。
      • 2:单算子模式下配置为“2”时与配置为“1”的功能保持一致;静态图模式下暂不支持配置为“2”。
    • Atlas A2 训练系列产品 / Atlas A2 推理系列产品 :支持的取值及含义如下:
      • 0(默认值):代表关闭确定性计算。
      • 1:开启归约类通信算子的确定性计算,支持通信算子AllReduce、ReduceScatter、Reduce、ReduceScatterV。
      • 2:开启归约类通信算子的严格确定性计算,即保序功能(在确定性的基础上保证所有bit位的归约顺序均一致)。支持通信算子为AllReduce、ReduceScatter、ReduceScatterV,配置为该参数时需满足以下条件:
        • 仅支持多机对称分布场景,不支持非对称分布的场景。
        • 开启保序时,不支持饱和模式,仅支持INF/NaN模式。
        • 相较于确定性计算,开启保序功能后会产生一定的性能下降,建议在推理场景下使用该功能。

    在不开启确定性计算的场景下,多次执行的结果可能不同。这个差异的来源,一般是因为在算子实现中存在异步的多线程执行,会导致浮点数累加的顺序变化。当开启确定性计算后,算子在相同的硬件和输入下,多次执行将产生相同的输出。

    默认情况下,无需开启确定性计算,但当发现模型执行多次结果不同或者精度调优时,可以开启确定性计算辅助进行调试调优,但开启后,算子执行时间会变慢,导致性能下降。

  • hcclCommName:通信域名称,最大长度为128。

    指定的通信域名称需确保与其他通信域中的名称不重复;不指定时由HCCL自动生成。

  • hcclUdi:用户自定义信息,最大长度为128,默认为空。
  • hcclOpExpansionMode:配置通信算子的展开模式,为通信域粒度的配置。

    下面分别列出不同AI处理器支持的取值及含义,未列出的代表不支持配置。

    针对Atlas 350 加速卡,支持的取值及含义如下:
    • 0:默认采用自适应展开模式,会根据组网、数据量等情况自动选择合适的模式。
    • 2:通信算子在AI CPU计算单元展开。

      该配置项仅支持Broadcast、Reduce、AllReduce、Scatter、ReduceScatter、AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子。

      图模式(Ascend IR)或者图捕获(aclgraph)场景,当通信算法采用AI CPU模式时,单卡上的并发图数量不能超过6个,否则可能会因AI CPU核被占满而导致通信阻塞。

    • 3:通信算子在Device侧的Vector Core计算单元展开。当前版本不支持此配置。
      • 该配置仅支持对称组网、推理特性。
      • 该配置下,若数据量不满足在“Vector Core”上的运行要求,部分算子会自动切换到默认模式。
      • 该配置项仅支持Broadcast、Reduce、AllReduce、ReduceScatter、Scatter、AllGather、AlltoAll、AlltoAllV算子,当前仅支持单机场景。
        • 针对Broadcast、Scatter、AllGather、AlltoAll、AlltoAllV算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、int64、uint64、float16、float32、bfp16。
        • 针对Reduce、AllReduce、ReduceScatter算子,数据类型支持int8、int16、int32、float16、float32、bfp16。
      • 该配置项下,AllReduce、ReduceScatter、AllGather、AlltoAll算子支持控核能力,建议业务根据实际使用场景中计算算子与通信算子的并发情况进行Vector Core核数的配置。

        若业务编译分配的Vector Core核数无法满足算法编排的要求,HCCL会报错并提示所需要的最低Vector Core核数。

    • 4:代表通信算子在Device侧的Vector Core计算单元展开,但不会随着数据量的变化进行模式切换,始终使用Vector Core计算,如果不满足Vector Core的运行条件,会报错退出。当前版本不支持此配置。
      • 该配置仅支持对称组网、推理特性。
      • 该配置项支持的算子及约束限制参见配置“3”。
    • 5:通信算子在CCU(Collective Communication Unit,集合通信加速单元)展开,使用MS(Memory Slice)模式。当前版本不支持此配置。

      MS模式为与多个远端通信时,使用CCU片上Memory Slice作为中转,用于节省内存读写带宽,Memory Slice的特点是大小较小,但速度较快。当CCU资源不足时,系统会自动切换为“2:AI CPU模式”。

    • 6:通信算子在CCU展开,使用调度模式。

      调度模式指使用CCU作为调度器,向UB引擎调度UB WQE任务。调度模式下不使用CCU的片上MS,直接在两个rank间进行HBM到HBM的数据传输。

      针对单机通信场景的AllReduce、ReduceScatter、Reduce算子,当数据量超过一定值时,为防止性能下降,系统会自动切换为“2:AI_CPU模式”(该阈值并非固定,会根据算子运行模式及网络规模等因素有所调整)。

      当CCU资源不足时,系统会自动切换为“2:AI CPU模式”。

    针对 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ,支持的取值及含义如下:
    • 0:使用默认算子展开模式, Atlas A3 训练系列产品 / Atlas A3 推理系列产品 默认使用Device侧的AI CPU计算单元。
    • 2:通信算子在AI CPU计算单元展开。
    • 3:通信算子在Device侧的Vector Core计算单元展开。
      • 该配置仅支持对称组网、推理特性。
      • 该配置下,若数据量不满足在“Vector Core”上的运行要求,部分算子会自动切换到默认模式。
      • 该配置项仅支持Broadcast、AllReduce、ReduceScatter、AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子。
        • 针对Broadcast算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持超节点内的单机通信,仅支持单算子模式,不支持多机和跨超节点间通信
        • 针对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,仅支持超节点内的单机/多机通信,不支持跨超节点间通信。
      • 针对Broadcast、AllReduce、ReduceScatter、AllGather、AlltoAll(单机通信场景)算子,当数据量超过一定值时,为防止性能下降,系统会自动切换为“2:AI CPU模式”(该阈值并非固定,会根据算子运行模式、是否启动确定性计算及网络规模等因素有所调整);针对AlltoAllV、AlltoAllVC、AlltoAll(多机通信场景)算子,系统不会自动切换为“2:AI CPU”模式,为避免性能劣化,当任意两个rank之间的最大通信数据量不超过1MB时,建议配置为“3:AIV模式”,否则请采用“2:AI CPU模式”。
      • 该配置项下,集合通信支持控核能力,建议业务根据实际使用场景中计算算子与通信算子的并发情况进行Vector Core核数的配置。
        • 针对Broadcast算子,建议至少分配ranksize个vector核。
        • 针对AllReduce、ReduceScatter、AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子,建议最少分配max(2, ranksize/20 + 1)个vector核。

        若业务编译分配的Vector Core核数无法满足算法编排的要求,HCCL会报错并提示所需要的最低Vector Core核数。

    • 4:代表通信算子在Device侧的Vector Core计算单元展开,但不会随着数据量的变化进行模式切换,始终使用Vector Core计算,如果不满足Vector Core的运行条件,会报错退出。
      • 该配置仅支持对称组网、推理特性。
      • 该配置项支持AllReduce、ReduceScatter、AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子。相关算子支持的数据类型及场景限制参见配置“3”。
      • 该配置项下,集合通信支持控核能力,不同算子的Vector Core核数要求与配置“3”相同。
    针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ,支持的取值及含义如下:
    • 0:使用默认算子展开模式, Atlas A2 训练系列产品 / Atlas A2 推理系列产品 默认使用Host侧CPU。
    • 1:通信算子在Host侧CPU展开。
    • 2:通信算子在AI CPU计算单元展开。

      该配置项仅支持AllGather、AlltoAll、AlltoAllV、AlltoAllVC算子。

      图模式(Ascend IR)或者图捕获(aclgraph)场景,当通信算法采用AI CPU模式时,单卡上的并发图数量不能超过6个,否则可能会因AI CPU核被占满而导致通信阻塞。

    • 3:通信算子在Device侧的Vector Core计算单元展开。
      • 该配置仅支持对称组网、推理特性。
      • 该配置下,若数据量不满足在“Vector Core”上的运行要求,部分算子会自动切换到默认模式。
      • 该配置项仅支持Broadcast、AllReduce、AlltoAll、AlltoAllV、AlltoAllVC、AllGather、ReduceScatter、AllGatherV、ReduceScatterV算子。
        • 针对Broadcast算子,数据类型支持int8、uint8、int16、uint16、int32、uint32、float16、float32、bfp16,仅支持单机场景8卡以内的单算子模式。
        • 针对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核数的配置。
        • 针对AllReduce、ReduceScatter、ReduceScatterV算子,建议最少分配24个核。
        • 针对Broadcast、AlltoAll、AlltoAllV、AlltoAllVC、AllGather、AllGatherV算子,建议最少分配16个核。

        若业务编译分配的Vector Core核数无法满足算法编排的要求,HCCL会报错并提示所需要的最低Vector Core核数。

    • 4:代表通信算子在Device侧的Vector Core计算单元展开,但不会随着数据量的变化进行模式切换,始终使用Vector Core计算,如果不满足Vector Core的运行条件,会报错退出。
      • 该配置仅支持对称组网、推理特性。
      • 该配置项仅支持AllReduce、AlltoAll、AlltoAllV、AlltoAllVC、AllGather、ReduceScatter算子。相关算子支持的数据类型及场景限制参见配置“3”。
      • 该配置项下,集合通信支持控核能力,不同算子的Vector Core核数要求与配置“3”相同。
    • 多通信域并行场景下,不支持多个通信域同时配置为“3”或“4”(AIV Only模式)。
    • 针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ,通信算子展开模式设置为“3”或“4”时,同时设置hcclDeterministic配置为“1”(开启确定性计算),在单机的单算子和图模式场景下,当数据量≤8MB时,仅AllReduce和ReduceScatter算子的确定性计算生效,其他场景和算子则以hcclDeterministic配置为准。
    • 针对 Atlas A2 训练系列产品 / 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框架生成。
  • aclGraphZeroCopyEnable:该参数仅在图捕获模式(aclgraph)下对Reduce类算子生效,用于控制其是否开启零拷贝功能。
    • 0(默认值):关闭零拷贝功能。
    • 1:开启零拷贝功能。
  • hcclExecTimeOut:不同设备进程在分布式训练或推理过程中存在卡间执行任务不一致的场景(如仅特定进程会保存checkpoint数据),通过该参数可控制设备间执行时同步等待的时间,在该配置时间内各设备进程等待其他设备执行通信同步。单位为s,取值范围和针对不同产品类型的使用约束请参见环境变量HCCL_EXEC_TIMEOUT

    注意事项:

    0xFFFFFFFF被用作优先级判断标识,当配置为0xFFFFFFFF时,此通信域配置无效,会按照优先级取环境变量配置或默认值1836。

  • hcclAlgo:用于配置集合通信Server间通信算法以及超节点间通信算法,支持全局配置算法类型与按算子配置算法类型两种配置方式。需注意,HCCL提供自适应算法选择功能,默认会根据产品形态、数据量和Server个数选择合适的算法,一般情况下用户无需手工指定。若通过此环境变量指定了Server间通信算法,则自适应算法选择功能不再生效。
    配置方式的参数信息及针对不同产品类型支持的算法类型请参见环境变量HCCL_ALGO,配置方式如下:
    • 全局配置算法类型:hcclAlgo = "level0:NA;level1:<algo>;level2:<algo>",示例:
      hcclAlgo = "level0:NA;level1:H-D_R"
    • 按算子配置算法类型:hcclAlgo = "<op0>=level0:NA;level1:<algo0>;level2:<algo1>/<op1>=level0:NA;level1:<algo3>;level2:<algo4>",示例:
      # AllReduce算子使用Ring算法,AllGather算子使用RHD算法,其他算子根据产品形态、节点数以及数据量自动选择通信算法。
      hcclAlgo = 
      "allreduce=level0:NA;level1:ring/allgather=level0:NA;level1:H-D_R"
  • hcclRetryEnable:用于配置是否开启HCCL算子的重执行特性。重执行是指当通信算子执行报 SDMA 或者RDMA CQE类型的错误时,HCCL会尝试重新执行此通信算子。仅支持在 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 上使用。

    通过此参数,开发者可以在Server间、超节点间两个物理层级的通信域中配置是否开启重执行特性,每个层级支持配置两种状态:开启或关闭,使用约束请参见环境变量HCCL_OP_RETRY_ENABLE,配置方式为:hcclRetryEnable = "L1:1, L2:0",参数取值如下。

    • L1代表通信域的物理范围为Server间通信域,取值为0表示通信域内Server间通信task不开启重执行,取值为1表示通信域内Server间通信task开启重执行,默认值为0。
    • L2代表通信域的物理范围为超节点间通信域,取值为0表示通信域内超节点间通信task不开启重执行,取值为1表示通信域内超节点间通信task开启重执行,默认值为0。
  • hcclRetryParams:只有当开发者通过参数hcclRetryEnable开启了HCCL的算子重执行特性时,可通过本参数配置第一次重执行的等待时间、最大重执行的次数以及两次重执行的间隔时间。仅支持在 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 上使用。
    使用约束请参见环境变量HCCL_OP_RETRY_PARAMS。配置方式为hcclRetryParams = "MaxCnt:3, HoldTime:5000, IntervalTime:1000",参数取值如下:
    • MaxCnt:最大重传次数,uint32类型,取值范围为[1,10],默认值为1,单位次。
    • HoldTime:从检测到通信算子执行失败到开始第一次重新执行的等待时间,uint32类型,取值范围[0,60000],默认值为5000,单位ms。
    • IntervalTime:同一个通信算子两次重执行的间隔时间,uint32类型,取值范围[0,60000],默认值为1000,单位ms。
  • hcclBufferName:CCLBuffer名称,多通信域使用同一Buffer名称,共享同一片CCLBuffer,不指定时默认不共享,最大长度为128。需注意,传入同一CCLBuffer名称的通信域,需将算子下发到同一条Stream上。
  • hcclQos:用于配置超平面QoS的级别,取值范围:0~7,默认值6。
  • hcclSymWinMaxMemSizePerRank:为当前通信域中每个rank预留的对称内存大小,单位GB,取值范围:[1, 当前环境中允许分配的物理内存最大值],默认值16。该参数当前仅支持 Atlas A3 训练系列产品 / Atlas A3 推理系列产品

配置优先级说明

表1 配置优先级说明

配置项

配置优先级

hcclBufferSize

配置项hcclBufferSize(通信域粒度配置)> 环境变量HCCL_BUFFSIZE(全局配置)> 默认值200。

hcclDeterministic

配置项hcclDeterministic(通信域粒度配置)> 环境变量HCCL_DETERMINISTIC(全局配置)> 默认值0(关闭确定性计算)。

hcclOpExpansionMode

配置项hcclOpExpansionMode(通信域粒度配置)> 环境变量HCCL_OP_EXPANSION_MODE(全局配置)> 默认值0。

hcclRdmaTrafficClass

配置项hcclRdmaTrafficClass(通信域粒度配置) > 环境变量HCCL_RDMA_TC(全局配置)> 默认值132。

hcclRdmaServiceLevel

配置项hcclRdmaServiceLevel(通信域粒度配置)> 环境变量HCCL_RDMA_SL(全局配置)> 默认值4。

hcclExecTimeOut

配置项hcclExecTimeOut(通信域粒度配置)> 环境变量HCCL_EXEC_TIMEOUT(全局配置)> 默认值1836。

hcclAlgo

配置项hcclAlgo(通信域粒度配置)> 环境变量HCCL_ALGO(全局配置)> 默认配置。

hcclRetryEnable

配置项hcclRetryEnable(通信域粒度配置)> 环境变量HCCL_OP_RETRY_ENABLE(全局配置)> 默认配置。

hcclRetryParams

配置项hcclRetryParams(通信域粒度配置)> 环境变量HCCL_OP_RETRY_PARAMS(全局配置)> 默认配置。