详情页标题前

阿里云人工智能平台PAI提交任务(通过Python SDK)-云淘科技

详情页1

您可以通过Python SDK的方式提交DLC任务,本文介绍如何通过Python SDK提交使用公共资源组或专有资源组的训练任务,核心步骤包括下载Python SDK安装Python SDK及创建并提交任务。

前提条件

  • 已开通准备通用计算资源公共资源组,详情请参见准备公共资源组。

  • 已完成DLC依赖授权,详情请参见云产品依赖与授权:DLC。

  • 已创建通用计算资源专有资源组并为专有资源组购买了计算资源,详情请参见准备专有资源组。

  • 已完成身份验证配置,您可以使用环境变量、本地文件等方式配置,具体操作请参见身份验证配置。

背景信息

关于Python SDK更多接口的说明文档,请参见API参考。

如果您需要通过界面提交通用计算资源公共资源组或专有资源组任务,请参见提交任务(通过控制台)。此外,您也可以登录DSW探索者版,一键体验本文涉及的操作。

步骤一:安装Python SDK

  • 安装工作空间SDK。

    pip install https://sdk-portal-us-prod.oss-accelerate.aliyuncs.com/downloads/u-a397e06e-edea-4756-ad50-fe7c6f7b0bf4-python-aiworkspace.zip
  • 安装DLC SDK。

    # 安装python2 sdk。
    pip install https://sdk-portal-us-prod.oss-accelerate.aliyuncs.com/downloads/u-b7e79745-b9b1-4060-946c-05b1dca491bc-python2-pai-dlc.zip
    # 安装python3 sdk。
    pip install https://sdk-portal-us-prod.oss-accelerate.aliyuncs.com/downloads/u-b7e79745-b9b1-4060-946c-05b1dca491bc-python-pai-dlc.zip

步骤二:创建并提交任务

使用公共资源组创建并提交任务

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

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

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).body
        print('job is {}'.format(job.status))
        if job.status in ('Succeeded', 'Failed', 'Stopped'):
            return job.status
        time.sleep(5)
    return None


def main():

    # 请确认您的主账号已授权PAI 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,
                "UseSpotInstance": False,
            },
        ],
        "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。阿里云人工智能平台PAI提交任务(通过Python SDK)-云淘科技

  3. 按照下图操作指引,在通用计算资源页面查看您的专有资源组的资源组ID。阿里云人工智能平台PAI提交任务(通过Python SDK)-云淘科技

  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,
    )
    
    # 初始化一个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='',
            workspace_id='',
            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).body
    print('job status:', job.status)
    
    # 查看任务执行的命令。
    job.user_command

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/163947.html

(0)
上一篇 2023年12月10日 上午5:53
下一篇 2023年12月10日
详情页2

相关推荐

  • 腾讯云对象存储异常处理

    简介 COS XML Python SDK 操作成功会返回一个 dict 或者 None。若调用 SDK 接口请求 COS 服务失败,系统将抛出 CosClientError(客户端异常)或者 CosServiceError (服务端异常)。CosClientError 是由于客户端无法和 COS 服务端正常进行交互所引起。如客户端无法连接到服务端,无法解析…

    腾讯云 2023年12月9日
  • 腾讯云对象存储生成预签名 URL

    简介 Python SDK 提供获取签名、预签名 URL 、下载预签名 URL 的接口,用于将请求分发使用。使用永久密钥或临时密钥获取预签名 URL 的调用方法相同,使用临时密钥时需要在 header 或 query_string 中加上 x-cos-security-token。关于使用预签名 URL 上传的说明请参见 预签名授权上传, 使用预签名 URL…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云人工智能平台PAIPython SDK使用说明-云淘科技

    推荐使用EAS提供的官方SDK进行服务调用,从而有效减少编写调用逻辑的时间并提高调用稳定性。本文介绍官方Python SDK接口详情,并以常见类型的输入输出为例,提供了使用Python SDK进行服务调用的完整程序示例。 安装方法 pip install -U eas-prediction –user 接口列表 类 接口 描述 PredictClient …

    阿里云人工智能平台PAI 2023年12月10日
  • 阿里云对象存储OSSPython防盗链-云淘科技

    本文介绍如何使用防盗链。 注意事项 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心。 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见Python配置访问凭证。 本文以OSS域名新建O…

    阿里云对象存储 2023年12月10日
  • 腾讯云对象存储快速入门

    下载与安装 相关资源 对象存储的 XML Python SDK 源码下载地址:XML Python SDK。SDK 快速下载地址:XML Python SDK。演示示例 Demo 下载地址:XML Python Demo。SDK 文档中的所有示例代码请参见 SDK 代码示例。SDK 更新日志请参见 ChangeLog。SDK 常见问题请参见:Python S…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。