执行训练

概述

本节介绍如何基于迁移好的TensorFlow训练脚本,执行分布式训练。

使用前须知:

  1. 一个Device对应执行一个训练进程,当前不支持多进程在同一个Device上进行训练。
  2. 针对Atlas 训练系列产品,如果使用1台训练服务器(Server),要求实际参与集合通信的昇腾AI处理器数目只能为1/2/4/8,且0-3卡和4-7卡各为一个组网。使用2张卡或4张卡训练时,不支持跨组网创建设备集群。
  3. 针对Atlas 训练系列产品,Server集群场景下(即由集群管理主节点和一组训练服务器组成训练服务器集群),要求参与集合通信的昇腾AI处理器数目只能为1*n、2*n、4*n、8*n(其中n为参与训练的Server个数,上限为512)。且n为2的指数倍情况下,集群性能最好,建议用户优先采用此种方式进行集群组网。
  4. 针对Atlas A2训练系列产品:如果单Server中昇腾AI处理器的数量是8,Server集群场景(即由集群管理主节点和一组训练服务器组成训练服务器集群)下要求参与集合通信的昇腾AI处理器数目为(1~8)*n(其中n为参与训练的Server个数,上限为1024),其中,n为2的指数倍情况下,集群性能最好,建议用户优先采用此种方式进行集群组网,注意每个Sever中参与集合通信的昇腾AI处理器数量保持一致。
  5. 分布式训练场景下,HCCL会使用Host服务器的部分端口进行集群信息收集,需要操作系统预留该部分端口。默认情况下,HCCL使用60000-60015端口,若通过环境变量HCCL_IF_BASE_PORT指定了Host网卡起始端口,则需要预留以该端口起始的16个端口。

    操作系统端口号预留示例:sysctl -w net.ipv4.ip_local_reserved_ports=60000-60015

前提条件

在多Device上执行训练

在多个Device上进行分布式训练时,需要依次拉起所有训练进程(用户可以在不同的shell窗口依次拉起不同的训练进程),下面以单机两个Device的训练场景举例介绍如何拉起各训练进程。

  1. 拉起训练进程0。

    安装CANN软件后,使用CANN运行用户编译、运行时,需要以CANN运行用户登录环境,执行. ${install_path}/set_env.sh命令设置环境变量。并进行如下配置:

    # 请依据实际在下列场景中选择一个进行训练依赖包安装路径的环境变量设置。具体如下(以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=/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 /home/xxx.py 

    拉起训练进程前,需要对集群参数进行配置,其中集群参数相关的环境变量说明如下:

    • RANK_SIZE:参与分布式训练的Device数量。
    • RANK_ID:当前Device在集群中的唯一索引,需要与资源配置文件中的索引一致。
    • RANK_TABLE_FILE:资源配置文件路径。

    其他环境变量说明可参见环境变量参考

  2. 拉起训练进程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 /home/xxx.py
    • 除了以上方式,您还可以通过自定义启动脚本通过循环方式依次拉起多个训练进程,具体样例请参考链接
    • 若训练所在系统环境需要升级gcc(例如CentOS、Debian和BClinux系统),则此处动态库查找路径需要添加“${install_path}/lib64”,其中“{install_path}”为gcc升级安装路径。请参见5