创建训练任务

更新时间:2025-03-27 09:05

PAI-DLC可以帮助您快捷地创建单机或分布式训练任务,其底层使用Kubernetes拉起计算节点。这避免了您手动购买并启动机器,同时无需改变使用习惯。适用于需要快速启动训练任务的用户,支持多种深度学习框架,并提供灵活的资源配置选项。

前提条件

  1. 使用主账号开通PAI并创建工作空间。登录PAI控制台,在页面上方开通地域,然后一键授权和开通产品,详情见开通PAI并创建工作空间

  2. 操作账号授权。当使用主账号操作时,可跳过此步。当使用RAM账号时,需要具有算法开发、算法运维、空间管理员中任意一个角色,操作账号授权请参见管理工作空间 > 成员角色配置。

通过控制台创建任务

初次使用DLC的用户,推荐您使用控制台的方式创建任务,除此之外,DLC还提供了通过SDK或命令行创建任务的方式。

  1. 进入新建任务页面。

    1. 登录PAI控制台,在页面上方选择目标地域,并选择目标工作空间,然后单击进入DLC

    2. 在分布式训练(DLC)页面,单击新建任务

  2. 分别在以下几个区域,配置训练任务相关参数。

    • 基本信息

      配置任务名称标签

    • 环境信息

      参数

      描述

      参数

      描述

      节点镜像

      除了可以选择官方镜像外,还支持以下镜像类型:

      • 自定义镜像:可使用添加到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_ADDRWORLD_SIZE,可以通过$环境变量名来获取,启动命令示例如下:

      • 运行Pythonpython -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

      展开更多配置:环境变量、三方库配置、代码配置

      环境变量

      除自动注入的Pytorch和Tensorflow通用环境变量外,您可以提供自定义的环境变量,格式为Key:Value,最多支持配置20个环境变量。

      三方库配置

      如果配置的容器镜像中缺少部分三方库,您可以通过三方库配置添加,支持以下两种方式:

      • 三方库列表:直接在下方文本框中输入三方库名称。

      • requirements.txt文件目录:将第三方库写入requirements.txt文件中,然后通过代码配置、数据集或直接挂载方式将该文件上传到DLC容器中,并在文本框中指定该文件在容器中的路径。

      代码配置

      将训练所需代码文件上传到DLC容器中。支持以下两种配置方式:

      • 在线配置:如果您已有Git代码仓库,并且有访问权限,则可以通过新建代码集的方式关联此仓库,使DLC获取到任务代码。

      • 本地上传:单击image.png按钮上传本地代码文件,上传成功后,将挂载路径配置为容器内部的指定路径,例如/mnt/data

    • 资源信息

      参数

      描述

      参数

      描述

      资源类型

      默认为通用计算,仅华北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使用率,提升应用性能,适用于对性能敏感和实时性要求高的场景。

      • 使用竞价资源:除了节点数量和资源规格外,还可配置出价参数,其通过设置最高出价来申请使用竞价资源。您可以单击image按钮,选择出价方式:

        • 按折扣:最高价是基于资源规格的市场价格,从1折到9折的离散选项,表示参与竞价的上限。当竞价资源的最高出价≥市场价格且库存充足时,可申请到竞价资源。

        • 按价格:最高价的出价范围为市场价格区间。

      展开更多配置:最长运行时长、保留时长

      最长运行时长

      您可以设置任务运行的最长时长,在完成配置后,超过该时长的任务将停止运行。默认为30天。

      保留时长

      配置执行成功或失败的任务的保留时长,开启任务保留会一直占用资源。超过该时长的任务将被删除。

      重要

      DLC任务删除后无法恢复,请谨慎操作。

    • 专有网络配置

      • 不配置专有网络,将使用公共网络和公有网关。由于公有网关的带宽有限,可能导致任务执行过程中出现卡顿或无法正常进行的情况。

      • 配置专有网络,并选择对应的交换机与安全组后,可提升网络的带宽、稳定性和安全性,并且,任务运行的集群可以直接访问此专有网络内的服务。

        重要
        • 使用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或命令行创建任务

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。

步骤三:安装Python SDK

  • 安装工作空间SDK。

    pip install alibabacloud_aiworkspace20210204==3.0.1
  • 安装DLC SDK。

    pip install alibabacloud_pai_dlc20201203==1.4.17

步骤四:提交任务

使用公共资源提交任务
使用预付费资源配额提交任务
使用竞价资源提交任务

创建并提交任务的具体调用代码如下所示。

创建并提交任务代码示例

#!/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)
    pass


if __name__ == '__main__':
    main()
  1. 登录PAI控制台

  2. 按照下图操作指引,在工作空间列表页面查看您所在的工作空间ID。image.png

  3. 按照下图操作指引,查看您的专有资源组的资源配额ID。image

  4. 使用以下代码创建并提交任务。可使用的公共镜像列表,详情请参见步骤二:准备镜像

    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折扣。

说明
  • SpotDiscountLimitSpotPriceLimit不能同时设置。

  • 灵骏竞价资源出价类型仅支持SpotDiscountLimit

SpotPriceLimit

出价类型为Spot价格。

UserVpc

使用灵骏竞价资源提交任务时,该参数必填。配置任务所在地域的专有网络、交换机和安全组ID。

步骤一:下载客户端并执行用户认证

根据您使用的操作系统下载Linux 64或Mac版本的客户端工具并完成用户认证,详情请参见准备工作

步骤二:提交任务

  1. 登录PAI控制台

  2. 按照下图操作指引,在工作空间列表页面查看您所在的工作空间ID(WorkspaceID)。

    image.png

  3. 按照下图操作指引,查看您的资源配额ID。

    image

  4. 参考以下文件内容准备参数文件 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>
  5. 使用以下代码示例传入params_file参数提交任务,可以将DLC任务提交到指定的工作空间和资源配额。

    ./dlc submit tfjob --job_file  ./tfjob.params
  6. 使用以下代码查看您提交的DLC任务。

    ./dlc get job <jobID>

  • 本页导读 (1)
  • 前提条件
  • 通过控制台创建任务
  • 基本信息
  • 环境信息
  • 资源信息
  • 专有网络配置
  • 容错与诊断
  • 角色与权限
  • 相关文档
  • 附录
  • 通过SDK或命令行创建任务
文档反馈