执行单Device训练

概述

本节介绍如何基于迁移好的TensorFlow训练脚本,在裸机环境的单Device上执行训练。如果没有进行模型迁移,您也可以从https://gitee.com/ascend/modelzoo获取可在昇腾AI处理器直接运行的sample,体验训练过程。

一个Device对应执行一个训练进程,当前不支持多进程在同一个Device上进行训练。

前提条件

在单Device上执行训练

  1. 配置训练进程启动依赖的环境变量。

    除此之外,还需进行如下配置:
    # 请依据实际在下列场景中选择一个进行训练依赖包安装路径的环境变量设置。具体如下(以HwHiAiUser安装用户为例):
    # 场景一:昇腾设备安装部署开发套件包Ascend-cann-toolkit(此时开发环境可进行训练任务)。
    . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh 
    # 场景二:昇腾设备安装部署软件包Ascend-cann-nnae。
    . /home/HwHiAiUser/Ascend/nnae/set_env.sh 
    
    # tfplugin包依赖。
    . /home/HwHiAiUser/Ascend/tfplugin/set_env.sh
    
    # 若运行环境中存在多个python3版本时,需要在环境变量中配置python的安装路径。如下配置以安装python3.7.5为例,可根据实际修改。
    export PATH=/usr/local/python3.7.5/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
    
    # 当前脚本所在路径,例如:
    export PYTHONPATH="$PYTHONPATH:/root/models"
    
    export JOB_ID=10086        # 训练任务ID,用户自定义,仅支持大小写字母,数字,中划线,下划线。不建议使用以0开始的纯数字
    export ASCEND_DEVICE_ID=0  # 指定昇腾AI处理器的逻辑ID,单P训练也可不配置,默认为0,在0卡执行训练
    

    上述仅列出训练进程启动必配的环境变量,相关介绍及更多环境变量说明请参考环境变量参考

    若训练所在系统环境需要升级gcc(例如CentOS、Debian和BClinux系统),则“LD_LIBRARY_PATH”配置项处动态库查找路径需要添加“${install_path}/lib64”,其中“{install_path}”为gcc升级安装路径。请参见5

  2. 执行训练脚本拉起训练进程,例如:

    python3 /home/xxx.py

  3. (可选)为了后续方便定位问题,用户也可以通过环境变量使能Dump计算图。

    export DUMP_GE_GRAPH = 2                  # 1:全量dump;2:不含有权重等数据的基本版dump;3:只显示节点关系的精简版dump
    export DUMP_GRAPH_PATH = /home/dumpgraph  # 默认dump图生成在脚本执行目录,可以通过该环境变量指定dump路径

    训练任务启动后,会在DUMP_GRAPH_PATH指定的路径下生成若干dump图文件,包括”.pbtxt”和“.txt”dump文件。由于dump的数据文件较多且文件都较大,若非问题定位需要,可以不生成dump图。

检查执行结果

  1. 检查训练过程是否正常,Loss是否收敛。

  2. 训练结束后,一般会生成如下目录和文件。

    • 生成model目录:存放checkpoint文件和模型文件,是否生成该目录和脚本实现有关。

    • 在脚本执行目录下生成kernel_meta:用于存放算子的.o及.json文件,该文件可用于GE/FE问题定位,默认目录下没有文件,可以修改训练脚本,将运行参数op_debug_level传入3,从而保留.o和.json文件。

问题定位

如果运行失败,通过日志分析并定位问题。

Host侧日志路径:$HOME/ascend/log/plog/plog-pid_*.log,$HOME为Host侧用户根目录。

Device侧日志路径:$HOME/ascend/log/device-id/device-pid_*.log。

日志格式:
[Level] ModuleName(PID,PName):DateTimeMS [FileName:LineNumber]LogContent

了解更多介绍,请参考日志参考

一般通过ERROR级别的日志,识别问题产生模块,根据具体日志内容判定问题产生原因。

图1 错误日志样例
表1 问题定位思路

ModuleName

出错流程

解决思路

系统类报错

环境与版本配套错误

系统类报错,优先排查版本配套与系统安装是否正确。

数据预处理

数据预处理问题

NA

GE

GE图编译或校验问题

校验类报错,通常会给出明确的错误原因,此时需要针对性地修改网络脚本,以满足相关要求。

FE

算子选择或算子融合问题

NA

TEFUSION

算子编译问题

NA

RUNTIME

环境异常导致初始化问题或图执行问题

对于初始化异常,优先排查当前运行环境配置是否正确,当前环境是否有他人抢占。