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_ENABLE | Server 内是否使用 PCIe 链路 | HCCL_INTRA_PCIE_ENABLE.md |
| 功能相关 | HCCL_INTRA_ROCE_ENABLE | Server 内 / 超节点内是否使用 RoCE 链路 | HCCL_INTRA_ROCE_ENABLE.md |
| 功能相关 | HCCL_INTER_HCCS_DISABLE | 超节点内节点间用 RoCE RDMA 还是 HCCS SDMA | HCCL_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_NOSTRICT | RDMA 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_PATH | QP 端口配置文件路径 | HCCL_RDMA_QP_PORT_CONFIG_PATH.md |
| 性能相关 | HCCL_HOST_RDMA_UDP_PORTS_LIST | Host 侧 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_NUM | UB 多通道数量 | 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_RANGE | Host 侧 Socket 端口范围 | HCCL_HOST_SOCKET_PORT_RANGE.md |
| 网络相关 | HCCL_NPU_SOCKET_PORT_RANGE | NPU 侧 Socket 端口范围 | HCCL_NPU_SOCKET_PORT_RANGE.md |
| 网络相关 | HCCL_SOCKET_IFNAME | Host 通信网卡选择规则 | HCCL_SOCKET_IFNAME.md |
| 网络相关 | HCCL_SOCKET_FAMILY | Socket 地址族 | HCCL_SOCKET_FAMILY.md |
| 网络相关 | HCCL_RDMA_TC | RDMA 流量等级 TC | HCCL_RDMA_TC.md |
| 网络相关 | HCCL_RDMA_SL | RDMA 服务等级 SL | HCCL_RDMA_SL.md |
| 网络相关 | HCCL_RDMA_TIMEOUT | RDMA 超时 | HCCL_RDMA_TIMEOUT.md |
| 网络相关 | HCCL_RDMA_RETRY_CNT | RDMA 重试次数 | HCCL_RDMA_RETRY_CNT.md |
| 网络相关 | HCOMM_TA_CTP_UB_TIMEOUT | CTP-UB 链路超时 | HCOMM_TA_CTP_UB_TIMEOUT.md |
| 网络相关 | HCOMM_TA_RTP_UB_TIMEOUT | RTP-UB 链路超时 | HCOMM_TA_RTP_UB_TIMEOUT.md |
| 网络相关 | HCOMM_TA_RTP_UBOE_TIMEOUT | RTP-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_CONFIG | HCCL 调试配置 | HCCL_DEBUG_CONFIG.md |
| 调试相关 | HCOMM_DEBUG_CONFIG | HCOMM 调试配置 | 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=200HCCL_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/950DT:
AICPU_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_CacheDisable、AIV(仅支持对称组网与推理特性,且不支持多个通信域同时为 AIV;AlltoAllV/AlltoAllVC 等场景任意两个 rank 间最大通信量不超过 1MB 时才建议 AIV)。 - Atlas A2 系列:
HOST(默认)、HOST_TS、AI_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=FALSEHCCL_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_ENABLE | HCCL_INTRA_ROCE_ENABLE | Server 内通信链路 |
|---|---|---|
| 1 | 不配置 | PCIe |
| 1 | 0 | PCIe |
| 0 | 1 | RoCE |
| 不配置 | 1 | RoCE |
| 0 | 0 | PCIe |
| 不配置 | 不配置 | 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):
- 可配置多个网卡,取最先匹配的网卡作为通信网卡;
- HCCL_IF_IP 优先级高于 HCCL_SOCKET_IFNAME;
- 两者都未配置时,按"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 会尝试重新执行该算子。集群环境中存在硬件闪断的可能,开启重执行可以避免闪断导致的通信中断。它本质上是软件层面尽力而为的故障恢复手段,流程分三步(见文首流程示意图):
- 故障发现:AI CPU 检测到故障信号,通知 Host 准备进入重执行流程;
- 集群管理:Host 通过 Host Socket 交互信息,判断当前故障算子是否满足重执行条件;
- 重新下发:通知 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 互为备用网卡。
- 通信域基于 rank table 创建时,需在 rank table 文件中通过
配置建议:开启重执行有一定性能损失;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 的配置优先级与回退行为可以归纳为:
- 通信域粒度 > 环境变量:HCCL_ALGO(
hcclAlgo)、HCCL_BUFFSIZE(hcclBufferSize)、HCCL_EXEC_TIMEOUT(hcclExecTimeOut)、HCCL_OP_EXPANSION_MODE(hcclOpExpansionMode)、HCCL_DETERMINISTIC(hcclDeterministic)在通过 C 接口HcclCommConfig为特定通信域配置后,通信域粒度优先; - 解析失败回退默认值:设备侧解析环境变量时,格式非法或超范围会打印 WARNING/ERROR 并回退默认值。源码证据:src/common/alg_env_config.cc 中
ParseExecTimeout()对非法格式、解析失败、取值过大的 HCCL_EXEC_TIMEOUT 分别回退默认值;HCCL_DETERMINISTIC 非法取值直接报 "should be true ,false or strict"; - 变量间优先级: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])、按算子类型的算法配置(hcclAlgoConfig:map<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),仅供参考