完成准备工作后,您可以通过控制台、Python SDK 或命令行提交 DLC 任务。本文为您介绍提交 DLC 任务的具体操作步骤。
前提条件
-
已准备资源、镜像、数据集和代码集。详情请参见 准备工作 。
-
如果使用 Python SDK 提交训练任务,需要配置环境变量。详情请参见 安装 Credentials 工具 和 在 Linux、macOS 和 Windows 系统配置环境变量 。
通过控制台创建
-
进入 新建任务 页面。
-
登录 PAI 控制台 ,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击 进入 DLC 。
-
在分布式训练(DLC)页面,单击 新建任务 。
-
-
分别在以下几个区域,配置训练任务相关参数。
-
基本信息
配置 任务名称 和 标签 。
-
环境信息
参数
描述
节点镜像
工作节点的镜像。当前支持选择如下类型的镜像:
-
官方镜像 :由阿里云 PAI 产品提供的多种官方镜像,支持不同的 Python 版本及深度学习框架(包括 TensorFlow、PyTorch、Ray、XGBoost 等)。镜像列表及详情,请参见 准备工作 。
-
自定义镜像 :可选择使用您添加到 PAI 的自定义镜像。如何准备自定义镜像,请参见 自定义镜像 。
说明-
当资源配额选择灵骏智算资源并使用自定义镜像时,为了充分利用灵骏智算资源的高性能 RDMA 网络,需手动安装 RDMA。操作详情请参见 RDMA:使用高性能网络进行分布式训练 。
-
目前,您需要将镜像仓库设置为公开拉取状态,或选择将镜像存储在阿里云 ACR(容器镜像服务)中,以便能够直接使用。
-
-
镜像地址 :支持配置您的自定义镜像或官方镜像地址。您需要在配置框中配置公网环境下可访问的 Docker Registry Image URL。
如果您配置的是私有镜像地址,需要单击 输入账号密码 ,并配置 镜像仓库用户名 和 密码 ,为私有镜像仓库授权。
您也可以使用加速镜像,来提升模型训练速度。详情请参见 镜像加速 。
数据集
支持挂载以下两种类型数据集:
-
自定义数据集 :需配置为前期已准备好的数据集。如果数据集存在多个版本,您可以在目标数据集 操作 列下的 版本列表 中进行选择。关于如何准备数据集,请参见 准备工作 。
-
公共数据集 :配置为 PAI 预置的公共数据集,只支持只读挂载模式。
两种类型数据集均需配置 挂载路径 ,表示将数据集挂载到 DLC 容器的指定路径,例如
/mnt/data
。运行代码时,DLC 会按照该路径检索所需文件。关于挂载配置更详细的内容介绍,请参见 在 DLC 训练任务中使用云存储 。重要-
如果添加 OSS 或 NAS 类型的数据集,则需要授权 PAI 访问相关云产品 OSS 或 NAS 的权限,否则读取或写入数据失败。详情请参见 PAI 访问云产品授权:OSS 与 NAS 。
-
如果配置了 CPFS 类型的数据集,则需要配置专有网络,且选择的专有网络需要与 CPFS 一致。否则,提交的 DLC 训练任务可能长时间处于环境准备中状态。
直接挂载
支持将数据源 OSS 、 通用型 NAS 、 极速型 NAS 和 BMCPFS 直接挂载到 DLC 容器中。单击相应数据源,然后配置数据源信息和挂载路径即可。
说明仅灵骏智算资源的任务可以使用 BMCPFS 数据源。
启动命令
本任务需要执行的命令。支持 Shell 命令,例如,使用
python -c "print('Hello World')"
运行 Python。提交训练任务时,PAI 会自动注入多个通用环境变量,您可以通过配置
$环境变量名
,来获取指定环境变量的值。关于 DLC 默认提供的环境变量列表,请参见 通用环境变量列表 。说明如果配置了数据集,您可以通过设置相应的命令,将训练结果导出至数据集挂载目录,方便您在数据集中查看训练结果。
环境变量
提供额外的配置信息或参数。格式为
Key:Value
。最多支持配置 20 个环境变量。三方库配置
支持以下两种配置方式:
-
三方库列表 :直接在下方文本框中输入三方库名称。
-
requirements.txt 文件目录 :将第三方库写入 requirements.txt 文件中。您需要通过代码配置、数据集或直接挂载方式将该文件上传到 DLC 容器中,然后在下方文本框中指定该文件在 DLC 容器中的路径。
代码配置
将训练所需代码文件上传到 DLC 容器中。支持以下两种配置方式:
-
在线配置
指定代码文件的存储位置(代码仓库信息)。此处需配置为此前已准备好的代码集。关于如何准备代码集,请参见 步骤四:准备代码集 。
说明由于 DLC 会将代码下载至指定工作路径,所以您需要有代码仓库的访问权限。
-
本地上传
单击
按钮后,按照界面操作指引上传代码文件。上传成功后,将 挂载路径 配置为容器内部的指定路径,例如
/mnt/data
。
-
-
资源信息
参数
描述
资源类型
仅当工作空间同时支持使用灵骏智算资源和通用计算资源提交 DLC 任务时,才支持选择资源类型,取值如下:
-
灵骏智算
说明仅华北 6(乌兰察布)和新加坡地域支持使用灵骏智算资源。
-
通用计算
资源来源
您可以选择使用 公共资源 、 资源配额 (包括通用计算资源或灵骏智算资源)或 竞价资源 。
说明-
目前公共资源支持运行的资源上限为 GPU 2 卡、CPU 8 核。如果您在训练任务时使用的公共资源超出上限,请联系您的商务经理来提升资源上限。
-
关于竞价资源的使用限制和详情介绍,请参见 使用竞价任务 。
资源配额
仅 资源来源 选择 资源配额 时,需要配置该参数。选择已准备好的资源配额,关于如何准备资源配额,请参见 资源配额(Quota)功能介绍 。
优先级
当 资源来源 选择 资源配额 时,支持配置该参数。
表示同时运行的任务执行的优先级,取值范围为[1,9],其中 1 表示优先级最低。
框架
支持使用以下几种深度学习训练框架和训练工具,它们提供了丰富的功能和接口,方便您进行构建、训练和优化深度学习模型。
-
Tensorflow
-
PyTorch
-
ElasticBatch
-
XGBoost
-
OneFlow
-
MPIJob
-
Slurm
-
Ray
说明当 资源配额 选择灵骏智算资源时,仅支持提交 Tensorflow、PyTorch、ElasticBatch、MPIJob 、Slurm 和 Ray 类型的任务。
任务资源
根据您选择的框架,支持配置 Worker、PS、Chief、Evaluator 和 GraphLearn 节点的资源。
-
使用公共资源
支持配置以下参数:
-
节点数量 :运行 DLC 任务的节点数量。
-
资源规格 :单击
按钮选择资源规格,控制台界面将显示相应规格的价格。如需了解更多计费详情,请参见 分布式训练(DLC)计费说明 。
-
-
使用资源配额
各类节点支持配置的参数项一致,均包含 节点数量 、 CPU(核数) 、 GPU(卡数) 、 内存(GiB) 和 共享内存(GiB) 配置项。
-
使用竞价资源
支持配置以下参数,关于竞价资源的更多详细信息,请参见 使用竞价任务 。
-
节点数量 :运行 DLC 任务的节点数量。
-
资源规格 :单击
按钮选择资源规格。
-
出价 :通过设置最高出价来申请使用竞价资源。您可以单击
按钮,选择出价方式:
-
按折扣 :最高价是基于资源规格的市场价格,从 1 折到 9 折的离散选项,表示参与竞价的上限。当竞价资源的最高出价≥市场价格且库存充足时,可申请到竞价资源。
-
按价格 :最高价的出价范围为市场价格区间。
-
-
指定节点调度
打开开关,在 调度指定节点 页面,选择要用于任务调度的节点。
说明仅使用资源配额提交任务时,支持配置该参数。
框架高级配置
当 框架 为 PyTorch 类型时,支持通过高级配置提高训练灵活性,或满足一些特定的训练场景。
-
配置要求:
-
需配置为使用半角逗号(,)分隔的一组字符串形式,其中每个字符串都符合
key=value
的形式。 -
其中 key 为当前支持的高级参数,value 需配置为对应参数的取值。
-
当前支持的高级参数列表和取值说明请参见 附录:高级参数列表 。
重要由于灵骏智算资源未提供自定义端口能力,因此当使用灵骏智算资源提交 DLC 任务时,不支持配置 customPortNumPerWorker 参数。
-
-
典型场景与配置示例:
-
典型场景:
通过使用高级配置参数,可以实现 Worker 之间的网络互通,从而实现更灵活的训练方法。例如,可以利用额外开放的端口,在 DLC 容器中启动像 Ray 这样的框架,并与 PyTorch 配合进行更高级的分布式训练。
-
配置示例:
createSvcForAllWorkers=true,customPortNumPerWorker=100
后续,您可以在 启动命令 中,通过配置
$JOB_NAME
和$CUSTOM_PORTS
环境变量获取到域名和可用端口号,即可拉起并连接到像 Ray 之类的框架。
-
闲时资源
使用资源配额提交 DLC 训练任务时,您可以合理利用并配置闲时资源。关于闲时资源的更多使用说明,请参见 使用闲时资源 。
CPU 亲和性
启用 CPU 亲和性,能够将容器或 Pod 中的进程绑定到特定的 CPU 核心上执行。通过这种方式,可以减少 CPU 缓存未命中、上下文切换等现象,从而提高 CPU 使用率,提升应用性能,适用于对性能敏感和实时性要求高的场景。
最长运行时长
您可以设置任务运行的最长时长,在完成配置后,超过该时长的任务将停止运行。默认为 30 小时。
保留时长
配置执行成功或失败的任务的保留时长,开启任务保留会一直占用资源。超过该时长的任务将被删除。
重要DLC 任务删除后无法恢复,请谨慎操作。
-
-
专有网络
-
不配置专有网络,将使用公网连接。由于公网连接的带宽有限,可能导致任务执行过程中出现卡顿或无法正常进行的情况。
-
配置专有网络,以确保充足的网络带宽和更稳定的性能。
选择当前地域可用的专有网络,并选择对应的交换机与安全组。配置完成后,任务运行的集群将能够直接访问此专有网络内的服务,并使用此处选择的安全组进行安全访问限制。
此外,您在配置专有网络时还可以配置 公网访问网关 ,支持以下两种配置方法:
-
专有网关 :您可以使用不同的带宽来独享网络资源。选择该方式后,您需要为 DLC 任务关联的专有网络创建公网 NAT 网关、绑定 EIP 并配置 SNAT 条目。配置方法,请参考 DSW 通过专有公网网关访问公网 。
-
公有网关 :使用共享的公网带宽,在用户高并发时下载速度会比较慢。
-
重要-
当前运行 DLC 任务时,需保障任务资源组实例、数据集存储(OSS)在同一地域的 VPC 网络环境中,且与代码仓库的网络是连通状态。
-
如果数据集配置选择 CPFS 类型的数据集,需要配置专有网络,且选择的专有网络需要与 CPFS 一致。否则,提交的 DLC 训练任务可能长时间处于环境准备中状态。
-
当使用灵骏智算竞价资源提交 DLC 任务时,需要配置专有网络。
-
-
容错与诊断
参数
描述
自动容错
打开 自动容错 开关并配置相应参数后,系统将提供作业检测和控制能力,能够及时检测训练任务算法层面的报错,并规避错误,从而提升 GPU 的利用率。更详细的配置说明,请参见 AIMaster:弹性自动容错引擎 。
说明启用自动容错功能后,系统将启动一个 AIMaster 实例与任务实例一起运行,这会占用一定的计算资源。关于 AIMaster 实例资源使用详情如下:
-
资源配额:1 个 CPU 核和 1 GiB 内存。
-
公共资源:使用 ecs.c6.large 规格。
健康检测
打开 健康检测 开关,健康检测会对参与训练的资源进行全面检测,自动隔离故障节点,并触发后台自动化运维流程,有效减少任务训练初期遇到问题的可能性,提升训练成功率。详情请参见 SanityCheck:算力健康检测 。
说明仅基于灵骏智算资源配额提交的 Pytorch 类型的训练任务且 GPU(卡数)大于 0 时,支持开启健康检测功能。
-
-
角色与权限
实例 RAM 角色配置说明如下。关于该功能更详细的内容介绍,请参见 配置 DLC RAM 角色 。
实例 RAM 角色
描述
PAI 默认角色
基于服务角色 AliyunPAIDLCDefaultRole 运作,它仅拥有访问 ODPS、OSS 的权限,且权限更加精细。基于 PAI 默认角色签发的临时访问凭证:
-
在访问 MaxCompute 表时,将拥有等同于 DLC 实例所有者 的权限。
-
在访问 OSS 时,仅能访问当前工作空间配置的默认 OSS 存储空间(Bucket)。
自定义角色
选择或填写一个自定义的 RAM 角色。在实例内基于 STS 临时凭证访问云产品时,拥有的权限将与该自定义角色的权限保持一致。
不关联角色
不为 DLC 任务关联 RAM 角色,默认选择该方式。
-
-
-
参数配置完成后,单击 确定 。
通过 SDK 或命令行创建
Python SDK
步骤一:安装 Python SDK
-
安装工作空间 SDK。
pip install alibabacloud_aiworkspace20210204==3.0.1
-
安装 DLC SDK。
pip install alibabacloud_pai_dlc20201203==1.4.17
步骤二:提交任务
-
如果您希望采用按量计费方式提交训练任务,可以使用公共资源。使用公共资源提交的训练任务可能会遇到排队延时,建议在任务量相对较少,对任务时效性要求不高的场景下使用。
-
如果您希望采用包年包月方式提交训练任务,可以使用 AI 计算资源(包括通用计算资源和灵骏智算资源)。在任务量相对较多时,通过 AI 计算资源来保障训练任务能正常执行。
-
如果您希望降低任务运行所需的资源成本,可以使用竞价资源。竞价资源通常有一定幅度的折扣,但不是稳定承诺可用的计算资源,有可能会出现无法立即抢占或被回收的情况。关于竞价资源的使用限制和详情介绍,请参见 使用竞价任务 。
使用公共资源提交任务
创建并提交任务的具体调用代码如下所示。
#!/usr/bin/env python3
from __future__ import print_function
import json
import time
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 (
ListJobsRequest,
ListEcsSpecsRequest,
CreateJobRequest,
GetJobRequest,
from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import (
ListWorkspacesRequest,
CreateDatasetRequest,
ListDatasetsRequest,
ListImagesRequest,
ListCodeSourcesRequest
def create_nas_dataset(client, region, workspace_id, name,
nas_id, nas_path, mount_path):
'''创建NAS的数据集。
response = client.create_dataset(CreateDatasetRequest(
workspace_id=workspace_id,
name=name,
data_type='COMMON',
data_source_type='NAS',
property='DIRECTORY',
uri=f'nas://{nas_id}.{region}{nas_path}',
accessibility='PRIVATE',
source_type='USER',
options=json.dumps({
'mountPath': mount_path
return response.body.dataset_id
def create_oss_dataset(client, region, workspace_id, name,
oss_bucket, oss_endpoint, oss_path, mount_path):
'''创建OSS数据集。
response = client.create_dataset(CreateDatasetRequest(
workspace_id=workspace_id,
name=name,
data_type='COMMON',
data_source_type='OSS',
property='DIRECTORY',
uri=f'oss://{oss_bucket}.{oss_endpoint}{oss_path}',
accessibility='PRIVATE',
source_type='USER',
options=json.dumps({
'mountPath': mount_path
return response.body.dataset_id
def wait_for_job_to_terminate(client, job_id):
while True:
job = client.get_job(job_id, GetJobRequest()).body
print('job({}) is {}'.format(job_id, job.status))
if job.status in ('Succeeded', 'Failed', 'Stopped'):
return job.status
time.sleep(5)
return None
def main():
# 请确认您的主账号已授权DLC,且拥有足够的权限。
region_id = 'cn-hangzhou'
# 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
# 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
# 本示例通过Credentials SDK默认从环境变量中读取AccessKey,来实现身份验证为例。
cred = CredClient()
# 1. create client;
workspace_client = AIWorkspaceClient(
config=Config(
credential=cred,
region_id=region_id,
endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
dlc_client = DLCClient(
config=Config(
credential=cred,
region_id=region_id,
endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id),
print('------- Workspaces -----------')
# 获取工作空间列表。您也可以在参数workspace_name中填入您创建的工作空间名。
workspaces = workspace_client.list_workspaces(ListWorkspacesRequest(
page_number=1, page_size=1, workspace_name='',
module_list='PAI'
for workspace in workspaces.body.workspaces:
print(workspace.workspace_name, workspace.workspace_id,
workspace.status, workspace.creator)
if len(workspaces.body.workspaces) == 0:
raise RuntimeError('found no workspaces')
workspace_id = workspaces.body.workspaces[0].workspace_id
print('------- Images ------------')
# 获取镜像列表。
images = workspace_client.list_images(ListImagesRequest(
labels=','.join(['system.supported.dlc=true',
'system.framework=Tensorflow 1.15',
'system.pythonVersion=3.6',
'system.chipType=CPU'])))
for image in images.body.images:
print(json.dumps(image.to_map(), indent=2))
image_uri = images.body.images[0].image_uri
print('------- Datasets ----------')
# 获取数据集。
datasets = workspace_client.list_datasets(ListDatasetsRequest(
workspace_id=workspace_id,
name='example-nas-data', properties='DIRECTORY'))
for dataset in datasets.body.datasets:
print(dataset.name, dataset.dataset_id, dataset.uri, dataset.options)
if len(datasets.body.datasets) == 0:
# 当前数据集不存在时,创建数据集。
dataset_id = create_nas_dataset(
client=workspace_client,
region=region_id,
workspace_id=workspace_id,
name='example-nas-data',
# Nas文件系统ID。
# 通用型NAS:31a8e4****。
# 极速型NAS:必须以extreme-开头,例如extreme-0015****。
# CPFS:必须以cpfs-开头,例如cpfs-125487****。
nas_id='***',
nas_path='/',
mount_path='/mnt/data/nas')
print('create dataset with id: {}'.format(dataset_id))
else:
dataset_id = datasets.body.datasets[0].dataset_id
print('------- Code Sources ----------')
# 获取代码集列表。
code_sources = workspace_client.list_code_sources(ListCodeSourcesRequest(
workspace_id=workspace_id))
for code_source in code_sources.body.code_sources:
print(code_source.display_name, code_source.code_source_id, code_source.code_repo)
print('-------- ECS SPECS ----------')
# 获取DLC的节点规格列表。
ecs_specs = dlc_client.list_ecs_specs(ListEcsSpecsRequest(page_size=100, sort_by='Memory', order='asc'))
for spec in ecs_specs.body.ecs_specs:
print(spec.instance_type, spec.cpu, spec.memory, spec.memory, spec.gpu_type)
print('-------- Create Job ----------')
# 创建DLC作业。
create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({
'WorkspaceId': workspace_id,
'DisplayName': 'sample-dlc-job',
'JobType': 'TFJob',
'JobSpecs': [
"Type": "Worker",
"Image": image_uri,
"PodCount": 1,
"EcsSpec": ecs_specs.body.ecs_specs[0].instance_type,
"UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'",
'DataSources': [
"DataSourceId": dataset_id,
job_id = create_job_resp.body.job_id
wait_for_job_to_terminate(dlc_client, job_id)
print('-------- List Jobs ----------')
# 获取DLC的作业列表。
jobs = dlc_client.list_jobs(ListJobsRequest(
workspace_id=workspace_id,
page_number=1,
page_size=10,
for job in jobs.body.jobs:
print(job.display_name, job.job_id, job.workspace_name,
job.status, job.job_type)
if __name__ == '__main__':
main()
使用预付费资源配额提交任务
-
登录 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>
相关文档
提交训练任务后,您可以执行以下操作:
-
查看任务基本信息、资源视图和操作日志。详情请参见 查看训练详情 。
-
管理任务,包括克隆、停止和删除任务等。详情请参见 管理训练任务 。
-
通过 Tensorboard 查看结果分析报告。详情请参见 Tensorboard 。
-
设置任务的监控与报警。详情请参见 训练监控与报警 。
-
查看任务运行的账单明细。详情请参见 账单明细 。
-
在工作空间中配置 SLS 日志转发功能,将当前工作空间中的 DLC 任务日志转发至指定的 SLS 日志库,实现自定义分析。详情请参见 订阅任务日志 。
-
在 PAI 工作空间的事件中心中创建消息通知规则,以便跟踪和监控 DLC 任务的状态。详情请参见 消息通知 。
-
有关在执行 DLC 任务过程中可能出现的问题及其解决方法,请参考 DLC 常见问题 。
-
关于 DLC 的使用案例,请参见 DLC 使用案例汇总 。