PAI-DLC可以帮助您快捷地创建单机或分布式训练任务,其底层使用Kubernetes拉起计算节点。这避免了您手动购买机器并配置运行环境,同时无需改变使用习惯。适用于需要快速启动训练任务的用户,支持多种深度学习框架,并提供灵活的资源配置选项。
快速入门
以 MNIST 手写体识别为案例,为您介绍使用DLC进行单机单卡训练,或多机多卡的分布式训练,详情请参见分布式训练 DLC 快速入门。
控制台全参数列表
基本信息
配置任务名称和标签。
环境信息
参数 | 描述 |
镜像配置 | 除了可以选择官方镜像外,还支持以下镜像类型:
|
数据集挂载 | 数据集用于提供模型训练时所需的数据文件,支持以下两种数据集类型:
挂载路径:表示数据集挂载到DLC容器的路径,例如 重要 如果配置了CPFS类型的数据集,则DLC需要配置专有网络VPC,且与CPFS的VPC一致。否则,提交的任务可能长时间处于环境准备中状态。 |
存储挂载 | 您也可以通过直接挂载数据源路径来读取需要的数据,或存放过程及结果文件。
更多内容请参见在DLC训练任务中使用云存储。 |
启动命令 | 设置任务启动命令,支持Shell命令,并且DLC会自动注入Pytorch和Tensorflow通用环境变量,如
|
资源信息
参数 | 描述 |
资源类型 | 默认为通用计算,仅华北6(乌兰察布)、新加坡、华南1(深圳)、华北2(北京)、华东2(上海)和华东1(杭州)地域支持选择灵骏智算资源。 |
资源来源 |
|
框架 | 支持以下深度学习训练框架和训练工具:TensorFlow、PyTorch、ElasticBatch、XGBoost、OneFlow、MPIJob、Slurm和Ray。 说明 当资源配额选择灵骏智算资源时,仅支持提交TensorFlow、PyTorch、ElasticBatch、MPIJob、Slurm和Ray类型的任务。 |
任务资源 | 根据您选择的框架,支持配置Worker、PS、Chief、Evaluator和GraphLearn类型节点的资源。当选择Ray框架时,您可以通过单击新增 Role自定义Worker角色,从而实现异构资源的混合运行。
|
专有网络配置
不配置专有网络,将使用公共网络和公有网关。由于公有网关的带宽有限,可能导致任务执行过程中出现卡顿或无法正常进行的情况。
配置专有网络,并选择对应的交换机与安全组后,可提升网络的带宽、稳定性和安全性,并且,任务运行的集群可以直接访问此专有网络内的服务。
重要使用VPC时,需保障任务资源组实例、数据集存储(OSS)在同一地域的VPC网络环境中,且与代码仓库的网络是连通状态。
使用CPFS类型的数据集时,需要配置专有网络,且选择的专有网络需要与CPFS一致。否则,提交的DLC训练任务可能长时间处于环境准备中状态。
当使用灵骏智算竞价资源提交DLC任务时,需要配置专有网络。
此外,还可以配置公网访问网关,支持以下两种方式:
公有网关:其网络带宽受限,在用户高并发或下载大型文件时,网络速度可能无法满足需求。
专有网关:为解决公有网关带宽限制问题,可以在DLC的专有网络中创建公网NAT网关、绑定EIP并配置SNAT条目,详情请参考通过专有网关提升公网访问速率。
容错与诊断
参数 | 描述 |
自动容错 | 打开自动容错开关并配置相应参数后,系统将提供作业检测和控制能力,能够及时检测任务算法层面的报错并规避,从而提升GPU的利用率。详情请参见AIMaster:弹性自动容错引擎。 说明 启用自动容错功能后,系统将启动一个AIMaster实例与任务实例一起运行,这会占用一定的计算资源。关于AIMaster实例资源使用详情如下:
|
健康检测 | 打开健康检测开关,健康检测会对参与训练的资源进行全面检测,自动隔离故障节点,并触发后台自动化运维流程,有效减少任务训练初期遇到问题的可能性,提升训练成功率。详情请参见SanityCheck:算力健康检测。 说明 仅基于灵骏智算资源配额提交的Pytorch类型的训练任务且GPU(卡数)大于0时,支持开启健康检测功能。 |
角色与权限
实例RAM角色配置说明如下。关于该功能更详细的内容介绍,请参见配置DLC RAM角色。
实例RAM角色 | 描述 |
PAI默认角色 | 基于服务角色AliyunPAIDLCDefaultRole运作,它仅拥有访问ODPS、OSS的权限,且权限更加精细。基于PAI默认角色签发的临时访问凭证:
|
自定义角色 | 选择或填写一个自定义的RAM角色。在实例内基于STS临时凭证访问云产品时,拥有的权限将与该自定义角色的权限保持一致。 |
不关联角色 | 不为DLC任务关联RAM角色,默认选择该方式。 |
相关文档
附录
通过SDK或命令行创建任务
Python 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>
高级参数列表
参数(key) | 支持的框架类型 | 参数说明 | 参数取值(value) |
| ALL | 配置自定义资源释放规则。可不配置,不配置时资源以Job结束整体释放所有Pod的资源。若配置,当前只支持设置为pod-exit,即在您的Pod退出时释放该Pod的资源。 | pod-exit |
| ALL | 加载GPU驱动时是否打开IBGDA功能。 |
|
| ALL | 是否安装GDRCopy内核模块,当前安装的2.4.4版本。 |
|
| ALL | 是否开启numa。 |
|
| ALL | 支持提交作业时检测quota中总资源(节点规格)是否能够满足作业的所有role的规格。 |
|
| PyTorch | 是否允许worker间网络互通。
打开后,每个worker的域名即为worker名,如 |
|
| PyTorch | 允许用户定义每个worker上开放的网络端口,可与 若未配置,则默认仅有master上开放23456号端口。因此也请注意在该自定义端口列表中避开23456号端口。 重要 该参数与 | 分号分隔的一组字符串,其中每个字符串为一个端口号,或由短横线连接的一个端口范围,如 |
| PyTorch | 允许用户请求为每个worker开放若干个网络端口,可与 若未配置,则默认仅在master上开放23456号端口。DLC会根据参数定义的端口数目,为worker随机分配端口,具体分配的端口号会通过环境变量 重要
| 整数(最大为65536) |
| Ray | 当框架为Ray时,支持通过手动配置RayRuntimeEnv来定义运行环境。 重要 环境变量和三方库配置将被此配置覆盖。 | 配置环境变量和三方库( |
| Ray | 外部 GCS Redis 地址。 | 字符串 |
| Ray | 外部 GCS Redis 用户名。 | 字符串 |
| Ray | 外部 GCS Redis 密码。 | 字符串 |
| Ray | Submitter 重试次数。 | 正整数(int) |
| Ray | 为节点配置共享内存。例如,为每个节点配置1 GiB共享内存,配置示例如下: | 正整数(int) |
按钮,选择出价方式: