本节介绍如何基于迁移好的TensorFlow训练脚本,在裸机环境的多个Device上执行训练。
使用前须知:
在多个Device上进行分布式训练时,需要依次拉起所有训练进程,下面以单机两个Device的训练场景举例介绍如何拉起各训练进程。
用户可以在不同的shell窗口依次拉起不同的训练进程:
export PYTHONPATH=/home/test:$PYTHONPATH
export JOB_ID=10086
export ASCEND_DEVICE_ID=0
export RANK_ID=0
export RANK_SIZE=2
export RANK_TABLE_FILE=/home/test/rank_table_2p.json
python3.7 /home/xxx.py
export PYTHONPATH=/home/test:$PYTHONPATH
export JOB_ID=10086
export ASCEND_DEVICE_ID=1
export RANK_ID=1
export RANK_SIZE=2
export RANK_TABLE_FILE=/home/test/rank_table_2p.json
python3.7 /home/xxx.py
每个step打印N条数据,说明脚本正常执行。
当开启环境变量DUMP_GE_GRAPH时,会生成GE的dump图文件。
export DUMP_GE_GRAPH=2
在dump下来的图文件目录下,搜索到包含HcomBroadcast和HcomAllReduce算子:
在$HOME/ascend/log/plog下查看Host侧日志plog_*.log,$HOME为Host侧用户根目录。
在单Device执行成功,多单Device执行失败的情况下,一般为集合通信的问题,如图3所示。可以参考集合通信常见案例进行问题处理。
如果运行失败,通过日志分析并定位问题。
Host侧日志路径:$HOME/ascend/log/plog/plog_*.log,$HOME为Host侧用户根目录。
Device侧日志路径:$HOME/ascend/log/device-id/device-id_*.log。
[Level] ModuleName(PID,PName):DateTimeMS LogContent
一般通过ERROR级别的日志,识别问题产生模块,具体日志内容判定问题产生原因。
ModuleName |
出错流程 |
解决思路 |
---|---|---|
系统类报错 |
环境与版本配套错误 |
系统类报错,优先排查版本配套与系统安装是否正确。 |
数据预处理 |
数据预处理问题 |
NA |
GE |
GE图编译或校验问题 |
校验类报错,通常会给出明确的错误原因,此时需要针对性地修改网络脚本,以满足相关要求。 |
FE |
算子选择或算子融合问题 |
NA |
TEFUSION |
算子编译问题 |
NA |
RUNTIME |
环境异常导致初始化问题或图执行问题 |
对于初始化异常,优先排查当前运行环境配置是否正确,当前环境是否有他人抢占。 |