开启超节点HCCL通信算子级重执行机制
场景描述
针对Snt9B23超节点下光模块故障率高的问题,通过在HCCL通信算子级引入重执行机制,提升系统的稳定性和可靠性。
HCCL(Huawei Collective Communication Library,华为集合通信库)是华为专为昇腾(Ascend)AI处理器设计的分布式通信库,旨在优化多设备间的高效协作,以加速深度学习模型的分布式训练,适用于需要大规模算力的AI场景。在分布式训练中,HCCL负责协调多个昇腾处理器之间的数据同步(如梯度聚合、参数更新),减少通信开销,提升训练效率。
约束限制
- 仅Snt9b23超节点支持。
- 开启算子重执行会对性能带来轻微的影响。
- 重执行依赖VPC平面(非参数面)网络进行通信域内状态协商,如果VPC平面不同,则无法重执行。
- 对于HCCS平面,如果链路没有恢复,路由未收敛,则无法重执行。
- 重执行依赖故障发生时一个通信域中所有卡都停在同一通信算子处,否则无法重执行,成功率约为95%。
- 使用inplace方式的通信算子可能导致UserIn数据被污染,从而影响重执行的可靠性。尽管重执行支持约80%通信算子的inplace方式,但对于Torch框架中的all_reduce、all_gather和reduce_scatter等算子,重执行仍不支持其inplace操作。
- RoH/RoCE平面因为闪断或断链触发的借轨,在同一通信域只允许执行一次,且不支持回切。借轨状态下,业务可持续,但应尽快保存checkpoint,维修故障。
- 对于目前昇腾的执行模式,HCCL重执行的支持范围如下:
表1 HCCL重执行的支持范围 模式
HCCL通信算子展开方式
是否支持
单算子
Stars
支持
Ffts+
支持
Aicpu展开
支持
通信计算融合(mc2)
不支持
图模式
全下沉模式,通信算子以展开的tasks合入图
不支持
全下沉模式,HCCL不参与图执行过程,无法进行重执行
Aicpu展开
支持
原理说明
Snt9B23超节点的连接系统主要包含HCCS平面和RoH/RoCE平面两个数据传输平面。
在HCCS平面中,L1-1520与L2-1520之间采用光互联技术;在RoH/RoCE平面,超出NPU范围的部分均使用光互联。由于电互联域的故障率相对较低,本机制主要针对光互联域的光模块故障进行处理。具体而言:
- HCCS平面L1-1520和L2-1520之间的光模块故障。
- RoH/RoCE平面出Snt9B23超节点的光模块故障。
HCCS平面
针对HCCS平面,L1和L2之间的光模块如果发生闪断或断链,1520设备将自动完成路径切换(前提是存在多路径)。然而,断链可能导致丢包,进而引发业务中断。此时,框架层将回退至上一个checkpoint进行断点续训。通过引入HCCL重执行机制,在1520完成路径切换后,重执行功能可有效降低回退至checkpoint进行断点续训的概率,从而进一步提升业务的连续性和可靠性。
RoH/RoCE平面
针对RoH/RoCE平面,协议内置传输层重传机制,可对丢包或闪断提供一定的修复能力。然而,该机制的可靠性仍存在局限性。为提升整体可靠性,本功能在HCCL层面引入了一层重执行机制:当检测到闪断持续超过30秒或发生断链时,系统将通过建立新的传输路径(借轨),在算子级启动重执行流程,进一步保障业务的稳定运行。
参数配置(HCCL_OP_RETRY_ENABLE)
环境变量HCCL_OP_RETRY_ENABLE用于配置是否开启HCCL算子的重执行特性。重执行是指当通信算子执行报SDMA或RDMA CQE类型的错误时,HCCL会尝试重新执行此通信算子。通过此特性,可以有效避免硬件闪断导致的通信中断,提升通信稳定性。
支持在以下三个物理层级的通信域中配置重执行特性:
- L0:Server内通信域
- L1:Server间通信域
- L2:超节点间通信域
配置方法:
在运行训练任务前,在Server节点中执行以下命令。
export HCCL_OP_RETRY_ENABLE="L0:0, L1:1, L2:1"
参数 |
含义 |
取值范围 |
默认值 |
建议取值 |
---|---|---|---|---|
L0 |
Server内通信域 |
|
0 |
0 |
L1 |
Server间通信域 |
|
0 |
1 |
L2 |
超节点间通信域 |
|
0 |
1 |
注意事项:
- 当L2配置为1时,超节点间通信支持在某一Device网卡故障时使用备用Device网卡进行通信。备用网卡为同一NPU中的另一个Die网卡。
- 如果通信域的创建方式为“基于ranktable”创建通信域,需要在ranktable文件中通过"backup device ip"参数配置备用网卡。
- 如果通信域的创建方式为“基于root广播式”创建通信域,会自动将同一NPU下的两个Die互为备用网卡,无需手动配置。
参数配置(HCCL_OP_RETRY_PARAMS)
环境变量HCCL_OP_RETRY_ENABLE用于配置HCCL算子重执行的具体参数,包括最大重执行次数、第一次重执行的等待时间以及两次重执行的间隔时间。
配置示例:
export HCCL_OP_RETRY_PARAMS="MaxCnt:3, HoldTime:5000, IntervalTime:1000"
参数 |
含义 |
类型 |
取值范围 |
默认值 |
单位 |
建议值 |
---|---|---|---|---|---|---|
MaxCnt |
最大重执行次数 |
uint32 |
[1, 10] |
3 |
次 |
保持默认值3 |
HoldTime |
从检测到通信算子执行失败到开始第一次重执行的等待时间 |
uint32 |
[0, 60000] |
5000 |
ms |
保持默认值5000 |
IntervalTime |
两次重执行之间的间隔时间 |
uint32 |
[0, 60000] |
1000 |
ms |
保持默认值1000 |
使用约束:
仅当通过HCCL_OP_RETRY_ENABLE环境变量开启了HCCL的重执行特性(任一层级的重执行特性开启即可)时,此环境变量才生效。