ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

HCCL_DETERMINISTIC 环境变量详解:归约类算子的确定性计算与保序机制

HCCL_DETERMINISTIC 环境变量详解:归约类算子的确定性计算与保序机制 HCCL_DETERMINISTIC 环境变量详解归约类算子的确定性计算与保序机制【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl导读HCCL_DETERMINISTIC 是 CANN / hccl华为集合通信库Huawei Collective Communication Library中用于控制归约类通信算子AllReduce、ReduceScatter、ReduceScatterV、Reduce确定性计算与归约保序的关键环境变量。当模型多次执行结果不一致、需要精度调优或推理场景要求严格可复现输出时可通过该变量开启确定性计算辅助调试本文将从功能语义、取值与产品差异、配置示例、底层源码解析到使用约束完整讲解这一机制使读者能够按需、正确地启用或关闭确定性计算并理解其性能代价与优先级关系。功能描述此环境变量用于配置是否开启归约类通信算子的确定性计算或保序功能。其中归约类通信算子包括 AllReduce、ReduceScatter、ReduceScatterV、Reduce归约保序是指严格的确定性计算在确定性的基础上保证归约顺序一致。开启归约算子的确定性计算或保序功能后算子在相同的硬件和输入下多次执行将产生相同的输出。在正常训练场景下集合通信库为了提高吞吐会在不同执行中采取不同的归约顺序例如多条通信链路上的到达顺序存在不确定性这会导致浮点累加结果出现细微差异最终表现为模型多次执行结果不同。因此一般情况下无需开启确定性计算当出现此类问题或者进行精度调优时可通过此环境变量开启确定性计算进行辅助调试调优。但需要明确的是开启后算子执行时间会变慢导致性能下降因此不建议在性能敏感的生产训练中长期开启。取值说明HCCL_DETERMINISTIC 支持三种取值取值含义说明false默认值关闭确定性计算各产品线具体行为存在差异见下文true开启归约类通信算子的确定性计算保证相同硬件与输入下多次执行输出一致但不保证归约顺序一致strict开启归约类通信算子的严格确定性计算即保序功能在确定性的基础上保证所有 bit 位的归约顺序均一致对硬件、通信规模、展开模式等有额外要求从源码实现看这一三级语义被映射为枚举DeterministicEnableLevel定义于 src/common/alg_env_config.hDETERMINISTIC_DISABLE 0不支持确定性DETERMINISTIC_ENABLE支持确定性不支持规约保序DETERMINISTIC_STRICT支持确定性以及规约保序。解析函数ParseDeterministic()实现于 src/common/alg_env_config.cc会把环境变量统一转换为大写后做三值校验非法取值会触发HCCL_E_PARA错误并上报EI0001环境变量错误码环境变量未设置GetEnv返回EmptyString时按默认值false即DETERMINISTIC_DISABLE处理取值为STRICT时先调用HcclGetDeviceType校验设备类型是否支持保序仅 A2/A3/A5 相关设备校验通过后置为DETERMINISTIC_STRICT取值为TRUE时置为DETERMINISTIC_ENABLE其余合法情况置为DETERMINISTIC_DISABLE。各产品线的取值行为差异false关闭确定性计算Ascend 950PR/950DT所有归约类通信算子强制为确定性计算不受此配置影响。Atlas A3 训练/推理系列产品若归约类通信算子展开模式为 AI CPU所有归约类算子强制为确定性计算不受此配置影响若归约类通信算子展开模式为 Vector Core仅 AllReduce 和 ReduceScatter 涉及非确定性计算默认关闭。Atlas A2 训练/推理系列产品所有归约类算子默认关闭确定性计算。true开启确定性计算Ascend 950PR/950DT所有归约类算子强制为确定性计算且不受此配置影响。Atlas A3 训练/推理系列产品若归约类通信算子展开模式为 AI CPU所有归约类算子强制为确定性计算不受此配置影响仅在归约类通信算子展开模式为 Vector Core 时对AllReduce 和 ReduceScatter生效。Atlas A2 训练/推理系列产品支持AllReduce、ReduceScatter、ReduceScatterV、Reduce算子。strict开启保序功能配置为strict时需满足以下通用条件仅支持 INF/NaN 模式不支持饱和模式相较于确定性计算开启保序功能后会产生一定的性能下降建议在推理场景下使用该功能。不同产品的附加约束如下Ascend 950PR/Ascend 950DT支持归约类通信算子 AllReduce、ReduceScatter通信规模要求 rank size ≥ 3仅支持归约类通信算子展开模式为 AI_CPU其他展开模式CCU_MS、CCU_SCHED、AIV配置保序功能会回退到 AI_CPU使能保序。Atlas A3 训练系列产品/Atlas A3 推理系列产品仅支持多机对称分布场景不支持非对称分布即卡数非对称的场景支持归约类通信算子 AllReduce、ReduceScatter支持数据类型 float16、float32、bfp16归约操作仅支持 sum通信规模要求 rank size ≥ 3若超节点内存在多个 AI Server仅支持 AI Server 间使用 HCCS 链路进行 SDMA 通信的场景不支持使用 RoCE 进行 RDMA 通信的场景即不支持设置环境变量 HCCL_INTER_HCCS_DISABLE 为 TRUE。Atlas A2 训练系列产品/Atlas A2 推理系列产品仅支持多机对称分布场景不支持非对称分布即卡数非对称的场景支持归约类通信算子 AllReduce 和 ReduceScatter、ReduceScatterV。配置示例开启确定性计算常规调试调优场景export HCCL_DETERMINISTICtrue开启严格确定性计算保序推理等对可复现性要求极高的场景export HCCL_DETERMINISTICstrict关闭确定性计算恢复默认行为export HCCL_DETERMINISTICfalse环境变量解析发生在 HCCL 初始化阶段。从 src/common/alg_env_config.cc 的InitEnvVarParam流程可以看到ParseDeterministic()与HCCL_OP_EXPANSION_MODE等其他环境变量的解析在同一初始化流程内完成解析失败时会通过RPT_ENV_ERR上报EI0001参数错误提示信息为期望取值should be true ,false or strict。因此在启动训练进程之前通过 shell 环境或启动脚本设置该变量即可生效无需修改任何源码。与 HCCL_OP_EXPANSION_MODE 的优先级关系若通过本环境变量开启了算子确定性计算同时又设置了算子的展开模式为 AIV可参见 HCCL_OP_EXPANSION_MODE则确定性计算的优先级更高某些场景下 AIV 展开可能不生效。这一优先级在源码中也有体现算法选择器在执行过程中会把确定性等级纳入选择决策与日志记录。例如 src/ops/op_common/selector/selector_engine.cc 中的LogSelectedAlgo会通过GetExternalInputHcclDeterministic()将deterministic[%u]记录进 HCCL_ALG 配置日志便于定位实际生效的算法路径。使用约束若调用 HCCL C 接口初始化具有特定配置的通信域时通过HcclCommConfig的hcclDeterministic参数配置了确定性计算开关则以通信域粒度的配置优先即 C 接口配置优先于环境变量。从实现结构看g_algEnvConfig.hcclDeterministic作为全局算法环境配置项保存该开关见 src/common/alg_env_config.h并对外提供GetExternalInputHcclDeterministic()访问接口见 src/common/alg_env_config.h。上层算子在运行期可通过该接口读取确定性等级进而选择对应的保序/确定性算法实现。保序机制的源码级实现纵深剖析保序算法参数约束从源码结构看规约保序功能由order_preserved_common.hsrc/common/order_preserved_common.h统一管理公共约束可以推断其核心设计如下严格保序模式要求 rank 数超过下限MIN_STRICT_RANK_NUM_ORDER_PRESERVED 2即rankSize 2rank size ≥ 3时才走严格保序路径保序算子分组 all2all 算法的 rank 数上限为MAX_RANK_NUM_FOR_ORDER_PRESERVED 8超过该值则使用分组 all2all NHR 算法保序算子总线程数上限为ORDER_PRESERVED_MAX_THREADS 32实际线程数按min(rankSize, ORDER_PRESERVED_MAX_THREADS)计算解耦线程数与 rank 数的关系。严格保序的触发条件IsNeedStrictModeForOrderPreserved()src/common/order_preserved_common.h集中判定是否启用严格保序模式需要同时满足确定性等级为DETERMINISTIC_STRICT即HCCL_DETERMINISTICstrict数据类型为 FP16、FP32、BFP16 或 FP64归约操作类型为 sum 或 prodrank size 大于MIN_STRICT_RANK_NUM_ORDER_PRESERVED。这与文档中rank size ≥ 3的约束在语义上是一致的。保序算法的落地实现在 reduce_scatter 算子侧保序功能有独立的模板实现文件src/ops/reduce_scatter/algorithm/template/aicpu/ins_temp_reduce_scatter_order_preserved_group.cc保序场景的 reduce_scatter 分组模板实现src/ops/reduce_scatter/algorithm/template/aicpu/ins_temp_reduce_scatter_order_preserved_level1.cc保序场景的 reduce_scatter level1 模板实现。这些实现被编译进 AI CPUaicpu模板目录印证了文档中保序功能依赖 AI_CPU 展开模式、其他模式会回退到 AI_CPU的约束。产品支持情况产品支持情况Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持Atlas 训练系列产品不支持Atlas 推理系列产品不支持注意Atlas 训练系列产品与 Atlas 推理系列产品对应 A1 等早期芯片平台不支持该环境变量配置后不生效。总结与建议何时开启模型多次执行结果不同或精度调优需要可复现输出时可设置HCCL_DETERMINISTICtrue辅助定位推理场景对输出确定性要求高时可设置HCCL_DETERMINISTICstrict开启保序。何时不开性能敏感的训练场景默认保持false避免确定性计算带来的额外开销。优先级HcclCommConfig.hcclDeterministic通信域级配置 环境变量环境变量确定性配置 AIV 展开模式。平台差异950 与 A3AI CPU 展开默认即强制确定性A2 需显式开启A3/A2 的 strict 模式仅支持多机对称分布且对数据类型仅 sum有严格限制配置前请先核对产品支持情况与通信规模。【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表