执行分布式训练
概述
本节介绍如何基于迁移好的TensorFlow训练脚本,在裸机环境的多个Device上执行训练。
使用前须知:
- 一个Device对应执行一个训练进程,当前不支持多进程在同一个Device上进行训练。
- 如果使用1台训练服务器(Server),要求实际参与集合通信的昇腾AI处理器数目只能为1/2/4/8,且0-3卡和4-7卡各为一个组网,使用2张卡或4张卡训练时,不支持跨组网创建设备集群。
- 如果使用Server集群,即由集群管理主节点+一组训练服务器(Server)组成训练服务器集群,要求参与集合通信的的昇腾AI处理器数目为8*n(其中n为参与训练的Server个数,最大支持512)。且n为2的指数倍情况下集群性能最好,建议用户优先采用此种方式进行集群组网。
前提条件
- 已准备好包含多个可用的昇腾AI处理器的裸机环境。环境搭建请参见《CANN 软件安装指南》。
- 已准备好迁移好的TensorFlow训练脚本和对应数据集。
- 已准备好昇腾AI处理器资源信息配置文件,请参考准备资源配置文件。
在多Device上执行训练
在多个Device上进行分布式训练时,需要依次拉起所有训练进程,下面以单机两个Device的训练场景举例介绍如何拉起各训练进程。
用户可以在不同的shell窗口依次拉起不同的训练进程:
- 拉起训练进程0:安装CANN软件后,使用CANN运行用户编译、运行时,需要以CANN运行用户登录环境,执行. ${install_path}/set_env.sh命令设置环境变量。并进行如下配置:
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
- 拉起训练进程1:安装CANN软件后,使用CANN运行用户编译、运行时,需要以CANN运行用户登录环境,执行. ${install_path}/set_env.sh命令设置环境变量。并进行如下配置:
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
- 除了以上方式,您还可以通过自定义启动脚本通过循环方式依次拉起多个训练进程,具体样例请参考链接。
- 若训练所在系统环境需要升级gcc(例如CentOS、Debian和BClinux系统),则此处动态库查找路径需要添加“${install_path}/lib64”,其中“{install_path}”为gcc升级安装路径。请参见5。
检查执行结果
- 检查运行结果。
每个step打印N条数据,说明脚本正常执行。
图1 每个step打印8条数据当开启环境变量DUMP_GE_GRAPH时,会生成GE的dump图文件。
export DUMP_GE_GRAPH=2
在dump下来的图文件目录下,搜索到包含HcomBroadcast和HcomAllReduce算子:
图2 GE的dump图 - 如果运行失败,和单Device训练一样,通过日志分析并定位问题。
在$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 |
环境异常导致初始化问题或图执行问题 |
对于初始化异常,优先排查当前运行环境配置是否正确,当前环境是否有他人抢占。 |