ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

HCCL_ALGO 环境变量完全指南:昇腾集合通信库 Server 间与超节点间通信算法配置

HCCL_ALGO 环境变量完全指南:昇腾集合通信库 Server 间与超节点间通信算法配置 HCCL_ALGO 环境变量完全指南昇腾集合通信库 Server 间与超节点间通信算法配置【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl导读HCCL_ALGO是 CANN 昇腾集合通信库HCCL中用于配置 Server 间level1与超节点间level2通信算法的核心环境变量。本指南基于 HCCL_ALGO.md 展开结合 HCCL 开源仓库源码完整讲解该变量的语法格式、每种通信算法的原理与适用场景、全局配置与按算子配置两种方式、以及环境变量在源码中的解析与生效机制。读完本文你将能够针对不同产品形态、集群规模和通信数据量为 AllReduce、AllGather、ReduceScatter 等集合通信算子手工指定最优通信算法并在确定性计算、保序等约束下正确规避配置陷阱。功能概述什么时候需要配置 HCCL_ALGOHCCL 内置了自适应算法选择机制默认会根据产品形态、数据量和 Server 个数自动选择合适的通信算法一般情况下用户无需手工指定。但存在两类典型场景需要开发者显式配置HCCL_ALGO网络存在拥塞或拓扑特殊默认算法在特定网络环境下表现不佳需要切换为 ring、NHR 等对拥塞更鲁棒的算法通信数据量极大或极小的极端场景例如大流量下希望启用 pipeline 算法并发使用 Server 内与 Server 间链路。需要注意的关键语义一旦通过HCCL_ALGO指定了 Server 间或超节点间通信算法HCCL 的自适应算法选择功能即不再生效被指定的层级将完全遵循用户的配置。同时在某些通信算子中当使用特定类型的 AI 处理器且数据量较小时通信算法仍会由 HCCL 自适应选择不受此环境变量的控制。HCCL 支持配置的算法为全量通信算法但不同产品下支持的 Server 间通信算法与超节点间通信算法各不相同配置前请务必核对两份支持度列表Server间通信算法支持度列表 与 超节点间通信算法支持度列表。配置语法三级 level 模型HCCL_ALGO的取值基于「层级level 算法algo」的结构完整语法为export HCCL_ALGOlevel0:algo;level1:algo;level2:algo各层级的含义如下层级含义当前支持配置level0Server 内通信算法仅支持NAlevel1Server 间通信算法ring、H-D_R、NHR、NHR_V1、NB、AHC、pipeline、pairwiselevel2超节点间通信算法ring、H-D_R、NHR、NB、pipelinelevel0Server 内通信算法仅 NAlevel0 代表 Server 内节点内通信算法当前版本仅支持配置为NA即不干预 Server 内的算法选择由 HCCL 内部根据拓扑自动确定如基于 HCCS 链路的 Whole Ring、Mesh 等拓扑参见 alg_type.h 中的AlgTypeLevel0枚举。level1Server 间通信算法level1 代表 Server 间的通信算法是HCCL_ALGO配置中最核心、使用最频繁的层级支持以下取值ring基于环结构的通信算法。通信步数多线性复杂度时延相对较高但通信关系简单受网络拥塞影响较小。适合通信域内 Server 个数较少、通信数据量较小、网络存在明显拥塞、且 pipeline 算法不适用的场景。H-D_R递归二分和倍增算法Recursive Halving-DoublingRHD。通信步数少对数复杂度时延相对较低但在非 2 的整数次幂节点规模下会引入额外的通信量。适合通信域内 Server 个数是 2 的整数次幂且 pipeline 算法不适用的场景或 Server 个数不是 2 的整数次幂但通信数据量较小的场景。NHR非均衡的层次环算法Nonuniform Hierarchical Ring。通信步数少对数复杂度时延相对较低。适合通信域内 Server 个数较多且 pipeline 算法不适用的场景。注意Ascend 950PR/Ascend 950DT当前版本 950PR/950DT 产品仅支持配置 NHR 算法。NHR_V1对应历史版本的 NHR 算法通信步数少对数复杂度时延相对较低适合通信域内 Server 数为非 2 的整数次幂且 pipeline 算法不适用的场景。NHR_V1 算法理论性能低于新版 NHR 算法该配置项未来会逐步停用建议开发者使用 NHR 算法。NB非均匀的数据块通信算法Nonuniform Bruck。通信步数少对数复杂度时延相对较低。适合通信域内 Server 个数较多且 pipeline 算法不适用的场景。AHC层次化集合通信算法Asymmetric Hierarchical Concatenate。适用于通信域内 NPU 分布存在多个层次、多个层次间 NPU 对称或者非对称分布即卡数非对称的场景当通信域内层次间存在带宽收敛时相对收益会更好。联动语义当 level1 配置为AHC时level2超节点间通信算法将自动采用AHC算法无需另行配置即使 level2 设置了其他算法这些设置也不会生效。pipeline流水线并行算法可并发使用 Server 内与 Server 间的链路适合通信数据量较大且通信域内每机包含多卡的场景。pairwise逐对通信算法仅用于 AlltoAll、AlltoAllV 与 AlltoAllVC 算子。通信步数较多线性复杂度时延相对较高且需要额外申请内存内存大小与数据量成正比但可以避免网络中出现「一打多」现象。适合通信数据量较大、需要规避网络一打多的场景。不设置 level1 时的默认行为按产品区分Ascend 950PR/Ascend 950DT默认使用 NHR 算法Atlas A3 训练系列产品/Atlas A3 推理系列产品内部根据产品形态、节点数以及数据量自动选择算法Atlas A2 训练系列产品/Atlas A2 推理系列产品内部根据产品形态、节点数以及数据量自动选择算法Atlas 训练系列产品当通信域内 Server 的个数为非 2 的整数次幂时默认使用 ring 算法其他场景默认使用 H-D_R 算法。level2超节点间通信算法level2 代表超节点SuperPod间的通信算法支持取值如下ring通信步数多线性复杂度时延相对较高但通信关系简单受网络拥塞影响较小。适合通信域内超节点个数较少且不是 2 的整数次幂的场景。H-D_R通信步数少对数复杂度时延相对较低但在非 2 的整数次幂节点规模下会引入额外通信量。适合通信域内超节点个数是 2 的整数次幂的场景或超节点个数不是 2 的整数次幂但通信数据量较小的场景。NHR通信步数少对数复杂度时延相对较低。适合通信域内超节点个数较多的场景。NB通信步数少对数复杂度时延相对较低。适合通信域内超节点个数较多的场景。pipeline可并发使用超节点内与超节点间的链路适合通信数据量较大且通信域内每个超节点包含多卡的场景。不设置 level2 时的默认行为当通信域内超节点个数小于 8 且不是 2 的整数次幂时采用 ring 算法其他场景采用 H-D_R 算法。level2 配置的产品适用范围Ascend 950PR/Ascend 950DT仅支持配置 NHR 算法仅支持通信算子展开模式为 AI_CPU 的场景Atlas A3 训练系列产品/Atlas A3 推理系列产品仅支持通信算子展开模式为 AI_CPU 的场景。通信算子展开模式可通过环境变量 HCCL_OP_EXPANSION_MODE 配置。每种超节点间通信算法支持的通信算子、数据类型、网络运行模式及确定性计算支持情况详见 超节点间通信算法支持度列表。两种配置方式方式一全局配置算法类型全局配置对通信域内所有集合通信算子生效语法为export HCCL_ALGOlevel0:NA;level1:algo;level2:algo其中 level1 与 level2 的取值见上文。不设置的层级保持 HCCL 默认的自适应选择行为。方式二按算子类型配置算法类型按算子配置可对不同类型的通信算子分别指定算法未被指定的算子仍走自适应选择。语法为export HCCL_ALGOop0level0:NA;level1:algo0;level2:algo1/op1level0:NA;level1:algo3;level2:algo4其中op为通信算子的类型支持如下取值配置名对应的通信算子allgatherAllGather、AllGatherVreducescatterReduceScatter、ReduceScatterVallreduceAllReducebroadcastBroadcastreduceReducescatterScatteralltoallAlltoAll、AlltoAllV、AlltoAllVCalgo为指定算子采用的通信算法支持的取值与全局配置中的 level1/level2 取值一致。请确保指定的通信算法为该通信算子支持的算法类型每种算法支持的通信算子可参见 Server间通信算法支持度列表 与 超节点间通信算法支持度列表多个算子之间的配置使用/分隔未指定通信算法的通信算子会根据产品形态、节点数以及数据量自动选择通信算法。从源码实现看alg_env_config.cc 的CheckAlgoConfigValid全局配置与按算子配置两种方式不能混用若同时检测到两种配置配置串中既存在带的算子级条目又存在不带的全局条目HCCL 会直接报错拒绝全局配置方式下也只允许存在一条配置。配置示例示例一全局配置算法类型export HCCL_ALGOlevel0:NA;level1:NHR即 Server 内不干预NAServer 间统一使用 NHR 算法。示例二按算子配置算法类型# AllReduce算子使用Ring算法AllGather算子使用RHD算法其他算子根据产品形态、节点数以及数据量自动选择通信算法。 export HCCL_ALGOallreducelevel0:NA;level1:ring/allgatherlevel0:NA;level1:H-D_R源码视角HCCL_ALGO 的解析与生效机制HCCL_ALGO在 HCCL 初始化阶段被读取解析其实现位于 src/common/alg_env_config.cc核心链路如下读取与入口ParseHcclAlgo()alg_env_config.cc通过GetEnv(HCCL_ALGO)读取环境变量非空时调用SetHcclAlgoConfig()进入解析流程。该入口仅在特定设备类型下生效——从 InitEnvConfig 可以看到A3 系列DEV_TYPE_910_93会走ParseHcclAlgo解析流程而 A5 系列则明确跳过该解析改用 costmodel 新流程日志提示 A5 uses costmodel flow。预处理与拆分SetHcclAlgoConfig()alg_env_config.cc会先剔除配置串中的所有空格再通过SplitHcclOpType()以/为分隔符递归拆分出各算子条目随后调用CheckAlgoConfigValid()校验全局/按算子两种方式是否混用。解析每个 levelParseAlgoString()以;拆分 level 条目ParserHcclAlgoLevel()alg_env_config.cc以:拆分出层级名与算法名并分别对照两张映射表完成字符串到枚举的转换层级映射level0/level1/level2/level3→HCCL_ALGO_LEVEL_0/1/2/3算法映射ring、pipeline、fullmesh、H-D_R、pairwise、NHR、NHR_V1、AHC、AHC_BROKE、NB、NA、null分别映射到 alg_type.h 中定义的HcclAlgoType枚举。同时解析器会做严格的合法性校验层级名或算法名不在映射表中会直接返回HCCL_E_PARA同一 level 被重复配置也会报错alg_env_config.cc。写入配置表全局配置通过SetCommonAlgType()将算法向量应用到全部算子类型按算子配置通过SetSpecificAlgType()alg_env_config.cc写入到g_algEnvConfig.hcclAlgoConfig[opType]映射中。值得注意的实现细节alltoall的算法配置会自动同步到AlltoAllV与AlltoAllVC源码中HCCL_CMD_ALLTOALLV、HCCL_CMD_ALLTOALLVC直接拷贝HCCL_CMD_ALLTOALL的配置。算法选择器消费算子下发时AutoSelectorBase::Select()auto_selector_base.cc通过GetExternalInputHcclAlgoConfigAllType()拉取整张配置表再结合执行模式AICPU/AIV/CCU 等与拓扑信息交给各算子的自动选择器如 all_reduce_auto_selector.cc做最终算法匹配匹配到的 executor 名称即为最终选定的通信算法。使用约束与优先级使用HCCL_ALGO时需注意以下约束level0 仅支持 NA当前版本 Server 内通信算法仅支持配置为NA确定性保序场景慎用针对 Atlas A2 训练系列产品/Atlas A2 推理系列产品在严格确定性计算的保序场景下不建议配置HCCL_ALGO环境变量此时应依赖确定性计算机制内部固定的算法选择此外针对 Atlas A2/A3 等产品pipeline 算法在开启确定性计算时不会生效参见 Server间通信算法支持度列表 中 pipeline 算法一节的注意事项通信域粒度配置优先若调用 HCCL C 接口初始化具有特定配置的通信域时通过HcclCommConfig的hcclAlgo参数指定了通信算法则以通信域粒度的配置优先于HCCL_ALGO环境变量的全局配置。产品支持情况HCCL_ALGO环境变量的产品支持矩阵如下产品形态是否支持Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 训练系列产品支持Atlas 推理系列产品不支持配置前请务必对照 Server间通信算法支持度列表 与 超节点间通信算法支持度列表确认目标产品形态下所选算法与通信算子、数据类型、网络运行模式单算子模式/图模式 Ascend IR以及算子展开模式AI_CPU/CCU_SCHED 等的匹配关系——例如 Atlas A2/A3 产品下 ring、NHR、H-D_R、NB 等算法所支持的算子集合并不完全相同AHC 算法仅覆盖 ReduceScatter、AllGather、AllReduce 三类算子pairwise 算法则仅服务于 AlltoAll 系列算子这些支持度差异正是HCCL_ALGO配置能否生效的关键前提。【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表