
# 训练作业动态路由加速
在分布式训练场景下，由于多节点之间的数据交互频繁，网络通信效率往往成为性能瓶颈。传统方式下，训练作业的网络通信存在带宽利用率低、数据传输延迟高等问题，这会直接影响训练效率和资源利用率。针对这一技术挑战，用户可能会问：如何有效优化分布式训练中的网络通信性能？ModelArts提供了一项动态路由加速功能，通过智能优化训练作业的网络通信路径，显著提升分布式训练的性能表现。本文档将详细介绍如何在ModelArts平台上启用这一功能，涵盖使用预置训练框架和自定义镜像两种典型场景，并提供详细的配置要求和实用的操作建议，帮助用户充分释放分布式训练的性能潜力。
#### 约束限制
- 只有以下2种训练场景支持启用动态路由加速。
  - [场景一：使用Ascend-Powered-Engine预置框架+ MindSpore+NPU训练]
  
  - [场景二：使用自定义镜像+PyTorch+NPU训练]
   
- 训练作业使用的Python版本必须是3.7、3.8、3.9或3.10。
- 在启用动态路由加速之前，请联系ModelArts技术支持，确保集群的cabinet插件和调度权限已开启。
 
 #### 场景一：使用Ascend-Powered-Engine预置框架+ MindSpore+NPU训练
当使用Ascend-Powered-Engine预置框架创建训练作业时，可以参考[表1]创建训练作业实现动态路由加速。表中仅提供了关键参数的配置说明，其他参数请根据业务需要配置。
 表1使用预置框架创建训练作业 
| 配置阶段                                                                             | 参数名称  | 说明                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|
| 环境配置     | 创建方式  | 选择"自定义算法"。 训练作业支持使用用户自定义的算法或者AI Gallery订阅的算法创建训练作业。                                                                                                                                                                                                                                                                                                                            |
| 环境配置     | 启动方式  | 选择"预置框架"。 创建训练作业时的环境的启动方式。                                                                                                                                                                                                                                                                                                                                                       |
| 环境配置     | 引擎及版本 | 引擎选择"Ascend-Powered-Engine"，引擎版本选择MindSpore相关的版本。                                                                                                                                                                                                                                                                                                                                                                              |
| 环境配置     | 代码目录  | 选择训练代码文件所在的OBS目录。 动态路由加速通过改变rank编号来优化网络通信，因此代码中对rank的使用必须统一，避免因rank编号不一致导致通信异常。                                                                                                                                                                                                                                                                                                  |
| 环境配置     | 启动文件  | 选择代码目录中训练作业的Python启动脚本。                                                                                                                                                                                                                                                                                                                                                                                                        |
| 训练配置                                                                             | 环境变量  | 添加如下环境变量。 ``` ROUTE_PLAN = true ``` 不能配置环境变量"MA_RUN_METHOD"，确保是使用rank table file（RTF）文件启动训练作业的"启动文件"。                                                                                                                                                                                                                                                                            |
| 资源配置                   | 资源池   | 选择专属资源池。                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 资源配置                   | 实例规格  | 选择的实例规格必须满足以下条件： - 必须是节点满卡，否则可能会影响动态路由加速的效果。例如，在节点8卡场景下，每个节点必须是8卡，不能出现2卡或4卡的情况。  - 必须是Snt9b或Snt9b23的Ascend资源。   规格中描述了服务器类型、型号等信息。 |
| 资源配置                   | 实例数   | 选择的实例数必须大于或等于3。                                                                                                                                                                                                                                                                                                                                                                                                                |
   
 #### 场景二：使用自定义镜像+PyTorch+NPU训练
当使用自定义镜像和Ascend资源池创建训练作业时，可以参考[表2]创建训练作业实现动态路由加速。表中仅提供了关键参数的配置说明，其他参数请根据业务需要配置。
 表2使用自定义镜像创建训练作业 
| 配置阶段 | 参数名称     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|
| 环境配置 | 创建方式     | 选择"自定义算法"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 环境配置 | 启动方式     | 选择"自定义"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 环境配置 | 镜像       | 选择用于训练的自定义镜像。必须是使用PyTorch框架的训练镜像。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 环境配置 | 代码目录（可选） | 选择训练代码文件所在的OBS目录。 动态路由加速通过改变rank编号来优化网络通信，因此代码中对rank的使用必须统一，避免因rank编号不一致导致通信异常。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 环境配置 | 启动命令     | 输入镜像的Python启动命令。 其中，要修改训练启动脚本中的如下代码，不同NPU硬件的修改值有差异。 - Snt9b场景 ``` MASTER_ADDR="${MA_VJ_NAME}-${MA_TASK_NAME}-${MA_MASTER_INDEX:-0}.${MA_VJ_NAME}" NODE_RANK="${RANK_AFTER_ACC:-$VC_TASK_INDEX}" ```   - Snt9b23场景 ``` MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" NODE_RANK="${RANK_AFTER_ACC:-$VC_TASK_INDEX}" ```    |
| 训练配置 | 环境变量     | 添加如下环境变量。 ``` ROUTE_PLAN = true ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| 资源配置 | 资源池      | 选择专属资源池。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 资源配置 | 实例规格     | 选择的实例规格必须满足以下条件： - 必须是节点满卡，否则可能会影响动态路由加速的效果。例如，在节点8卡场景下，每个节点必须是8卡，不能出现2卡或4卡的情况。  - 必须是Snt9b或Snt9b23的Ascend资源。                                                                                                                                                                                                                                             |
| 资源配置 | 实例数      | 选择的实例数必须大于或等于3。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   
#### 查看动态路由加速的训练日志
当使用Ascend资源池训练时，训练过程中可以在训练作业详情页的"日志"页签中查看路由状态是否启用，以及查询各个Rank的日志信息。
1. 登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)。
2. 在左侧导航栏中，选择"模型开发与训练 \> 模型训练"（旧版控制台："模型训练 \> 训练作业"）。
3. 在训练作业列表中，单击目标作业，进入训练作业详情页。
4. 选择"日志"页签。 如[图1]所示，可以查看训练作业已启用动态路由，还可以根据Rank-ID搜索日志。
   图1查看动态路由加速日志   
   ![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002229127396.png "点击放大") 
 
