直接使用
请打开基于介绍如何使用命令行工具提交DLC任务,并点击右上角 “ 在DSW中打开” 。
概述
PAI-DLC(Deep Learning Containers)是基于阿里巴巴容器服务ACK(Alibaba Cloud Container Service for Kubernetes)的深度学习训练平台,为您提供灵活、稳定、易用和极致性能的深度学习训练环境。
除了可以在PAI的控制台使用界面提交任务,PAI平台还提供了完善的SDK和OpenAPI,实现基于代码提交任务,使得PAI-DLC更灵活的应用到您的日常生产。
本文将介绍如何使用PAI-DLC提供的CLI,实现训练任务的提交。
如果您需要通过界面提交PAI-DLC公共资源组或专有资源组任务,请参见DLC命令行工具使用手册。
前提条件
- 开通PAI-DLC,并完成授权,详情请参见云产品依赖与授权:DLC。
- 如果要提交预付费的训练任务,准备资源组集群(本文使用DLC专有资源组进行演示)
- 已获取阿里云账户的AccessKey ID和AccessKey Secret,详情请参见获取AccessKey。
步骤一:安装DLC CLI
实际使用的时候,可以把DLC的命令行工具放入 /usr/local/bin中,chmod赋予DLC命令行执行的权限,并且使用下面的命令进行关联
exportdlc=/usr/local/bin/dlc
准备AI工作空间(必须)
工作空间是PAI的顶层概念,为团队提供统一的计算资源管理及人员权限管理能力,目的就是为AI开发者提供支持团队协作的全流程开发工具及AI资产管理能力。
PAI平台在开通时,会自动给用户 创建默认的工作空间
准备镜像(必须)
进行训练任务,需要明确指定计算节点所使用的镜像。PAI-DLC支持选择使用不同类型的镜像:
- 社区镜像:由社区提供的标准镜像,不同的镜像的详情请参见社区镜像版本详情。
- PAI平台镜像:由阿里云PAI产品提供的多种官方镜像,支持不同的资源类型、Python版本及深度学习框架TensorFlow和PyTorch,镜像列表请参见公共镜像列表。
- 用户自定义镜像:可选择使用您添加到PAI的自定义的镜像,选择前,您需要先将自定义镜像添加到PAI中,操作详情请参见查看并添加镜像。
- 镜像地址:可选择使用您自定义的镜像,选择镜像地址后,您需要在配置框中配置公网环境下可访问的Docker Registry Image URL。
准备数据集(可选)
高质量的数据集是高精度模型的基础,是数据准备的核心目标。PAI平台提供了数据集管理模块,支持将各类数据(本地数据、阿里云存储中的数据等)注册为数据集,也支持扫描OSS文件夹生成索引数据集,为模型训练做准备。
准备代码源(可选)
进行模型训练任务提交等操作时,通常您需要提供自己的训练代码。PAI为您提供代码配置功能,便于您将需要使用的代码仓库创建为AI资产,方便在多个任务中引用。
步骤二:提交训练任务
以上准备好了训练需要的资源和配置,接下来会进行任务的提交。关于接口的更多说明,请参见API参考。
配置命名行工具
在使用命令行工具之前,需要配置命令行工具,输入用户的ak,region以及所对应的region的DLC服务的endpoint
dlc config --access_id {.ak-id } \ --access_key {.ak-secret} \ --endpoint 'pai-dlc.{region-id}.aliyuncs.com' \ # region-id 例如cn-beijing/cn-hangzhou --region cn-hangzhou
创建预付费作业
独占资源组(也称为预付费资源组)是PAI推出的新功能,正在邀测阶段,如有需要,可以联系PAI团队。在预付费资源组中的资源为用户独占,用户可以提交DLC任务或者DSW实例,并且指定任务或者实例的资源量。当提交的任务超过资源组中的总量时,会自动排队,同时用户可以修改排队中的任务优先级来影响任务被执行的先后顺序。
值得注意的是,提交到资源组中的作业会遵循All-Or-Nothing(也叫Gang Scheduling)的原则,也即只有作业要求的所有worker都能得到资源保障的请求下,才会被调度执行;避免部分worker提交到集群,造成资源浪费。
下面的sample命令,就是提交一个DLC预付费的训练任务到46099这个工作空间,并且将任务调度到rgo80s1uv05bplin这个预付费资源组上面
dlc submit tf --name=test_2022 \--workers=1 \ --worker_image=registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04 \ --command="python /root/code/horovod/tf1.py" \ --workspace_id='46099' \ --resource_id='rgo80s1uv05bplin' \ --worker_cpu="2" \ --worker_memory='1Gi' \ --code_source='code-738c8edd0e4a47e4b7fd805ec05914d7'
查看任务状态并获取日志:
查看任务的日志,需要指定任务的job_id以及pod_id。下面拿上面已经提交的任务为例
dlc logs dlcylztabt7alg7p dlcylztabt7alg7p-worker-0 --max_events_num=20
创建后付费多机分布式训练作业
后付费任务是DLC最先支持的一种业务模式,用户可以按需拉起所需要的资源,并且任务结束之后,资源就全部释放。
本文以Tensorflow多机分布式任务为例,展示如何使用DLC命令行工具创建多机分布式任务
下面的命令会创建一个2 worker,1 ps, 1 chief的TensorFlow多机分布式训练任务
./dlc submit tfjob --name=test2022 --workers=2 --worker_image=registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04 \ --command="python /root/code/horovod/tf-ps-worker-good7.py" \ --workspace_id='35206' \ --worker_spec='ecs.g6.large' \ --code_source="code-203baa3bf5404f04969501fdd8ec2950" \ --ps=1 \ --ps_image=registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04 \ --ps_spec='ecs.g6.large' \ --chief=1 \ --chief_image=registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04 \ --chief_spec='ecs.g6.large' \ --success_policy=ChiefWorker
对于TFJob来说,现在支持让用户自定义输入success policy:
--success_policy=ChiefWorker 这种模式下,TF分布式多机任务中的Chief的pod如果成功,那么就认为整个任务成功,任务会结束
--success_policy=AllWOrkers (Default) 这种模式下,TF分布式多机任务,必须所有的Workers全部成功,才会认为整个任务成功
查看任务yaml
可以用get job命令
./dlc get job dlc1fifr7w6ycnp
Stop 任务
可以用stop job命令
./dlc stop job dlc1fif7r7w6ycnq
步骤三:查看训练任务
当完成以上的PAI-DLC任务提交之后,可通过以下代码,实时查看任务运行的状态。 命令行工具支持多种维度去查询任务,具体可以用dlc get job -h查看详细参数列表,这里展示查询前面提交任务使用的预付费资源组中处于'Running'状态的任务
dlc get job --resource_id='rgo80s1uv05bplin' --status='Running'