PAI-DLC可以帮助您快捷地创建单机或分布式训练任务,其底层使用Kubernetes拉起计算节点。这避免了您手动购买并启动机器,同时无需改变使用习惯。适用于需要快速启动训练任务的用户,支持多种深度学习框架,并提供灵活的资源配置选项。
前提条件
使用主账号开通PAI并创建工作空间。登录PAI控制台,在页面上方开通地域,然后一键授权和开通产品,详情见开通PAI并创建工作空间。
操作账号授权。当使用主账号操作时,可跳过此步。当使用RAM账号时,需要具有算法开发、算法运维、空间管理员中任意一个角色,操作账号授权请参见管理工作空间 > 成员角色配置。
通过控制台创建任务
初次使用DLC的用户,推荐您使用控制台的方式创建任务,除此之外,DLC还提供了通过SDK或命令行创建任务的方式。
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务。
分别在以下几个区域,配置训练任务相关参数。
基本信息
配置任务名称和标签。
环境信息
参数
描述
参数
描述
节点镜像
除了可以选择官方镜像外,还支持以下镜像类型:
自定义镜像:可使用添加到PAI的自定义镜像,镜像仓库需要设置为公开拉取状态,或将镜像存储在容器镜像服务ACR中,详情请参见自定义镜像。
当资源配额选择灵骏智算资源并使用自定义镜像时,为充分利用灵骏的高性能RDMA网络,需手动安装RDMA,详情请参见RDMA:使用高性能网络进行分布式训练。
镜像地址:支持配置公网环境下可访问的自定义镜像或官方镜像地址。
如果是私有镜像地址,需要单击输入账号密码,并配置镜像仓库用户名和密码
提升镜像拉取速度,可参见镜像加速。
数据集
数据集用于提供模型训练时所需的数据文件,支持以下两种数据集类型:
自定义数据集:您可以创建自定义数据集来存放训练所需的数据文件,支持设置是否只读,支持在版本列表中选择数据集版本。
公共数据集:PAI预置有公开的数据集,只支持只读挂载模式。
挂载路径:表示数据集挂载到DLC容器的路径,例如
/mnt/data
,在代码中您可以检索该路径获取数据集。更多挂载配置信息请参见在DLC训练任务中使用云存储。如果配置了CPFS类型的数据集,则DLC需要配置专有网络VPC,且与CPFS的VPC一致。否则,提交的任务可能长时间处于环境准备中状态。
直接挂载
您也可以通过直接挂载数据源路径来读取需要的数据,或存放过程及结果文件。
支持数据源类型:OSS、通用型NAS、极速型NAS、BMCPFS(仅灵骏智算资源可用)。
高级配置:不同数据源类型可通过高级配置实现特性功能,如:
OSS:在高级配置中设置
{"mountType":"ossfs"}
,以使用ossfs方式挂载OSS存储。通用型NAS:在高级配置中设置nconnect参数,以提升DLC容器访问NAS的吞吐性能。例如
{"nconnect":"4"}
。
更多内容请参见在DLC训练任务中使用云存储。
启动命令
设置任务启动命令,支持Shell命令,并且DLC会自动注入Pytorch和Tensorflow通用环境变量,如
MASTER_ADDR
、WORLD_SIZE
,可以通过$环境变量名
来获取,启动命令示例如下:运行Python:
python -c "print('Hello World')"
torch多机多卡分布式训练:
python -m torch.distributed.launch \ --nproc_per_node=2 \ --master_addr=${MASTER_ADDR} \ --master_port=${MASTER_PORT} \ --nnodes=${WORLD_SIZE} \ --node_rank=${RANK} \ train.py --epochs=100
设置shell文件路径作为启动命令:
/ml/input/config/launch.sh
资源信息
参数
描述
参数
描述
资源类型
默认为通用计算,仅华北6(乌兰察布)、新加坡、华南1(深圳)、华北2(北京)、华东2(上海)和华东1(杭州)地域支持选择灵骏智算。
资源来源
公共资源:
计费模式:按量付费。
适用场景:公共资源可能会遇到排队延时,因此,建议在任务量相对较少,任务时效性要求不高的场景下使用。
使用限制:支持运行的资源上限为GPU 2卡、CPU 8核,如果需要超出此上限,请联系您的商务经理来提升资源限制。
资源配额:包括通用计算资源或灵骏智算资源
计费模式:包年包月。
适用场景:适用在任务量相对较多,且需要高保障的执行任务的场景。
特殊参数:
资源配额:可设置GPU、CPU等资源数量,如何准备资源配额,请参见新增资源配额。
优先级:表示同时运行的任务执行的优先级,取值范围为[1,9],其中1表示优先级最低。
竞价资源:
计费模式:按量付费。
适用场景:如果您希望降低资源成本,可使用竞价资源,其通常在价格上有一定幅度的折扣。
使用限制:不承诺稳定可用,有可能出现无法立即抢占或被回收的情况,更多信息请参见使用竞价任务。
框架
支持以下深度学习训练框架和训练工具:TensorFlow、PyTorch、ElasticBatch、XGBoost、OneFlow、MPIJob和Ray。
当资源配额选择灵骏智算资源时,仅支持提交TensorFlow、PyTorch、ElasticBatch、MPIJob和Ray类型的任务。
任务资源
根据您选择的框架,支持配置Worker、PS、Chief、Evaluator和GraphLearn类型节点的资源。当选择Ray框架时,您可以通过单击新增Role自定义Worker角色,从而实现异构资源的混合运行。
使用公共资源:支持配置以下参数:
节点数量:运行DLC任务的节点数量。
资源规格:可选择资源规格,控制台界面将显示相应价格,更多计费信息,请参见DLC计费说明。
使用资源配额:可配置各类型节点的节点数量、CPU(核数)、GPU(卡数)、内存(GiB)和共享内存(GiB),还可配置如下特殊参数:
指定节点调度:您可以在指定计算节点上执行任务。
闲时资源:使用闲时资源时,任务可运行在其他Quota下的空闲资源上,有效提升资源利用率,但当此资源需要被原Quota任务使用时,闲时计算任务将会被终止,自动归还资源,更多内容请参见:使用闲时资源。
CPU亲和性:启用CPU亲和性,能够将容器或Pod中的进程绑定到特定的CPU核心上执行。通过这种方式,可以减少CPU缓存未命中、上下文切换等现象,从而提高CPU使用率,提升应用性能,适用于对性能敏感和实时性要求高的场景。
使用竞价资源:除了节点数量和资源规格外,还可配置出价参数,其通过设置最高出价来申请使用竞价资源。您可以单击
按钮,选择出价方式:
按折扣:最高价是基于资源规格的市场价格,从1折到9折的离散选项,表示参与竞价的上限。当竞价资源的最高出价≥市场价格且库存充足时,可申请到竞价资源。
按价格:最高价的出价范围为市场价格区间。
专有网络配置
不配置专有网络,将使用公共网络和公有网关。由于公有网关的带宽有限,可能导致任务执行过程中出现卡顿或无法正常进行的情况。
配置专有网络,并选择对应的交换机与安全组后,可提升网络的带宽、稳定性和安全性,并且,任务运行的集群可以直接访问此专有网络内的服务。
使用VPC时,需保障任务资源组实例、数据集存储(OSS)在同一地域的VPC网络环境中,且与代码仓库的网络是连通状态。
使用CPFS类型的数据集时,需要配置专有网络,且选择的专有网络需要与CPFS一致。否则,提交的DLC训练任务可能长时间处于环境准备中状态。
当使用灵骏智算竞价资源提交DLC任务时,需要配置专有网络。
此外,还可以配置公网访问网关,支持以下两种方式:
公有网关:其网络带宽受限,在用户高并发或下载大型文件时,网络速度可能无法满足需求。
专有网关:为解决公有网关带宽限制问题,可以在DLC的专有网络中创建公网NAT网关、绑定EIP并配置SNAT条目,详情请参考通过专有网关提升公网访问速率。
容错与诊断
参数
描述
参数
描述
自动容错
打开自动容错开关并配置相应参数后,系统将提供作业检测和控制能力,能够及时检测任务算法层面的报错并规避,从而提升GPU的利用率。详情请参见AIMaster:弹性自动容错引擎。
启用自动容错功能后,系统将启动一个AIMaster实例与任务实例一起运行,这会占用一定的计算资源。关于AIMaster实例资源使用详情如下:
资源配额:1个CPU核和1 GiB内存。
公共资源:使用ecs.c6.large规格。
健康检测
打开健康检测开关,健康检测会对参与训练的资源进行全面检测,自动隔离故障节点,并触发后台自动化运维流程,有效减少任务训练初期遇到问题的可能性,提升训练成功率。详情请参见SanityCheck:算力健康检测。
仅基于灵骏智算资源配额提交的Pytorch类型的训练任务且GPU(卡数)大于0时,支持开启健康检测功能。
角色与权限
实例RAM角色配置说明如下。关于该功能更详细的内容介绍,请参见配置DLC RAM角色。
实例RAM角色
描述
实例RAM角色
描述
PAI默认角色
基于服务角色AliyunPAIDLCDefaultRole运作,它仅拥有访问ODPS、OSS的权限,且权限更加精细。基于PAI默认角色签发的临时访问凭证:
在访问MaxCompute表时,将拥有等同于DLC实例所有者的权限。
在访问OSS时,仅能访问当前工作空间配置的默认OSS存储空间(Bucket)。
自定义角色
选择或填写一个自定义的RAM角色。在实例内基于STS临时凭证访问云产品时,拥有的权限将与该自定义角色的权限保持一致。
不关联角色
不为DLC任务关联RAM角色,默认选择该方式。
参数配置完成后,单击确定。
相关文档
提交训练任务后,您可以执行以下操作:
查看任务基本信息、资源视图和操作日志。详情请参见查看训练详情。
管理任务,包括克隆、停止和删除任务等。详情请参见管理训练任务。
通过TensorBoard查看结果分析报告。详情请参见Tensorboard。
设置任务的监控与报警。详情请参见训练监控与报警。
查看任务运行的账单明细。详情请参见账单明细。
将当前工作空间中的DLC任务日志转发至指定的SLS日志库,实现自定义分析。详情请参见订阅任务日志。
在PAI工作空间的事件中心中创建消息通知规则,以便跟踪和监控DLC任务的状态。详情请参见消息通知。
有关在执行DLC任务过程中可能出现的问题及其解决方法,请参考DLC常见问题。
关于DLC的使用案例,请参见DLC使用案例汇总。
附录
通过SDK或命令行创建任务
步骤一:安装阿里云的Credentials工具
当您通过阿里云SDK调用OpenAPI进行资源操作时,必须安装Credentials工具配置凭证信息。要求:
Python版本 >= 3.7。
使用V2.0代系的阿里云SDK。
pip install alibabacloud_credentials
步骤二:获取账号AccessKey
本示例使用AK信息配置访问凭证,为防止账号信息泄漏,建议您将AccessKey配置为环境变量,id和secret环境变量名分别为ALIBABA_CLOUD_ACCESS_KEY_ID,ALIBABA_CLOUD_ACCESS_KEY_SECRET。
获取AccessKey信息,请参见创建AccessKey。
如何设置环境变量,请参见配置环境变量。
其它Credentials凭证配置方式,请参见安装Credentials工具。
步骤三:安装Python SDK
安装工作空间SDK。
pip install alibabacloud_aiworkspace20210204==3.0.1
安装DLC SDK。
pip install alibabacloud_pai_dlc20201203==1.4.17
步骤四:提交任务
创建并提交任务的具体调用代码如下所示。
登录PAI控制台。
按照下图操作指引,在工作空间列表页面查看您所在的工作空间ID。
按照下图操作指引,查看您的专有资源组的资源配额ID。
使用以下代码创建并提交任务。可使用的公共镜像列表,详情请参见步骤二:准备镜像。
from alibabacloud_pai_dlc20201203.client import Client from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.models import ( CreateJobRequest, JobSpec, ResourceConfig, GetJobRequest ) # 初始化一个Client,用来访问DLC的API。 region = 'cn-hangzhou' # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 # 本示例通过Credentials SDK默认从环境变量中读取AccessKey,来实现身份验证为例。 cred = CredClient() client = Client( config=Config( credential=cred, region_id=region, endpoint=f'pai-dlc.{region}.aliyuncs.com', ) ) # 声明任务的资源配置,关于镜像选择可以参考文档中公共镜像列表,也可以传入自己的镜像地址。 spec = JobSpec( type='Worker', image=f'registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04', pod_count=1, resource_config=ResourceConfig(cpu='1', memory='2Gi') ) # 声明任务的执行内容。 req = CreateJobRequest( resource_id='<替换成您自己的资源配额ID>', workspace_id='<替换成您自己的WorkspaceID>', display_name='sample-dlc-job', job_type='TFJob', job_specs=[spec], user_command='echo "Hello World"', ) # 提交任务。 response = client.create_job(req) # 获取任务ID。 job_id = response.body.job_id # 查询任务状态。 job = client.get_job(job_id, GetJobRequest()).body print('job status:', job.status) # 查看任务执行的命令。 job.user_command
SpotDiscountLimit(Spot折扣)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' # DLC任务所在地域ID,例如华东1(杭州)为cn-hangzhou。 cred = CredClient() workspace_id = '12****' # DLC任务所在工作空间ID。 dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotDiscountLimit": 0.4, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
SpotPriceLimit(Spot价格)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' cred = CredClient() workspace_id = '12****' dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotPriceLimit": 0.011, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
其中关键配置说明如下:
参数 | 描述 |
SpotStrategy | 竞价策略。仅该参数设置为SpotWithPriceLimit时,出价类型才能生效。 |
SpotDiscountLimit | 出价类型为Spot折扣。
|
SpotPriceLimit | 出价类型为Spot价格。 |
UserVpc | 使用灵骏竞价资源提交任务时,该参数必填。配置任务所在地域的专有网络、交换机和安全组ID。 |
步骤一:下载客户端并执行用户认证
根据您使用的操作系统下载Linux 64或Mac版本的客户端工具并完成用户认证,详情请参见准备工作。
步骤二:提交任务
登录PAI控制台。
按照下图操作指引,在工作空间列表页面查看您所在的工作空间ID(WorkspaceID)。
按照下图操作指引,查看您的资源配额ID。
参考以下文件内容准备参数文件
tfjob.params
。更多关于参数文件的配置方法,请参见提交命令。name=test_cli_tfjob_001 workers=1 worker_cpu=4 worker_gpu=0 worker_memory=4Gi worker_shared_memory=4Gi worker_image=registry-vpc.cn-beijing.aliyuncs.com/pai-dlc/tensorflow-training:1.12.2PAI-cpu-py27-ubuntu16.04 command=echo good && sleep 120 resource_id=<替换成您的资源配额ID> workspace_id=<替换成您的WorkspaceID>
使用以下代码示例传入params_file参数提交任务,可以将DLC任务提交到指定的工作空间和资源配额。
./dlc submit tfjob --job_file ./tfjob.params
使用以下代码查看您提交的DLC任务。
./dlc get job <jobID>