配置算子重执行
什么是算子重执行
算子重执行是指当因为通信链路故障导致训练作业中通信算子报错,借助HCCL能力实现失败算子重新执行,保障训练作业不失败。在超节点大模型训练场景,集群通信链路存在闪断的情况,此时通信算子会执行报错,算子重执行可以很好的避免由于链路闪断故障造成的整个作业失败,提升训练作业的通信稳定性。
场景描述
在昇腾新一代硬件Snt9b23构建的超节点集群中,每个超节点内部的服务器的NPU通过灵衢总线实现HCCS协议互联,形成一个高效的“超平面”网络。同时,两个超节点之间的服务器通过“参数面”网络实现互联。然而,运行在超节点集群中的作业需要依赖这两个网络进行分布式通信,而任何一个网络的闪断都会导致通信失败,进而引发业务失败的问题。为了解决这一问题,ModelArts推出了算子重执行的可配置能力,为用户提供了一个可靠的解决方案。
主要涉及“超平面”和“参数面”两种场景网络故障的算子重执行能力:
场景一:“参数面”网络故障
硬件Snt9b32是一张卡两个DIE的硬件结构,而且两个DIE之间是通过SIO快速通道连接,如果DIE-1设备“参数面”链路彻底故障,DIE-1可以通过SIO链路借用DIE-0的“参数面”链路进行通信,开启算子重执行,可以借轨进行通信。如果DIE-1设备“参数面”链路出现闪断,开启算子重执行可以基于现有链路进行通信。
场景二:“超平面”网络故障
昇腾硬件Snt9b23组成的超节点集群中“超平面”网络是通过两层交换机实现NPU互联,如果L1-L2链路故障,可以借助交换机的BGP切路算法进行通信链路重新规划,从而保证算子重执行成功,业务不中断。
约束限制
- 仅支持昇腾Snt9b32超节点的专属资源池。
- 仅支持使用PyTorch框架的预置镜像环境。
- 仅支持使用满卡配置的训练作业。
- 依赖昇腾组件,版本约束为:HDK版本大于等于24.1.RC3.5,CANN版本大于等于8.1.RC1。
- MindSpore框架暂不支持算子重执行。
性能影响说明
只要开启算子重执行,就会带来性能影响且无法关闭!您可以先开启算子重执行评估业务模型性能影响后,再选择是否开启。
开启算子重执行对业务的性能有影响,基于部分开源大模型测试的性能影响如下表所示,具体的影响跟训练模型通信算子有关,如果业务模型性能影响较大,请谨慎开启。
|
模型类型 |
用例名 |
未开启算子重执行时FPS |
开启算子重执行时FPS |
性能下降 |
|---|---|---|---|---|
|
LLama_7B_FastChat |
LLama_7B_FastChat_ID4324_for_PyTorch_bs2_2X16P_FA_bf16_RT2_PT21_perf |
3629.17 |
3627.27 |
-0.05% |
|
BLOOM_ID3985 |
BLOOM_ID3985_for_PyTorch_bs2048_2x16p_RT2_176B_bf16_FA_perf |
7699.445 |
7659.4295 |
-0.52% |
|
BLOOM_ID3985(带mc2) |
BLOOM_ID3985_for_PyTorch_bs2048_2x16p_RT2_176B_bf16_FA_mc2_perf |
7692.59876 |
7663.907871 |
-0.37% |
|
LLAMA2_ID4421 |
LLAMA2_ID4421_for_PyTorch_bs16_2x16p_RT2_7B_bf16_FA_NOMC2_perf |
1586 |
1591.3 |
0.33% |
|
LLama31_70B |
train_llama3_405b_server2_tp8_pp2_perf |
6.29 |
6.29 |
0.00% |
|
GPT_Moe_8K |
gpt_moe_server2_tp4_pp2_perf |
20.92 |
20.89 |
-0.14% |
|
LLAMA2_70B |
LLAMA2_ID0039_for_PyTorch_bs1_2x16p_RT2_70B_bf16_fa_tp2_pp1_perf |
2229.5 |
2219.86 |
-0.43% |
|
LLAMA2_ID0039_for_PyTorch_bs1_2x16p_RT2_70B_bf16_fa_tp2_pp2_perf |
1218.54 |
1214.84 |
-0.30% |
|
|
LLAMA2_ID0039_for_PyTorch_bs1_2x16p_RT2_70B_bf16_fa_tp8_pp2_perf |
360.59 |
359.02 |
-0.44% |
|
|
LLAMA2_ID0039_for_PyTorch_bs1_2x16p_RT2_70B_bf16_fa_tp2_pp4_perf |
591.95 |
589.94 |
-0.34% |
|
|
Open-Sora_ID4574 |
Open-Sora_ID4574_for_PyTorch_2x16p_bf16_bs1_120x256x256_perf |
9.77 |
10.02 |
2.56% |
|
beit2 |
Beit2_ID3448_for_Pytorch_False_bs120_2x16p_perf |
929858.63 |
935647.44 |
0.62% |
|
Megablocks |
Megablocks_ID4363_for_PyTorch_bs40_32p_mt03_perf |
1235.41 |
1220.49 |
-1.21% |
|
Qwen_ID4341_for_PyTorch |
Qwen_ID4341_for_PyTorch_bs64_32p_tp8_pp1_14b_perf |
783.89644 |
784.993139 |
0.14% |
|
Baichuan2_13B_ID4446_for_PyTorch |
Baichuan2_13B_ID4446_for_PyTorch_RT2_bs8_32p_tp8_pp1_fp16_perf |
801.84 |
802.51 |
0.08% |
开启算子重执行
开启算子重执行有2种方式:控制台设置或API接口设置。
- 控制台设置
在创建训练作业界面,当训练作业配置满足约束限制的条件时,才能开启(勾选)“算子重执行”。
开启算子重执行时,在创建训练作业的确认界面和训练作业详情页显示“已开启”。未配置或未开启时不展示此项。
请勿使用配置环境变量HCCL_OP_RETRY_ENABLE的方式开启算子重执行。因为平台组件无法感知是否开启,会导致算子重执行开启失败。
只要开启算子重执行,就会带来性能影响且无法关闭!您可以先开启算子重执行评估业务模型性能影响后,再选择是否开启。
图3 算子重执行-旧版创建训练作业
图4 算子重执行-新版创建训练作业
- API接口设置
通过API接口创建训练作业时,在“metadata”字段的“annotations”中传入fault-tolerance/hccl_op_retry字段。fault-tolerance/hccl_op_retry可取值为"true"或"false",当赋值为"true"时,表示开启算子重执行。参数值填写参考表2。
表2 参数说明 参数
是否必选
参数类型
描述
kind
是
String
参数解释:训练作业类型。
约束限制:不涉及。
取值范围:
默认取值:job。
annotations
否
Map<String,String>
参数解释:训练作业高级功能配置。
约束限制:可选取值如下:
请求参数填写参考如下样例。已开启算子重执行的训练作业,在查询训练作业详情时,也会返回"fault-tolerance/hccl_op_retry":"true"的字段。
{ "kind": "job", "metadata": { "annotations": { "fault-tolerance/hccl_op_retry": "true" } } }