
# 算子重执行
#### 什么是算子重执行
**算子重执行**是指当因为通信链路故障导致训练作业中通信算子报错，借助HCCL能力实现失败算子重新执行，保障训练作业不失败。在超节点大模型训练场景，集群通信链路存在闪断的情况，此时通信算子会执行报错，算子重执行可以很好的避免由于链路闪断故障造成的整个作业失败，提升训练作业的通信稳定性。
#### 场景描述
在昇腾新一代硬件Snt9b23构建的超节点集群中，每个超节点内部的服务器的NPU通过灵衢总线实现HCCS协议互联，形成一个高效的"超平面"网络。同时，两个超节点之间的服务器通过"参数面"网络实现互联。然而，运行在超节点集群中的作业需要依赖这两个网络进行分布式通信，而任何一个网络的闪断都会导致通信失败，进而引发业务失败的问题。为了解决这一问题，ModelArts推出了算子重执行的可配置能力，为用户提供了一个可靠的解决方案。
主要涉及"超平面"和"参数面"两种场景网络故障的算子重执行能力：
**场景一："参数面"网络故障**
硬件Snt9b23是一张卡两个DIE的硬件结构，而且两个DIE之间是通过SIO快速通道连接，如果DIE-1设备"参数面"链路彻底故障，DIE-1可以通过SIO链路借用DIE-0的"参数面"链路进行通信，开启算子重执行，可以借轨进行通信。如果DIE-1设备"参数面"链路出现闪断，开启算子重执行可以基于现有链路进行通信。
图1借轨通信   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002631426298.png "点击放大")
**场景二："超平面"网络故障**
昇腾硬件Snt9b23组成的超节点集群中"超平面"网络是通过两层交换机实现NPU互联，如果L1-L2链路故障，可以借助交换机的BGP切路算法进行通信链路重新规划，从而保证算子重执行成功，业务不中断。
图2BGP路径切换   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002631426306.png "点击放大")
 #### 约束限制
- 仅支持昇腾Snt9b23超节点的专属资源池。
- 仅支持使用PyTorch框架的预置镜像环境。
- 仅支持使用满卡配置的训练作业。
- 依赖昇腾组件，版本约束为：HDK版本大于等于24.1.RC3.5，CANN版本大于等于8.1.RC1。
- MindSpore框架暂不支持算子重执行。
 
#### 性能影响说明
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/warning_3.0-zh-cn.png)
只要开启算子重执行，就会带来性能影响且无法关闭！您可以先开启算子重执行评估业务模型性能影响后，再选择是否开启。
**开启算子重执行对业务的性能有影响**，基于部分开源大模型测试的性能影响如下表所示，具体的影响跟训练模型通信算子有关，如果业务模型性能影响较大，请谨慎开启。
表1开启算子重执行对业务的性能影响参考（两个超节点测试） 
| 模型类型                             | 用例名                                                                  | 未开启算子重执行时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_70B                       | LLAMA2_ID0039_for_PyTorch_bs1_2x16p_RT2_70B_bf16_fa_tp2_pp2_perf     | 1218.54      | 1214.84     | -0.30% |
| LLAMA2_70B                       | LLAMA2_ID0039_for_PyTorch_bs1_2x16p_RT2_70B_bf16_fa_tp8_pp2_perf     | 360.59       | 359.02      | -0.44% |
| LLAMA2_70B                       | 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接口设置。
- 控制台设置 在创建训练作业界面，当训练作业配置满足[约束限制]的条件时，才能开启（勾选）"算子重执行"。
  开启算子重执行时，在创建训练作业的确认界面和训练作业详情页显示"已开启"。未配置或未开启时不展示此项。
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/warning_3.0-zh-cn.png)
  请勿使用配置环境变量HCCL_OP_RETRY_ENABLE的方式开启算子重执行。因为平台组件无法感知是否开启，会导致算子重执行开启失败。
  只要开启算子重执行，就会带来性能影响且无法关闭！您可以先开启算子重执行评估业务模型性能影响后，再选择是否开启。
  图3算子重执行-旧版创建训练作业   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002661625587.png)
  图4算子重执行-新版创建训练作业   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002631426304.png "点击放大") 
- API接口设置 通过API接口创建训练作业时，在"metadata"字段的"annotations"中传入fault-tolerance/hccl_op_retry字段。fault-tolerance/hccl_op_retry可取值为"true"或"false"，当赋值为"true"时，表示开启算子重执行。参数值填写参考[表2]。
   表2参数说明 
  | 参数          | 是否必选 | 参数类型                 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  |:---|:---|:---|:---|
  | kind        | 是    | String               | **参数解释**：训练作业类型。 **约束限制**：不涉及。 **取值范围**： - job：普通作业。   - edge_job：边缘作业。   - hetero_job：异构作业。   - mrs_job：MRS作业。   - autosearch_job：自动化搜索作业。   - diag_job：诊断作业。   - visualization_job：可视化作业。    **默认取值**：job。                                                                                                                                                                                                                                                                                                                                          |
  | annotations | 否    | Map\<String,String\> | **参数解释**：训练作业高级功能配置。 **约束限制**：可选取值如下： - "job_template": "Template RL"（异构作业）。   - "fault-tolerance/job-retry-num": "3"（故障自动重启次数）。   - "fault-tolerance/job-unconditional-retry": "true"（无条件重启）。   - "fault-tolerance/hang-retry": "true"（卡死重启）。   - "jupyter-lab/enable": "true"（JupyterLab训练应用程序）。   - "tensorboard/enable": "true"（TensorBoard训练应用程序）。   - "mindstudio-insight/enable": "true"（MindStudio Insight训练应用程序）。   - "fault-tolerance/hccl_op_retry":"true"（算子重执行）。   |
     
  请求参数填写参考如下样例。已开启算子重执行的训练作业，在查询训练作业详情时，也会返回**"fault-tolerance/hccl_op_retry":"true"**的字段。
  ```
  {
      "kind": "job",
      "metadata": {
          "annotations": {
              "fault-tolerance/hccl_op_retry": "true"
          }
      }
  }
  ```
  
  
 
