HCCL 环境变量全解:从通信算法选择、链路切换到重执行容错,一张速查表配好昇腾集群的通信行为
2026/9/18 4:01:46 网站建设 项目流程

HCCL 环境变量全解:从通信算法选择、链路切换到重执行容错,一张速查表配好昇腾集群的通信行为

【免费下载链接】hccl集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl

本文基于 HCCL 官方《环境变量参考》(docs/zh/user_guide/hccl_env/README.md)整理,覆盖 HCCL 全部 36 个环境变量:功能相关 10 个、性能相关 7 个、网络相关 13 个、调试相关 5 个、可靠性相关 2 个、安全相关 2 个,并对其中最常用的 HCCL_ALGO、HCCL_EXEC_TIMEOUT、HCCL_BUFFSIZE、HCCL_DETERMINISTIC、HCCL_OP_RETRY_ENABLE 等变量给出取值范围、默认值、配置示例与使用约束。读完本文,你可以快速完成通信算法指定、Server 内链路切换、端口与网卡绑定、超时与重执行策略的调优,并能结合仓库源码定位每个环境变量的解析实现。

环境变量速查总表

HCCL 通过环境变量在算法选择、链路切换、超时控制、端口与网卡绑定、确定性计算、诊断调试、故障重执行、安全白名单等维度控制通信行为。按官方文档的六大分类,全部变量如下(详细取值与约束见对应文档):

分类环境变量一句话作用参考文档
功能相关HCCL_CONNECT_TIMEOUT设备间 socket 建链的超时等待时间HCCL_CONNECT_TIMEOUT.md
功能相关HCCL_EXEC_TIMEOUT设备间执行通信同步的等待时间HCCL_EXEC_TIMEOUT.md
功能相关HCCL_ALGO指定 Server 间 / 超节点间通信算法(全局或按算子)HCCL_ALGO.md
功能相关HCCL_BUFFSIZE通信域共享数据缓存区大小(MB)HCCL_BUFFSIZE.md
功能相关HCCL_INTRA_PCIE_ENABLEServer 内是否使用 PCIe 链路HCCL_INTRA_PCIE_ENABLE.md
功能相关HCCL_INTRA_ROCE_ENABLEServer 内 / 超节点内是否使用 RoCE 链路HCCL_INTRA_ROCE_ENABLE.md
功能相关HCCL_INTER_HCCS_DISABLE超节点内节点间用 RoCE RDMA 还是 HCCS SDMAHCCL_INTER_HCCS_DISABLE.md
功能相关HCCL_OP_EXPANSION_MODE通信算子展开模式(Host / AI CPU / AIV / CCU 等)HCCL_OP_EXPANSION_MODE.md
功能相关HCCL_DETERMINISTIC归约类算子确定性计算或归约保序开关HCCL_DETERMINISTIC.md
功能相关HCCL_LOGIC_SUPERPOD_ID逻辑超节点 ID 配置HCCL_LOGIC_SUPERPOD_ID.md
性能相关HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICTRDMA PCIe 直通非严格模式HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT.md
性能相关HCCL_RDMA_QPS_PER_CONNECTION每条 RDMA 连接的 QP 数量HCCL_RDMA_QPS_PER_CONNECTION.md
性能相关HCCL_RDMA_QP_PORT_CONFIG_PATHQP 端口配置文件路径HCCL_RDMA_QP_PORT_CONFIG_PATH.md
性能相关HCCL_HOST_RDMA_UDP_PORTS_LISTHost 侧 RDMA 建链 UDP 端口列表HCCL_HOST_RDMA_UDP_PORTS_LIST.md
性能相关HCCL_MULTI_QP_THRESHOLD启用多 QP 的数据量阈值HCCL_MULTI_QP_THRESHOLD.md
性能相关HCCL_ALG_MULTIPLE_DIMENSION_SPLIT_RATIO多维度切分比例HCCL_ALG_MULTIPLE_DIMENSION_SPLIT_RATIO.md
性能相关HCCL_UB_MULTI_CHANNEL_NUMUB 多通道数量HCCL_UB_MULTI_CHANNEL_NUM.md
网络相关HCCL_IF_IP指定 HCCL 建链使用的 Host IP(优先级高于网卡名)HCCL_IF_IP.md
网络相关HCCL_IF_BASE_PORT基础端口HCCL_IF_BASE_PORT.md
网络相关HCCL_HOST_SOCKET_PORT_RANGEHost 侧 Socket 端口范围HCCL_HOST_SOCKET_PORT_RANGE.md
网络相关HCCL_NPU_SOCKET_PORT_RANGENPU 侧 Socket 端口范围HCCL_NPU_SOCKET_PORT_RANGE.md
网络相关HCCL_SOCKET_IFNAMEHost 通信网卡选择规则HCCL_SOCKET_IFNAME.md
网络相关HCCL_SOCKET_FAMILYSocket 地址族HCCL_SOCKET_FAMILY.md
网络相关HCCL_RDMA_TCRDMA 流量等级 TCHCCL_RDMA_TC.md
网络相关HCCL_RDMA_SLRDMA 服务等级 SLHCCL_RDMA_SL.md
网络相关HCCL_RDMA_TIMEOUTRDMA 超时HCCL_RDMA_TIMEOUT.md
网络相关HCCL_RDMA_RETRY_CNTRDMA 重试次数HCCL_RDMA_RETRY_CNT.md
网络相关HCOMM_TA_CTP_UB_TIMEOUTCTP-UB 链路超时HCOMM_TA_CTP_UB_TIMEOUT.md
网络相关HCOMM_TA_RTP_UB_TIMEOUTRTP-UB 链路超时HCOMM_TA_RTP_UB_TIMEOUT.md
网络相关HCOMM_TA_RTP_UBOE_TIMEOUTRTP-UB over ETH 链路超时HCOMM_TA_RTP_UBOE_TIMEOUT.md
调试相关HCCL_DIAGNOSE_ENABLE诊断功能开关HCCL_DIAGNOSE_ENABLE.md
调试相关HCCL_ENTRY_LOG_ENABLE算子入口日志打印HCCL_ENTRY_LOG_ENABLE.md
调试相关HCCL_DEBUG_CONFIGHCCL 调试配置HCCL_DEBUG_CONFIG.md
调试相关HCOMM_DEBUG_CONFIGHCOMM 调试配置HCOMM_DEBUG_CONFIG.md
调试相关HCCL_DFS_CONFIG动态调参(Diagnostics Flow Service)配置HCCL_DFS_CONFIG.md
可靠性相关HCCL_OP_RETRY_ENABLE通信算子重执行使能(按通信层级)HCCL_OP_RETRY_ENABLE.md
可靠性相关HCCL_OP_RETRY_PARAMS重执行等待时间、次数与间隔HCCL_OP_RETRY_PARAMS.md
安全相关HCCL_WHITELIST_DISABLE关闭白名单功能HCCL_WHITELIST_DISABLE.md
安全相关HCCL_WHITELIST_FILE白名单配置文件路径HCCL_WHITELIST_FILE.md

参考资料还包括两篇算法支持度列表与一篇重执行性能分析:Server间通信算法支持度列表、超节点间通信算法支持度列表 和 通信算子重执行对整网性能说明。

功能相关:算法、缓存、超时与确定性

HCCL_ALGO:全局与按算子两级算法配置

HCCL_ALGO 用于配置Server 间(level1)与超节点间(level2)通信算法,level0(Server 内)当前仅支持配置为 NA。它支持两种配置方式:

方式一:全局配置

export HCCL_ALGO="level0:NA;level1:<algo>;level2:<algo>"

方式二:按算子类型配置

# AllReduce 使用 Ring,AllGather 使用 RHD,其余算子自动选择 export HCCL_ALGO="allreduce=level0:NA;level1:ring/allgather=level0:NA;level1:H-D_R"

按算子配置时,<op>支持 allgather(AllGather/AllGatherV)、reducescatter(ReduceScatter/ReduceScatterV)、allreduce、broadcast、reduce、scatter、alltoall(AlltoAll/AlltoAllV/AlltoAllVC),多个算子之间用/分隔。

level1(Server 间)支持的算法及适用场景:

算法复杂度适用场景
ring线性(步数多)Server 数较少、数据量较小、网络明显拥塞且 pipeline 不适用;通信关系简单,受拥塞影响小
H-D_R(RHD,递归二分倍增)对数Server 数为 2 的整数次幂,或 Server 数不是 2 的幂但数据量较小
NHR(非均衡层次环)对数Server 个数较多且 pipeline 不适用(理论性能优于 NHR_V1)
NHR_V1历史版本 NHR,Server 数非 2 的幂且 pipeline 不适用;该配置项未来会逐步停用,建议使用 NHR
NB(非均匀 Bruck)对数Server 个数较多且 pipeline 不适用
AHC(非对称层次拼接)NPU 多层次分布、层次间对称或卡数非对称,且层次间存在带宽收敛时收益更好
pipeline数据量较大且每机多卡,可并发使用 Server 内与 Server 间链路
pairwise线性仅用于 AlltoAll/AlltoAllV/AlltoAllVC,规避网络"一打多",内存占用与数据量成正比

level2(超节点间)支持 ring、H-D_R、NHR、NB、pipeline。不设置 level2 时,当超节点个数小于 8 且不是 2 的整数次幂时采用 ring,其他场景采用 H-D_R。

几个容易踩坑的细节:

  • HCCL 提供自适应算法选择,默认按产品形态、数据量、Server 个数自动选算法,一般情况下用户无需手工指定;一旦通过 HCCL_ALGO 指定了 level1 或 level2,自适应选择不再生效。
  • level1 配置为AHC时,level2 会自动采用 AHC,即使你另外为 level2 设置了其他算法也不会生效。
  • 不设置 level1 时的默认行为因产品而异:Ascend 950PR/950DT 默认 NHR(当前版本 950 仅支持配置 NHR);Atlas A3、Atlas A2 系列产品按产品形态、节点数与数据量自动选择;Atlas 训练系列(910)在 Server 个数非 2 的整数次幂时默认 ring,否则默认 H-D_R。
  • level2 当前仅适用于 Ascend 950PR/950DT(仅 NHR,且要求算子展开模式为 AI_CPU)与 Atlas A3 系列(要求算子展开模式为 AI_CPU,展开模式由 HCCL_OP_EXPANSION_MODE 配置)。

不同产品下每种算法实际支持的通信算子,请以 Server间通信算法支持度列表 与 超节点间通信算法支持度列表 为准。

源码印证:HCCL_ALGO 的解析逻辑位于 src/common/alg_env_config.cc,其中ParseHcclAlgo()通过SetCommonAlgType(全局配置)与SetSpecificAlgType(按算子配置)处理两种语法;算法名到内部枚举的映射表(alg_env_config.cc)包含 ring、pipeline、H-D_R、pairwise、NHR、NHR_V1、AHC、NB、NA 等取值,与文档一致。算法实现本身按算子组织在src/ops/<op>/algorithm/目录(如 src/ops/all_reduce/algorithm、src/ops/reduce_scatter/algorithm),选型器位于 src/ops/op_common/selector 目录。

HCCL_EXEC_TIMEOUT:设备间执行同步等待时间

分布式训练中各设备进程执行任务往往不同步(例如仅特定进程保存 checkpoint),HCCL_EXEC_TIMEOUT 控制设备间执行时的同步等待时间。单位均为秒,取值随产品与展开模式变化:

  • Ascend 950PR/950DT
    • CCU_MS / CCU_SCHED 模式:建议整数,取值 [0, 65535],默认 1836,配置为 0 代表永不超时;
    • AI_CPU 模式:取值 [0, 2147483647],默认 1836,0 代表永不超时;
    • AIV 模式:取值 [0, 1091],默认 1091,支持十毫秒级精度(如需 50 毫秒超时配置 0.05)。AIV 模式下实际生效超时为interval * N * 10^-3毫秒,interval 是硬件支持的算子超时最短间隔(可通过 aclrtGetOpTimeoutInterval 获取,单位 us),N 为 [1, 254] 的整数,配置值会向上对齐到该粒度。
  • Atlas A3 系列:AI_CPU / AICPU_CacheDisable 模式取值 [0, 2147483647],默认 1836;AIV 模式同上([0, 1091],默认 1091,毫秒级对齐)。
  • Atlas A2 系列:HOST / HOST_TS 模式取值 [0, 2147483647],默认 1836,0 代表永不超时;AIV 模式同上。
  • Atlas 训练 / 推理系列:取值 (0, 17340],默认 1836。实际设置值 = 配置值整除 68 再乘以 68(小于 68 按 68s 处理)。例如配置 600,实际生效600 // 68 * 68 = 8 * 68 = 544s
export HCCL_EXEC_TIMEOUT=1800

一般情况下保持默认值即可;当默认值无法满足设备间执行通信同步需求时,再通过该变量适当增大等待时间。若通过 C 接口HcclCommConfig.hcclExecTimeOut为特定通信域配置了该值,则以通信域粒度配置为准。

HCCL_BUFFSIZE:通信域共享缓存区大小

取值大于等于 1 的整数,单位 MB,默认 200。每个通信域都会占用该大小的缓存区,且:

  • 该内存为HCCL 独占,不可与其他业务内存复用;
  • 每个通信域实际占用2 * HCCL_BUFFSIZE的内存,分别用于收、发;
  • 资源按通信域粒度管理,保证多通信域并发算子互不影响;
  • 集合通信算子数据量超过该值时可能性能下降,建议取值大于通信数据量。

大语言模型场景的推荐值公式(向上取整):

MicrobatchSize * SequenceLength * hiddenSize * sizeof(DataType) / (1024 * 1024)

典型使用场景是动态 shape 网络,以及开发者直接调用 HCCL C 接口做框架对接。

export HCCL_BUFFSIZE=200

若通过HcclCommConfig.hcclBufferSize指定了通信域粒度配置,则通信域粒度优先。

HCCL_CONNECT_TIMEOUT:建链超时

限制不同设备间 socket 建链的超时等待时间。取值 [120, 7200],默认 120,单位秒。实际建链超时等待时间 = 配置值 + 20s(例如配置 150 则实际 170s),额外的 20s 用于通知各节点通信域初始化失败的原因。注意该值会影响链路故障场景的异常上报时间。

export HCCL_CONNECT_TIMEOUT=200

HCCL_DETERMINISTIC:确定性计算与归约保序

用于配置归约类算子(AllReduce、ReduceScatter、ReduceScatterV、Reduce)的确定性计算或保序功能。开启后,算子在相同硬件和输入下多次执行产生相同输出。取值:

  • false(默认):关闭确定性计算。但需注意产品差异:Ascend 950PR/950DT 上所有归约类算子强制为确定性计算,不受此配置影响;Atlas A3 上若展开模式为 AI CPU,归约类算子同样强制确定性;仅 Vector Core 展开时 AllReduce 和 ReduceScatter 涉及非确定性,默认关闭。
  • true:开启确定性计算(Atlas A2 上支持 AllReduce、ReduceScatter、ReduceScatterV、Reduce)。
  • strict:开启严格确定性计算(归约保序),在确定性基础上保证所有 bit 位的归约顺序一致。约束:仅支持 INF/NaN 模式,不支持饱和模式;相较确定性计算会有性能下降,建议推理场景使用。产品约束:
    • Ascend 950PR/950DT:支持 AllReduce、ReduceScatter,要求 rank size ≥ 3,仅支持展开模式为 AI_CPU(配置其他展开模式会回退到 AI_CPU 并保序);
    • Atlas A3:仅支持多机对称分布,支持 AllReduce、ReduceScatter(float16/float32/bfp16,仅 sum),rank size ≥ 3;若超节点内存在多个 AI Server,仅支持 Server 间走 HCCS SDMA,即不支持将 HCCL_INTER_HCCS_DISABLE 设置为 TRUE。
export HCCL_DETERMINISTIC=true

一般情况下无需开启;当模型多次执行结果不同或精度调优时可用它辅助定位,但开启后算子执行会变慢。若同时把展开模式配置为 AIV,确定性计算优先级更高,某些场景下 AIV 展开可能不生效。若通过HcclCommConfig.hcclDeterministic配置了通信域粒度,则以通信域粒度优先。

源码印证ParseDeterministic()在 src/common/alg_env_config.cc 中校验取值必须是 true/false/strict;内部状态用 AlgEnvConfig 中的DeterministicEnableLevel三档枚举表达(0:不支持;1:支持确定性不支持保序;2:支持确定性与保序),默认值为DETERMINISTIC_DISABLE

HCCL_OP_EXPANSION_MODE:通信算子展开模式

配置通信算子在哪个执行单元展开:

  • Ascend 950PR/950DTAICPU_TS(默认,AI CPU 展开 + STARS 调度器)、AI_CPU(后续版本废弃,与 AICPU_TS 功能一致)、AICPU_CacheDisable(关闭 AI CPU cache 特性)、AIV(Vector Core 展开)、CCU_MS(CCU 展开 + CcuBuffer 中转,950PR 不支持)、CCU_SCHED(CCU 调度模式,向 UB 引擎调度 WQE)。CCU_MS/CCU_SCHED 下 Reduce、AllReduce、ReduceScatter 数据量超过一定阈值时会自动切回 AI_CPU;CCU_SCHED 下 ReduceScatterV/AllGatherV 仅支持单 Server。
  • Atlas A3 系列AI_CPU(默认)、AICPU_CacheDisableAIV(仅支持对称组网与推理特性,且不支持多个通信域同时为 AIV;AlltoAllV/AlltoAllVC 等场景任意两个 rank 间最大通信量不超过 1MB 时才建议 AIV)。
  • Atlas A2 系列HOST(默认)、HOST_TSAI_CPU(仅支持 AllGather 与 AlltoAll 系列)、AIV
  • Atlas 300I Duo 推理卡HOST(默认)、AI_CPU(仅支持单机单通信域的 AllReduce)。
export HCCL_OP_EXPANSION_MODE="AI_CPU"

AI CPU cache 的含义:同一通信算子第二次执行时复用首次展开结果以节省展开开销,但占用额外显存;通信数据量频繁变化的服务场景建议配置AICPU_CacheDisable关闭。图模式(Ascend IR)或图捕获(aclgraph)场景下采用 AI CPU 模式时,单卡并发图数量不要超过 6 个,否则可能因 AI CPU 核被占满导致通信阻塞。若通过HcclCommConfig.hcclOpExpansionMode配置了通信域粒度,则以通信域粒度优先。

HCCL_INTER_HCCS_DISABLE 与 HCCL_LOGIC_SUPERPOD_ID:超节点链路

HCCL_INTER_HCCS_DISABLE配置超节点模式组网中超节点内的通信链路:TRUE 表示节点间走 RoCE RDMA,FALSE(默认)表示走 HCCS SDMA(仅 Atlas A3 系列支持):

export HCCL_INTER_HCCS_DISABLE=FALSE

HCCL_LOGIC_SUPERPOD_ID用于在物理超节点拓扑与逻辑通信域不匹配的场景下配置逻辑超节点 ID,取值与约束详见 HCCL_LOGIC_SUPERPOD_ID.md。

Server 内链路切换:PCIe 与 RoCE

HCCL_INTRA_PCIE_ENABLE(默认 1)与HCCL_INTRA_ROCE_ENABLE(默认 0)共同决定 Server 内使用的通信链路,合法组合如下:

HCCL_INTRA_PCIE_ENABLEHCCL_INTRA_ROCE_ENABLEServer 内通信链路
1不配置PCIe
10PCIe
01RoCE
不配置1RoCE
00PCIe
不配置不配置PCIe

不支持的组合:两者同时为 1;PCIe=0 而 RoCE 不配置;PCIe 不配置而 RoCE=0。

export HCCL_INTRA_PCIE_ENABLE=1 export HCCL_INTRA_ROCE_ENABLE=1

产品支持面较窄:Atlas A2 系列仅支持 Atlas 200T A2 Box16 异构子框,Atlas 训练系列仅支持 Atlas 300T Pro 训练卡;Ascend 950 与 Atlas 推理系列不支持。Atlas 200T A2 Box16 存在 0~7 卡与 8~15 卡左右两个模组,单机场景下走 PCIe 链路同时使用两个模组的卡时,要求两模组卡数相同且同平面(0 卡与 8 卡、1 卡与 9 卡……同时使用);走 RoCE 链路则无此限制。Atlas A3 系列上该变量仅在使用 LLM-DataDist 作为集群管理组件的场景下生效,且语义是超节点内是否使用 RoCE。

源码印证:src/common/alg_env_config.cc 中的ParseIntraLinkType()解析这两个变量,状态保存在AlgEnvConfig.intraRoceSwitch字段(alg_env_config.h),注释明确其与intraPcieSwitch组合使用、默认 0。

性能相关:RDMA 连接与多维度切分

性能类变量面向 RDMA 连接参数与算子数据切分调优:

  • HCCL_RDMA_PCIE_DIRECT_POST_NOSTRICT:RDMA PCIe 直通的非严格模式开关;
  • HCCL_RDMA_QPS_PER_CONNECTION:每条 RDMA 连接的 QP 数量,多 QP 可提升大带宽连接吞吐;
  • HCCL_RDMA_QP_PORT_CONFIG_PATH:指定 QP 端口配置文件路径,用于精细控制 QP 到物理端口的绑定;
  • HCCL_HOST_RDMA_UDP_PORTS_LIST:Host 侧 RDMA 建链使用的 UDP 端口列表;
  • HCCL_MULTI_QP_THRESHOLD:数据量达到该阈值后启用多 QP 传输;
  • HCCL_ALG_MULTIPLE_DIMENSION_SPLIT_RATIO:算法多维度切分比例,控制数据沿不同通信维度的切分策略(文档配有效果示意图 HCCL_ALG_MULTIPLE_DIMENSION_SPLIT_RATIO.png);
  • HCCL_UB_MULTI_CHANNEL_NUM:UB 链路多通道数量。

各变量的取值范围与默认值请直接查阅速查表中的对应文档,配置方式均为标准export导出。

网络相关:网卡、端口与 RDMA 流控

网卡选择:HCCL_SOCKET_IFNAME 与 HCCL_IF_IP

HCCL_SOCKET_IFNAME配置 HCCL 初始化时 Host 使用的通信网卡名(HCCL 通过它获取 Host IP 与 root 节点通信、完成通信域创建),支持四类规则,多值用英文逗号分隔:

规则示例含义
前缀匹配eth/eth,enp使用所有以 eth 或 enp 为前缀的网卡
前缀排除^eth/^eth,enp不使用以 eth 或 enp 为前缀的网卡
精确指定=eth0/=eth0,enp0仅使用 eth0 或 enp0 网卡
精确排除^=eth0/^=eth0,enp0不使用 eth0 与 enp0 网卡

选择规则与优先级(见 HCCL_SOCKET_IFNAME.md):

  1. 可配置多个网卡,取最先匹配的网卡作为通信网卡;
  2. HCCL_IF_IP 优先级高于 HCCL_SOCKET_IFNAME
  3. 两者都未配置时,按"docker/lo 以外网卡(名字典序升序) > docker 网卡 > lo 网卡"自动选择。

若不配置且当前节点选择的网卡与 root 节点选择的网卡链路不通,将导致 HCCL 建链失败——多网卡主机上这是最常见的建链失败原因之一。

端口与 RDMA 流控变量

  • HCCL_IF_BASE_PORT:HCCL 各连接端口分配的基础端口;
  • HCCL_HOST_SOCKET_PORT_RANGE / HCCL_NPU_SOCKET_PORT_RANGE:Host 侧与 NPU 侧 Socket 端口范围,防火墙策略较严或端口冲突时按需调整;
  • HCCL_SOCKET_FAMILY:控制 Socket 使用的地址族(IPv4/IPv6),混用时需保证集群内配置一致;
  • HCCL_RDMA_TC / HCCL_RDMA_SL:RDMA 流量的 Traffic Class 与 Service Level,用于在交换机上做流量分类与队列映射;
  • HCCL_RDMA_TIMEOUT / HCCL_RDMA_RETRY_CNT:RDMA 传输超时与链路层重试次数,影响链路闪断时的行为;
  • HCOMM_TA_CTP_UB_TIMEOUT / HCOMM_TA_RTP_UB_TIMEOUT / HCOMM_TA_RTP_UBOE_TIMEOUT:底层 HCOMM 传输抽象层针对不同物理链路(CTP-UB、RTP-UB、RTP-UB over ETH)的超时配置。

调试相关:诊断、日志与动态调参

  • HCCL_DIAGNOSE_ENABLE:开启诊断功能,故障排查时收集诊断信息;
  • HCCL_ENTRY_LOG_ENABLE:打印算子入口日志,用于追踪算子下发路径(源码中由 alg_env_config.cc 的ParseEntryLogEnable()解析,对应AlgEnvConfig.enableEntryLog);
  • HCCL_DEBUG_CONFIG:HCCL 调试配置;
  • HCOMM_DEBUG_CONFIG:底层 HCOMM 调试配置;
  • HCCL_DFS_CONFIG:动态调参(Diagnostics Flow Service)配置,运行期动态调整参数。

各变量的具体取值格式参见速查表中的对应文档。

可靠性相关:通信算子重执行

HCCL_OP_RETRY_ENABLE:按通信层级开启重执行

HCCL 算子重执行以通信域为粒度:当通信算子执行报 SDMA 或 RDMA CQE 类型的错误时,HCCL 会尝试重新执行该算子。集群环境中存在硬件闪断的可能,开启重执行可以避免闪断导致的通信中断。它本质上是软件层面尽力而为的故障恢复手段,流程分三步(见文首流程示意图):

  1. 故障发现:AI CPU 检测到故障信号,通知 Host 准备进入重执行流程;
  2. 集群管理:Host 通过 Host Socket 交互信息,判断当前故障算子是否满足重执行条件;
  3. 重新下发:通知 AI CPU Kernel 重新下发 SQE、WQE,执行通信算子重执行。

配置语法按物理层级独立开关:

export HCCL_OP_RETRY_ENABLE="L1:0,L2:0"
  • L1:Server 间通信域。0 关闭(默认),1 开启;
  • L2:超节点间通信域。0 关闭(默认),1 开启。L2 为 1 时,若超节点间某 Device 网卡故障,重执行会使用备用 Device 网卡通信("借轨通信"),备用网卡为同一 NPU 中另一个 Die 的网卡:
    • 通信域基于 rank table 创建时,需在 rank table 文件中通过backup_device_ip参数配置备用网卡;
    • 基于 root 节点信息创建时,系统自动将同一 NPU 下两个 Die 互为备用网卡。

配置建议:开启重执行有一定性能损失;Atlas A3 系列 Server 间与超节点间需经过光互联域、稳定性较低,建议开启;该变量在所有超节点上的配置必须一致,否则超节点间建链会超时;重执行开启时建议通信域数量不超过 5 个,否则通信算子可能占满 AI CPU 核,导致计算算子无法执行。

源码印证:层级常量定义在 src/common/alg_env_config.h(HCCL_RETRY_ENABLE_LEVEL_0/1/2,最多 3 级),状态保存在AlgEnvConfig.hcclRetryConfig[3]数组中,解析入口为SplitHcclRetryEnable()+CollectRetryEnableFromConfig()+ParseRetryEnable()(alg_env_config.h)。

HCCL_OP_RETRY_PARAMS:重执行节奏参数

配置第一次重执行的等待时间、最大重执行次数以及两次重执行的间隔时间,与 HCCL_OP_RETRY_ENABLE 配合使用,详见 HCCL_OP_RETRY_PARAMS.md。

重执行对整网性能的影响

开启重执行后整网端到端性能的变化与模型切分部署方式密切相关(完整分析见 comm_retry_perf_impact.md):

  • 关键通信域是指该域性能变化会显著带动整网端到端性能变化的通信域(通常是 TP 域)。一般 TP 范围在 Server 内(TP≤16)时不会开启 Server 间重执行,不影响端到端性能;
  • 非关键通信域开启重执行对整网影响很小:文档给出的实验室数据中,Llama3-8B(TP=16/DP=4,仅 DP 开重执行)劣化 0.03%,GPT4_dropLess(TP=8/CP=16)劣化 0.99%,Qwen3-moe-235B(TP=8/EP=64)劣化 -0.1%;
  • 若关键通信域开启了重执行,其展开方式从异步变为同步,新增的展开开销能否被计算掩盖取决于模型结构与部署方式:同样 EP=64 切分,DeepSeekV3(64die)劣化 0.06%,而 qwen3-moe-30b(64die)劣化约 3%。

安全相关:通信连接白名单

  • HCCL_WHITELIST_DISABLE:关闭 HCCL 白名单功能(默认开启,仅与白名单内的对端建立通信连接);
  • HCCL_WHITELIST_FILE:指定白名单配置文件路径。

白名单用于保障通信连接的安全性,配置方式见 HCCL_WHITELIST_DISABLE.md 与 HCCL_WHITELIST_FILE.md。

配置优先级与回退规则

综合各变量文档的"使用约束",HCCL 的配置优先级与回退行为可以归纳为:

  1. 通信域粒度 > 环境变量:HCCL_ALGO(hcclAlgo)、HCCL_BUFFSIZE(hcclBufferSize)、HCCL_EXEC_TIMEOUT(hcclExecTimeOut)、HCCL_OP_EXPANSION_MODE(hcclOpExpansionMode)、HCCL_DETERMINISTIC(hcclDeterministic)在通过 C 接口HcclCommConfig为特定通信域配置后,通信域粒度优先;
  2. 解析失败回退默认值:设备侧解析环境变量时,格式非法或超范围会打印 WARNING/ERROR 并回退默认值。源码证据:src/common/alg_env_config.cc 中ParseExecTimeout()对非法格式、解析失败、取值过大的 HCCL_EXEC_TIMEOUT 分别回退默认值;HCCL_DETERMINISTIC 非法取值直接报 "should be true ,false or strict";
  3. 变量间优先级:HCCL_IF_IP 高于 HCCL_SOCKET_IFNAME;HCCL_DETERMINISTIC 开启 true/strict 后优先级高于 AIV 展开模式(某些场景 AIV 不生效);level1=AHC 时 level2 强制 AHC。

源码实现定位

从源码结构看,HCCL 环境变量在设备侧由统一的配置模块解析,位于 src/common/ 目录:

  • alg_env_config.h:定义AlgEnvConfig结构体(alg_env_config.h#L34-L83),集中保存确定性等级、展开模式(aicpuUnfold/aicpuCacheEnable/aivMode/ccuMSMode 等)、执行超时(execTimeout)、重执行开关(hcclRetryConfig[3])、按算子类型的算法配置(hcclAlgoConfigmap<HcclCMDType, vector<HcclAlgoType>>)等字段及其默认值,并给出HcclAlgoTypeMap算法名映射表;
  • alg_env_config.cc:InitEnvConfig()驱动ParseHcclAlgo()ParseExecTimeout()ParseDeterministic()ParseOpExpansion()ParseRetryEnable()ParseIntraLinkType()ParseDfsConfig()等一系列解析函数,将环境变量转换为上述配置状态;
  • alg_parse.cc / alg_type.cc:算法类型判定与算法字符串解析的公共逻辑;
  • 网络相关变量(socket、RDMA)的解析位于 Host 侧与 hcomm 交互层,如 src/common/hcomm_dlsym/ 目录下的动态加载封装。

单元测试方面,test/ut/common/alg_parse/ 覆盖 HCCL_ALGO 等环境变量的解析行为,test/ut/recursive_executor/ 中的algo_desc_test.cc验证算法描述配置,可作为修改或验证算法配置解析逻辑时的回归参考。

小结

  • 日常调优从三个入口入手:算法(HCCL_ALGO,配合支持度列表确认产品支持面)、超时(HCCL_CONNECT_TIMEOUT / HCCL_EXEC_TIMEOUT,注意 +20s 与 68s 对齐的生效规则)、缓存(HCCL_BUFFSIZE,按2 * HCCL_BUFFSIZE规划每通信域内存);
  • 集群规模与链路形态变化时,再看链路类变量(HCCL_INTRA_PCIE_ENABLE / HCCL_INTRA_ROCE_ENABLE / HCCL_INTER_HCCS_DISABLE)与网络类变量(网卡、端口、TC/SL);
  • 高可靠需求场景开启 HCCL_OP_RETRY_ENABLE(L1/L2 分层配置、各节点配置一致、通信域不超过 5 个),并结合 通信算子重执行对整网性能说明 评估关键通信域的性能影响;
  • 结果不一致排查用 HCCL_DETERMINISTIC(true/strict),故障定位用调试类五件套(DIAGNOSE_ENABLE / ENTRY_LOG_ENABLE / HCCL_DEBUG_CONFIG / HCOMM_DEBUG_CONFIG / HCCL_DFS_CONFIG);
  • 每个变量在 docs/zh/user_guide/hccl_env/ 下都有独立文档,含完整的取值范围、配置示例、使用约束与产品支持情况表,落地配置前建议逐条核对"产品支持情况"。

【免费下载链接】hccl集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询