该文档主要验证了使用Arena在ACK上提交训练分布式训练任务的可行性,以及其训练性能验证。这里选用两个训练模式的任务进行实验的测算与比较,分别为基于TFJob的PS训练模式与基于MPIJob的Allreduce训练模式。
与AutoScaler弹出的ECS比起来,ECI的Pod所占用的底层资源只能是单GPU实例,无法使用hostNetwork、hostIPC、hostPID。所以自然也就无法使用NCCL之类的通信,只能依赖于容器网络的通信。
对于需要在ECI上运行的AI训练任务,需要指定selector到ECI上,然后tolerate ECI上的taints,然后需要禁用hostNetwork、hostIPC、hostPID,最后使用GPU实例的时候还需要指定Host实例规格。如果镜像过于大,则需要提前申请预留足够的临时空间,使用k8s.aliyun.com/eci-extra-ephemeral-storage的annotation进行设置临时存储空间的上限。
PS模式训练
提交命令
arena submit tf \ --name=tf-ps-sync-eci \ --gpus=1 \ --workers=3 \ --worker-image=registry-vpc.cn-beijing.aliyuncs.com/acs/gpushare-sample:tensorflow-1.5 \ --ps=1 \ --ps-image=registry-vpc.cn-beijing.aliyuncs.com/huozx/gpushare-sample:tensorflow-1.5-no-gpu \ --toleration all \ --useHostIPCfalse \ --useHostPIDfalse \ --useHostNetworkfalse \ --annotation=k8s.aliyun.com/eci-use-specs=ecs.gn6i-c4g1.xlarge \ "python tensorflow-sample-code/tfjob/docker/v1alpha2/distributed-mnist/main.py --max_steps 1000"
这是一个基于TFJob的PS训练模式的分布式训练任务,一共会拉起来4个Pod,1个Ps和3个Worker,同时在ECS上拉起同一个任务,比较其运行时间,ECS上其运行时间为4m22s,在ECI上运行其时间为5m3s,会有少量的时间增加。
AllReduce模式训练
提交命令
arena submit mpijob \ --name=mpi-allreduce-sync-eci \ --gpus=1 \ --memory=16Gi \ --cpu=4 \ --workers=8 \ --image=registry-vpc.cn-beijing.aliyuncs.com/huozx/bert-elastic-demo:v1.5-test \ --toleration all \ --annotation=k8s.aliyun.com/eci-use-specs=ecs.gn6i-c4g1.xlarge \ --useHostIPCfalse \ --useHostPIDfalse \ --useHostNetworkfalse \ --annotation=k8s.aliyun.com/eci-extra-ephemeral-storage=50Gi \ "horovodrun --log-level DEBUG --verbose -np 8 --min-np 1 --max-np 128 --host-discovery-script /etc/edl/discover_hosts.sh python /examples/elastic/pytorch/train_bert.py --epochs=5 --model=bert --batch-size 32"
这是一个基于MPIJob的AllReduce训练模式的分布式训练任务,一共会拉起来9个Pod,1个Launcher和8个Worker,同时在ECS上拉起同一个任务,比较其运行时间,在ECS上其运行时间为21m35s,在ECI上运行其时间为23m8s,会有少量的时间增加。