Tensorflow
ModelArts训练服务支持了多种AI框架,并对不同的引擎提供了针对性适配,用户在使用这些框架进行模型训练时,训练的启动命令也需要做相应适配。本文介绍了Tensorflow框架启动原理、控制台上创建训练任务时后台对应的启动命令。
Tensorflow框架启动原理
规格和节点个数
下面以选择“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。
单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。
分布式作业时(即选择的节点数大于1),ModelArts会优先在相同节点上启动一个parameter server(以下简称ps)和一个worker,其中ps将分配一半的CPU和内存资源,即ps拥有“CPU: 36核 | 内存:256GB”的计算资源,worker拥有“GPU: 8*GP-Vnt1 | CPU: 36核 | 内存:256GB”的计算资源。
需要注意的是ps只会分配到CPU和内存资源,而worker除CPU和内存外,还可能分配到加速卡(纯CPU规格除外)。如本例中,每个worker将分配到八张GP Vnt1加速卡,如果ps和worker在相同节点上启动,则磁盘资源由ps和worker共享。
网络通信介绍
- 单机作业不涉及网络通信情况。
- 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。
节点内网络
节点内网络通信即同一个节点上的ps和woker间的网络通信,又可以分为两种情况:容器网络和主机网络。
- 在使用公共规格进行训练时,使用的是容器网络。
- 在使用专属池训练时,如果节点配置的是RoCE网卡,使用的是主机网络;如果节点配置的是Infiniband网卡,使用的是容器网络。
节点间网络
分布式作业存在节点间ps和worker的通信,当前ModelArts主要提供了Infiniband网卡或RoCE网卡,带宽高达100Gb/s。
启动命令
训练服务使用作业镜像中默认的python解释器启动训练脚本(即“which python”命令指向的可执行文件),启动时的工作目录(即pwd命令或python中“os.getcwd()”返回的目录)为“/home/ma-user/user-job-dir/<代码目录最外层目录名>”。
- 单机启动命令
python <启动文件相对路径> <作业运行参数>
- 启动文件相对路径:启动文件相对“/home/ma-user/user-job-dir/<代码目录最外层目录名>”的路径 。
- 作业运行参数:训练作业中配置的运行参数 。
图1 创建训练作业详情
例如控制台上设置如上图所示,则控制台后台执行命令如下:
python /home/ma-user/modelarts/user-job-dir/gpu-train/train.py --epochs 5
- 分布式启动命令
python --task_index ${VC_TASK_INDEX} --ps_hosts ${TF_PS_HOSTS} --worker_hosts ${TF_WORKER_HOSTS} --job_name ${MA_TASK_NAME} <启动文件相对路径> <作业运行参数>
- VC_TASK_INDEX: task序号,如0/1/2。
- TF_PS_HOSTS :ps节点地址数组,如[xx-ps-0.xx:TCP_PORT,xx-ps-1.xx:TCP_PORT],TCP_PORT是一个在5000~10000的随机端口。
- TF_WORKER_HOSTS:worker节点地址数组,如[xx-worker-0.xx:TCP_PORT,xx-worker-1.xx:TCP_PORT],TCP_PORT是一个在5000~10000的随机端口。
- MA_TASK_NAME:任务名称,ps或worker。
- 启动文件相对路径:启动文件相对“/home/ma-user/user-job-dir/<代码目录最外层目录名>”的路径。
- 作业运行参数:训练作业中配置的运行参数。
图2 创建训练作业详情
例如控制台上设置如上图所示,则控制台后台执行命令如下:
python --task_index "$VC_TASK_INDEX" --ps_hosts "$TF_PS_HOSTS" --worker_hosts "$TF_WORKER_HOSTS" --job_name "$MA_TASK_NAME" /home/ma-user/modelarts/user-job-dir/gpu-train/train.py --epochs 5