单机单卡和单机多卡训练

本章节介绍通过环境变量设置资源信息,启动训练任务,包含单机单卡和单机多卡场景。

前提条件

使用该方案启动训练任务,需要设置如下环境变量。详细的配置环境变量的方法可参考little-demo的配置文件;关于环境变量的说明可参见配置环境变量

CM_CHIEF_IP={host_ip}
CM_CHIEF_PORT=60000
CM_CHIEF_DEVICE=0
CM_WORKER_IP={host_ip}
CM_WORKER_SIZE=8

操作步骤

  1. 可选:如果需要自定义卡的数量,需要修改local_rank_size=自定义卡的数量CM_WORKER_SIZE=local_rank_size * 训练节点数

    • 自定义卡的数量≤容器(或进程)中可见的卡的数量。
    • 若是以特权模式启动的容器,容器中可见卡的数量=环境中卡的总数;若是以非特权模式启动的容器,容器中可见卡的数量 = 启动容器时实际挂卡的数量。
    • 若是要进一步控制训练进程中可见卡的数量,可通过环境变量ASCEND_RT_VISIBLE_DEVICES来指定当前容器中可见的卡哪些对当前进程可见。该环境变量通常可指定参与训练的Device。
    • 若是当前进程可见卡的数量为8,支持的自定义卡数量包括1、2、4、8。

    下面的示例以环境中可见8卡为例,卡逻辑ID列表为[0,1,2,3,4,5,6,7]

    • local_rank_size = 1,则export CM_CHIEF_DEVICES=[0,1,2,3,4,5,6,7]的任一卡号。
    • local_rank_size = 2,取值说明如下:

      连续用卡

      export CM_CHIEF_DEVICES=0

      表示0、1卡参与训练

      export CM_CHIEF_DEVICES=4

      表示4、5卡参与训练

      非连续用卡

      export ASCEND_RT_VISIBLE_DEVICES=1,3,5,7

      如果创建容器的时候是连续卡,要使用非连续卡,此时需要设置该环境变量。

      此时环境可见卡的逻辑ID列表[1,3,5,7]

      export CM_CHIEF_DEVICES=0

      表示1、3卡参与训练

      export CM_CHIEF_DEVICES=1

      表示3、5卡参与训练

    • local_rank_size = 4,取值说明如下:
      • export CM_CHIEF_DEVICES=0(表示0、1、2、3卡参与训练)
      • export CM_CHIEF_DEVICES=4(表示4、5、6、7卡参与训练)
    • local_rank_size = 8,取值说明如下:

      export CM_CHIEF_DEVICES=0(表示0、1、2、3、4、5、6、7、8卡参与训练)

    Rec SDK默认使用8卡训练,16卡使能需要执行以下命令。

    1
    2
    3
    4
    for pdev in `lspci -vvv|grep -E "^[a-f]|^[0-9]|ACSCtl"|grep ACSCtl -B1|grep -E "^[a-f]|^[0-9]"|awk '{print $1}'` 
    do
    setpci -s $pdev ECAP_ACS+06.w=0000 
    done
    

  2. 直接在启动命令后传入配置Master节点的Host侦听IP,命令格式如下。

    bash run.sh main.py {host_ip}  
    • 只有在启动命令后传入合法可用的IP地址,才可通过环境变量设置资源信息的方式启动训练任务。
    • 若环境中同时存在资源配置文件,此时不传IP或者IP错误,则会通过资源配置文件的方式,启动训练任务。
    • 若环境中不存在资源配置文件,此时不传IP或者IP错误,系统会提示“the rank table file does not exist”,此时用户可以通过配置资源文件或者传入符合要求的IP后,重新启动训练任务。

    正常开始执行,打印信息参考如下。

    ip: {host_ip} available.
    The ranktable solution is removed.
    CM_CHIEF_IP={host_ip}  
    CM_CHIEF_PORT=60000
    CM_CHIEF_DEVICE=0
    CM_WORKER_IP={host_ip}  
    CM_WORKER_SIZE=8
    ASCEND_VISIBLE_DEVICES=0-8
    py is main.py
    use horovod to start tasks
    ...

    执行完成,日志信息显示参考如下。

    1
    2
    3
    ASC manager has been destroyed.
    MPI has been destroyed.
    Demo done!