HCCL_OP_RETRY_ENABLE【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl功能描述此环境变量用于配置是否开启HCCL算子的重执行特性。HCCL算子重执行以通信域为粒度当通信算子执行报SDMA或者RDMA CQE类型的错误时HCCL会尝试重新执行此通信算子。在集群环境中可能会存在硬件闪断的情况此时通信算子会执行报错通过此环境变量开启HCCL的重执行特性可以更好地避免由于硬件闪断造成的通信中断提升通信稳定性。HCCL算子重执行实际就是提供一个软件层面的尽力而为的故障恢复手段执行示意图如下所示图 1重执行流程示意图主要步骤有如下三步故障发现AI CPU检测到故障信号通知Host开始准备进入重执行流程。集群管理Host通过Host Socket进行信息交互并判断当前故障算子是否满足一系列重执行条件详细可参见重执行使用须知。重新下发通知AI CPU Kernel重新下发SQE、WQE进行HCCL算子重执行。配置说明通过此环境变量开发者可以在Server间、超节点间两个物理层级的通信域中配置是否开启重执行特性每个层级支持配置两种状态开启或关闭。配置方法如下export HCCL_OP_RETRY_ENABLEL1:0,L2:0L1代表通信域的物理范围为Server间通信域取值为0表示通信域内Server间通信task不开启重执行取值为1表示通信域内Server间通信task开启重执行默认值为0。L2代表通信域的物理范围为超节点间通信域取值为0表示通信域内超节点间通信task不开启重执行取值为1表示通信域内超节点间通信task开启重执行默认值为0。L2配置为“1”时超节点间通信若某一Device网卡故障重执行时会使用备用Device网卡进行通信称之为“借轨通信”。备用网卡为属于同一NPU中的另一个Die网卡借轨通信正常执行的条件以及借轨通信的影响详细可参见借轨通信使用须知。如果通信域的创建方式为“基于rank table创建通信域”需要开发者在rank table文件中通过“backup_device_ip”参数配置备用网卡。如果通信域的创建方式为“基于root节点信息创建通信域”会自动将同一NPU下的两个Die互为备用网卡无需开发者手工配置。另外开发者可以通过环境变量HCCL_OP_RETRY_PARAMS配置第一次重执行的等待时间、最大重执行的次数以及两次重执行的间隔时间。配置建议开启重执行特性后会有一定的性能损失针对Atlas A3 训练系列产品/Atlas A3 推理系列产品Server间与超节点间会经过光互联域稳定性较低建议开启HCCL重执行。此环境变量在各个超节点上的配置需要保持一致否则超节点间建链会超时。重执行使用须知开启HCCL重执行特性时需要满足以下约束条件约束条件不满足时重执行会失败。通信算子的展开模式为AI_CPU。重执行特性仅在AI_CPU调度模式下使能需要通过环境变量HCCL_OP_EXPANSION_MODE设置非AI_CPU调度模式下会采用无重执行流程。export HCCL_OP_EXPANSION_MODEAI_CPU基于rank table创建通信域的场景下rank table中“host_ip”字段必须配置否则重执行不生效走无重执行流程。通信算子的输入内存在执行过程中不能存在被污染的风险。一个集合通信算子是一系列任务的组合HCCL重执行以通信算子为粒度从算子的输入内存开始将一个通信算子的系列任务重新执行一遍。若通信算子的输入内存在执行过程中存在被污染的风险可能会造成重执行失败、系统报错退出。输入内存存在被污染风险的场景主要有以下几种开启零拷贝功能的场景零拷贝功能开启后ReduceScatter和AllReduce算子会修改用户的输入内存因此这两类算子无法支持重执行。包含In-Place操作的场景此场景下算子的输入和输出共享同一块内存例如PyTorch的ReduceScatter/AllGather算子所以包含In-Place操作的场景也不支持重执行。图模式场景在图模式下通信可以直接在算子的输入输出上进行例如PyTorch的AllReduce算子其入参tensor即作为算子的输入又作为算子的输出在算子的通信过程中部分结果写入后tensor内容就会发生变化如果在污染的input上重新执行一遍会得到错误的计算结果。所以此场景也不支持重执行。故障发生时通信域内所有rank都停在同一个通信算子。若不同的rank停在不同的通信算子上则不能重执行。故障发生的时刻是不可预测的发生故障时整个通信域各rank处于什么状态与重执行的成功率相关。以下图的通信域为例包含三个rank表1分别列举故障发生在不同时刻的重执行情况。图 2通信域故障示意图1表 1通信域故障重执行情况故障发生时刻是否可重执行重执行的算子A是HCCL OP1。由于计算算子感知不到链路故障直到执行到通信算子HCCL OP1时感知到链路故障此时三个rank都停止在HCCL OP1满足重执行条件并启动重执行。B是HCCL OP1。rank0与rank2继续执行直到通信算子HCCL OP1rank1也停止在HCCL OP1满足重执行条件并启动重执行。C是HCCL OP1。D否rank0和rank1的HCCL OP1已执行完成D时刻故障发生时会继续执行到HCCL OP2而rank2仍然停在HCCL OP1不满足重执行条件。E是HCCL OP3。三个rank都继续执行最终停止在HCCL OP3满足重执行条件并启动重执行。下面说明下集合通信为什么不能完全保证故障发生时停止在同一个通信算子以集合通信常见的算法RHDRecursive Halving-Doubling为例。图 3通信域故障示意图2四个AI Server每个AI Server一个rank组成四个rank的通信域假设故障刚好发生在HD算法的第一步数据交换后则会出现以下情况rank2和rank3能正常运行结束而rank0和rank1无法运行结束。rank2和rank3后续的计算算子或通信算子都有可能使用任意内存并且再次执行时在rank2、rank3上无法找到对应的上下文信息。所以如果故障发生时刻如上图则不能进行重执行。判断Host侧socket网络通信是否正常。重执行时会使用Host侧socket通信进行通信域中各卡状态的协商如果socket网络故障则无法进行重执行。确保故障的链路已恢复例如路由收敛成功光模块闪断恢复成功或者借用备用网卡通信成功等。如果故障的链路无法恢复再次执行通信任务仍然会失败当重执行次数超过设置的最大重传次数后可参见环境变量HCCL_OP_RETRY_PARAMS重执行失败。[!NOTE]说明若Host侧调试日志中出现关键字为“[OpRetry]...timeout”的ERROR错误信息说明HCCL重执行过程中Host侧socket通信异常此时可以搜集通信域内所有节点的日志进一步定位故障发生位置。若Host侧调试日志中出现关键字为“can not retry”的ERROR错误信息说明当前场景不满足HCCL重执行条件。 Host侧应用程序产生的调试日志默认存储路径为$HOME/ascend/log/debug/plog/。借轨通信使用须知为了确保借轨通信功能正常执行需要满足如下条件备用网卡的通信链路正常。互为主备的Device均需在业务可见范围内。例如NPU1中包含Device0与Device1两个Die互为主备假设通过环境变量ASCEND_RT_VISIBLE_DEVICES指定了业务可见Device为Device0Device1不对业务可见则借轨功能无法执行。如果通信过程中发生了借轨假设某个NPU的Die0网卡故障启用了备用的Die1网卡原Die0的网卡流量也会通过Die1网卡收发导致Die1的流量增大总体性能会由于物理带宽减半、端口冲突导致下降。开启借轨通信场景下若NPU0的Die0网卡故障会切换到其备用网卡Die1由于两个NPU之间的通信要求本端与对端同时切换为备用网卡因此NPU1也会从Die0切换为Die1即“图示二”所示。但如果Die0与Die1之间本身就存在通信任务此时借轨功能无法执行。图 4借轨通信切换示例开启借轨通信功能时建议一个NPU的两个Die分配给同一个训练或推理任务。如果同一个NPU的两个Die分给两个不同的训练或推理任务一个任务发生故障会借用另一个任务的网卡两个任务均会发生一定程度的性能下降。同一NPU仅支持发生一次借轨且不支持回切。如图5所示“图示一”中NPU0 - NPU1间通信链路故障启用了备用链路发生借轨通信正常进行若再发生“图示二”所示故障则不再支持借轨会报错退出。图 5同一NPU仅支持一次借轨示例异常处理若开启重执行特性后出现[OpRetryConnection][RecvAckTag] Recv unmatched ack的错误可能是由于HCCL通信时使用的默认端口被占用导致HCCL连接了错误的Server解决方法如下使用“sysctl -w net.ipv4.ip_local_reserved_ports”命令预留HCCL使用的默认端口60000-60015避免端口被操作系统随机分配。sysctl -w net.ipv4.ip_local_reserved_ports60000-60015如果前一种方法仍出现该错误那么建议使用HCCL_IF_BASE_PORT环境变量修改HCCL使用的默认端口同时使用“sysctl -w net.ipv4.ip_local_reserved_ports”命令预留指定的端口。# 例如指定HCCL使用以17777端口开始的连续16个端口 export HCCL_IF_BASE_PORT17777 # 预留17777-17792共16个端口 sysctl -w net.ipv4.ip_local_reserved_ports17777-17792其他约束若您调用HCCL C接口初始化具有特定配置的通信域时通过“HcclCommConfig”的“hcclRetryEnable”参数配置了是否开启HCCL算子的重执行特性则以通信域粒度的配置优先。重执行对整网性能说明请参见通信算子重执行对整网性能说明。支持的型号Atlas A3 训练系列产品/Atlas A3 推理系列产品【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考