---
title: 执行训练
description: "通过环境变量方式配置好参与分布式训练的资源信息后，可参考本节启动训练进程，执行训练。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_000034.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_000034.html
indexId: 144648f2a379fb6077eb494eaaaa17b9616676895442cc15f3136caf98430dae73
---
# 执行训练

通过环境变量方式配置好参与分布式训练的资源信息后，可参考本节启动训练进程，执行训练。

#### 前提条件

- 已了解  使用前须知
。
- 已准备好迁移成功的TensorFlow训练脚本和对应数据集。
- 已在每个参与训练的Device上完成资源信息环境变量的配置，请参考  通过环境变量配置资源信息
。
- 多Device上执行训练时，请确保不同Device上执行的模型相同，否则业务会执行失败，详细可参见  多Device上执行模型不同导致应用程序出错
。


#### 单机多卡场景

多Device上执行训练时，需要依次在每个参与训练的Device上启动训练进程。

假设只有一个AI Server节点，节点上有8个Device，开发者可以构造启动脚本循环启动每个Device上的训练进程。

1. 构造启动脚本，假设命名为tf_start_8p.sh，示例如下：
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 配置CANN软件环境变量，以root用户默认安装路径为例 source /usr/local/Ascend/cann/set_env.sh # TF Adapter Python库，其中${TFPLUGIN_INSTALL_PATH}为TF Adapter软件包安装路径 export PYTHONPATH=${TFPLUGIN_INSTALL_PATH}:$PYTHONPATH export JOB_ID=10087 # 用户自定义，指定任务ID，可以包含大小写字母、数字、中划线或下划线 for((CURRENT_DEVICE=0;CURRENT_DEVICE<8;CURRENT_DEVICE++)); do export ASCEND_DEVICE_ID=${CURRENT_DEVICE} # 执行训练脚本，训练脚本路径、名称及其他输入参数请根据实际情况替换 nohup python3 /home/test/main.py > /home/test/train_$ASCEND_DEVICE_ID.log 2>&1 & done
（可选）
  训练进程启动前，您还可以配置如下辅助功能的环境变量。
  - 为了后续方便定位问题，启动训练脚本前用户也可以通过环境变量使能dump计算图。
    1 2 export DUMP_GE_GRAPH=2 # 1：全量dump；2：不含有权重等数据的基本版dump；3：只显示节点关系的精简版dump export DUMP_GRAPH_PATH=/home/dumpgraph # 通过该环境变量指定dump图文件存储路径

    训练任务启动后，会在${DUMP_GRAPH_PATH}/pid_${pid}_deviceid_${deviceid}路径下生成若干dump图文件，包括后缀为“.pbtxt”和“.txt”的dump文件。由于dump的数据文件较多且文件都较大，若非问题定位需要，可以不生成dump图。

  - 若开发者期望程序编译运行过程中产生的文件落盘到统一存储目录，可通过环境变量ASCEND_CACHE_PATH与ASCEND_WORK_PATH分别设置共享文件的存储路径与进程独享文件的存储路径。
    1 2 export ASCEND_CACHE_PATH=/repo/task001/cache export ASCEND_WORK_PATH=/repo/task001/172.16.1.12_01_03

    关于环境变量ASCEND_CACHE_PATH与ASCEND_WORK_PATH的使用约束以及落盘文件说明，可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref_07_0001.html)》中的“安装配置相关”章节。

    配置这些环境变量前，请使用env命令查询ASCEND_CACHE_PATH与ASCEND_WORK_PATH环境变量是否已存在，建议系统各功能使用统一的规划路径。


2. 执行脚本，启动训练进程。
  1 bash tf_start_8p.sh


#### 多机多卡场景

多Device上执行训练时，需要依次在每个参与训练的Device上启动训练进程。

假设参与分布式训练的AI Server节点数量为2，每个AI Server节点有8个Device，开发者可以参见如下步骤构造启动脚本，循环启动每个Device上的训练进程。

1. 构造启动脚本，假设命名为tf_start_16p.sh，示例如下：
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # 配置CANN软件环境变量，以root用户默认安装路径为例 source /usr/local/Ascend/cann/set_env.sh # TF Adapter Python库，其中${TFPLUGIN_INSTALL_PATH}为TF Adapter软件包安装路径 export PYTHONPATH=${TFPLUGIN_INSTALL_PATH}:$PYTHONPATH # 获取输入参数 for para in $* do if [[ $para == --server_index* ]];then server_index=`echo ${para#*=}` elif [[ $para == --devices_num* ]];then devices_num=`echo ${para#*=}` fi done rank_size=${devices_num} linux_num=$servers_num export JOB_ID=10087 # 用户自定义，指定任务ID，可以包含大小写字母、数字、中划线或下划线 for((CURRENT_DEVICE=$((rank_size*server_index));CURRENT_DEVICE<$((((server_index+1))*rank_size));CURRENT_DEVICE++)); do export ASCEND_DEVICE_ID=`expr ${CURRENT_DEVICE} - $((rank_size*server_index))` # 执行训练脚本，训练脚本路径、名称及其他输入参数请根据实际情况替换 nohup python3 /home/test/main.py > /home/test/train_$ASCEND_DEVICE_ID.log 2>&1 & done
（可选）
  训练进程启动前，您还可以配置如下辅助功能的环境变量。
  - 为了后续方便定位问题，启动训练脚本前用户也可以通过环境变量使能dump计算图。
    1 2 export DUMP_GE_GRAPH=2 # 1：全量dump；2：不含有权重等数据的基本版dump；3：只显示节点关系的精简版dump export DUMP_GRAPH_PATH=/home/dumpgraph # 通过该环境变量指定dump图文件存储路径

    训练任务启动后，会在${DUMP_GRAPH_PATH}/pid_${pid}_deviceid_${deviceid}路径下生成若干dump图文件，包括后缀为“.pbtxt”和“.txt”的dump文件。由于dump的数据文件较多且文件都较大，若非问题定位需要，可以不生成dump图。

  - 若开发者期望程序编译运行过程中产生的文件落盘到统一存储目录，可通过环境变量ASCEND_CACHE_PATH与ASCEND_WORK_PATH分别设置共享文件的存储路径与进程独享文件的存储路径。
    1 2 export ASCEND_CACHE_PATH=/repo/task001/cache export ASCEND_WORK_PATH=/repo/task001/172.16.1.12_01_03

    关于环境变量ASCEND_CACHE_PATH与ASCEND_WORK_PATH的使用约束以及落盘文件说明，可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref_07_0001.html)》中的“安装配置相关”章节。

    配置这些环境变量前，请使用env命令查询ASCEND_CACHE_PATH与ASCEND_WORK_PATH环境变量是否已存在，建议系统各功能使用统一的规划路径。


2. 执行脚本，启动训练进程。
  1 2 3 4 # 启动节点0上的训练进程 bash tf_start_16p.sh --server_index=0 --devices_num=8 # 启动节点1上的训练进程 bash tf_start_16p.sh --server_index=1 --devices_num=8
