创建DSW实例

更新时间: 2024-04-18 11:28:19

交互式建模(DSW)是PAI产品的云端机器学习开发IDE,为您提供交互式编程环境。在使用DSW前,您需要创建DSW实例。DSW支持通过控制台和Python SDK两种方式创建实例。本文为您介绍如何创建DSW实例。

背景信息

DSW支持通过控制台或Python SDK的方式创建实例,二者分别适用于不同的用户:

  • 通过控制台创建实例

    适用于普通开发者,您可以通过控制台管理实例,例如,在DSW中进行模型开发的开发者。

  • 通过Python SDK创建实例

    适用于需要对实例整体生命周期进行管理的开发者。例如,您需要将DSW系统中的资源整合到其他系统中,可以通过DSW的OpenAPI SDK实现。

前提条件

  • 如果是首次使用DSW,则需要对相关资源进行访问授权,具体操作请参见云产品依赖与授权:DSW

  • 已准备好DSW实例运行所需的通用计算资源或灵骏智算资源。

  • (可选)已创建完成NAS或OSS类型数据集。具体操作,请参见创建及管理数据集

    重要

    如果为DSW实例添加OSS或NAS类型的数据集,则需要授权PAI访问相关云产品OSS或NAS的权限,否则读取或写入数据失败。具体操作,请参见PAI访问云产品授权:OSS与NAS

    • 当使用公共资源组创建DSW实例时,DSW为您提供的默认云盘存储空间有限,您可以通过挂载数据集或付费扩容云盘来扩展实例存储空间。

    • 当使用专有资源组创建DSW实例时,DSW实例则提供非持久化的本地存储,您可以通过挂载数据集来实现持久化存储。

  • 当使用Python SDK创建DSW实例时,需要配置环境变量。具体操作,请参见安装Credentials工具配置环境变量

使用限制

由于每个阿里云账号(主账号)在每个Region有2卡GPU的限制,当资源使用量超出限额时可能会出现报错。如果您需要提升限额,请提交工单联系我们。

创建实例

通过控制台创建实例。

  1. 进入DSW页面。

    1. 登录PAI控制台

    2. 概览页面选择目标地域。

    3. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。

    4. 在工作空间页面的左侧导航栏选择模型开发与训练 > 交互式建模(DSW),进入DSW页面。

  2. 单击创建实例

  3. 配置实例向导页面,配置以下关键参数。

  4. 参数

    描述

    实例名称

    参考界面提示信息配置DSW实例名称。

    资源配额

    支持选择:

    • 默认为通用训练资源公共资源组,支持选择CPU规格GPU规格。在配置实例向导页面,您可以查看并选择创建DSW实例支持使用的规格类型。关于各规格类型的指标数据的更多详细介绍,请参见实例规格族

    • 支持使用通用训练资源专有资源组来创建实例。如果没有可选的专有资源组,您可以单击工作空间,为该工作空间关联通用训练资源专有资源组。

    • 支持使用灵骏智算资源来创建实例。如果没有可选的灵骏智算资源,您可以单击工作空间,为该工作空间关联灵骏智算资源。

    存储配置

    • 资源配额选择公共资源组时:

      • 系统盘:为每个按量付费实例免费赠送100 GB云盘作为持久化存储,如果该实例停机超过15天未开机,云盘的内容将被清空。如果免费赠送的云盘不满足您的业务需求,您可以对云盘进行扩容,具体扩容价格以控制台界面为准。

        警告
        • 扩容后不支持缩容,请按需操作扩容。

        • 扩容后整块系统盘(免费+付费)后,不再受到停机15天释放的限制,但会持续产生费用。

        • 实例删除系统盘同步销毁,删除前请确保必要数据备份。

      • 共享数据集:由于默认提供的云盘存储空间有限,您可以单击共享数据集并选择要挂载的数据集来扩展实例存储空间。目前支持挂载OSS、NAS和CPFS类型的数据集。如果没有可选的数据集,您可以单击创建数据集进行创建。关于如何创建数据集,详情请参见创建及管理数据集

    • 资源组选择专有资源组时:

      实例自带的系统盘用于临时存储,在停止或删除实例后,存储将被清空。如果需要永久性存储,可以单击共享数据集并选择已创建的数据集进行挂载。如果没有可选的数据集,您可以单击创建数据集进行创建。关于如何创建数据集,详情请参见创建及管理数据集

    说明
    • 多个数据集挂载的路径不能重复。

    • 如果配置了CPFS类型的数据集,则需要设置网络配置,且选择的专有网络需要与CPFS一致。否则,DSW实例可能会创建失败。

    • 当资源组选择专有资源组时,第一个数据集必须选择NAS类型数据集,且会被同时挂载到您指定的路径和DSW默认工作目录/mnt/workspace/下。

    选择镜像

    支持选择以下镜像:

    • 官方镜像:预置的官方镜像,覆盖Python、TensorFlow和PyTorch的多个版本。

    • 用户自定义镜像:支持选择已创建的自定义镜像。关于如何添加自定义镜像,详情请参见自定义镜像

    • 镜像URL:输入公共可访问的镜像公网地址,使用该镜像。您也可以直接填入当前region下ACR个人版中镜像的公网地址。

    网络配置

    仅当资源配额选择公共资源时,支持配置该参数。

    不同场景的配置策略详情,请参见DSW网络配置

    • 同时配置专有网络交换机安全组,可以在VPC内使用DSW。您可以直接选择已经创建的专有网络进行挂载,或者单击专有网络后的创建专有网络进行创建。

    • 公网访问网关支持以下配置方法:

      • 公有网关:集群中的DSW实例使用共享的公网带宽,在用户高并发时下载速度会比较慢。

      • 专有网关:独享带宽,您可以根据需求选择不同的带宽。选择该方式后,您需要为DSW实例关联的专有网络创建公网NAT网关、绑定EIP并配置SNAT条目。具体配置方法,请参见DSW通过专有公网网关访问公网

    • 仅当存储配置选择CPFS类型的数据集时,支持配置以下参数:

      • 启用所有选项:默认为关闭,系统会禁用与CPFS类型的数据集不通的专有网络。

      • 隐藏禁用选项:选中复选框,系统会隐藏与CPFS类型的数据集不通的专有网络。

      说明

      如果存储配置选择了CPFS类型的数据集,则需要配置专有网络,且选择的专有网络需要与CPFS一致。

  5. 单击下一步,在确认订单配置向导页面,确认所选配置无问题后,单击创建实例

通过Python SDK创建实例。

  1. 安装Python SDK。

    # 工作空间SDK安装。
    pip install alibabacloud-aiworkspace20210204 -U -q
    # DSW SDK安装。
    pip install alibabacloud_pai_dsw20220101 -U -q
    # OpenAPI依赖。
    pip install alibabacloud_tea_openapi -U -q
    # 预付费资源组查询SDK安装。
    pip install https://sdk-portal-us-prod.oss-accelerate.aliyuncs.com/downloads/u-b8602de7-c468-436c-8a02-2eca4a30d376-python-paistudio.zip -U -q
  2. 创建一个DSW实例。

    创建实例的代码示例如下所示。

    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_pai_dsw20220101.client import Client as DSWClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    
    from alibabacloud_aiworkspace20210204.models import (ListWorkspacesRequest,
                                                         ListImagesRequest,
                                                         ListDatasetsRequest,
                                                         ListResourcesRequest)
    
    from alibabacloud_pai_dsw20220101.models import (ListInstancesRequest,
                                                     ListEcsSpecsRequest,
                                                     CreateInstanceRequest,
                                                     StopInstanceRequest,
                                                     CreateInstanceShutdownTimerRequest,
                                                     CreateInstanceRequestRequestedResource,
                                                     CreateInstanceSnapshotRequest,
                                                     ListInstanceSnapshotRequest,
                                                     GetInstanceMetricsRequest,
                                                     CreateIdleInstanceCullerRequest)
    
    from alibabacloud_tea_openapi.models import Config as AliyunConfig
    from alibabacloud_tea_openapi.client import TeaException
    # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码中,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    # 本示例通过Credentials SDK默认从环境变量中读取AccessKey进行身份验证。
    region_id = 'cn-beijing'  # Region,可以是cn-hangzhou、cn-shanghai、cn-shenzhen等。
    cred = CredClient()
    
    # client config。
    workspace_client = AIWorkspaceClient(
        config=AliyunConfig(
           credential=cred,
           region_id=region_id,
           endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
       )
    )
    dsw_client = DSWClient(
        config=AliyunConfig(
            credential=cred,
            region_id=region_id,
            endpoint='pai-dsw.{}.aliyuncs.com'.format(region_id),
        )
    )
    
    # 定义一个用来显示DSW实例信息的Helper函数。
    
    
    def show_instance(instance_id):
        instance = dsw_client.get_instance(instance_id=instance_id).body
        print(instance.status, instance.instance_name, instance.ecs_spec, instance.accumulated_running_time_in_ms)
    
    # 查询一个已经存在的工作空间(Workspace)的属性和ID。
    workspace_name = '**已有的AI工作空间名称**'
    
    
    # 获取工作空间列表。
    workspaces = workspace_client.list_workspaces(ListWorkspacesRequest(
        page_number=1, 
        page_size=10,
        workspace_name=workspace_name, # 模糊匹配,如果未指定名称,则返回所有workspace。
    ))
    
    if len(workspaces.body.workspaces) == 0:
        raise RuntimeError('请指定正确的workspace_name')
    
    for workspace in workspaces.body.workspaces:
        print(workspace.workspace_name,
             workspace.workspace_id,
             workspace.status, workspace.creator)
    
    # 使用查询到的第一个结果作为后续操作的工作空间,您可以按需切换或者直接指定一个字符串类型的ID。
    workspace_id = workspaces.body.workspaces[0].workspace_id
    
    # 获取镜像列表,可以使用labels进行过滤。
    images = workspace_client.list_images(ListImagesRequest(
                        page_size=100,
                        #workspace_id=workspace_id, #不指定workspace_id则意味着查询所有PAI平台内置的镜像
                        labels=','.join(['system.supported.dsw=true',
                                        #'system.framework=tensorflow', #指定pytorch或者tensorflow
                                        'system.pythonVersion=3.6',
                                        ]),
                        verbose=True # verbose=True会列出更加详细的信息,包括labels
                        )) 
    
    # 可以查看所有可用的镜像。
    for image in images.body.images:
        print(image.image_id, image.image_uri)
    
    # 获得用于提交任务所使用的镜像,这里取第一个作为示例。
    image_uri = images.body.images[0].image_uri
    print('image_uri', image_uri)
    
    # 获取DSW的节点规格列表。
    try:
        resp = dsw_client.list_ecs_specs(ListEcsSpecsRequest(accelerator_type='CPU', # CPU 或者 GPU
                                                       )).body
    except TeaException as t:   
        print("List ECS Specs failed:", t.message)
    else:
        for spec in resp.ecs_specs:
            print(spec.instance_type + ", CPU: " + str(spec.cpu) + ", Memory: " + str(spec.memory))
    
        # 获得用于提交任务的节点规格。
        ecs_spec = resp.ecs_specs[0].instance_type
        print('Selected ecs_spec:', ecs_spec)
    # 创建DSW实例。
    request = CreateInstanceRequest(instance_name="Test_From_SDK_1",
                                    ecs_spec=ecs_spec,
                                    workspace_id=workspace_id,
                                    #image_id='', #可以指定工作空间中的镜像的ID,但是与image_url只能指定一个参数
                                    image_url=image_uri) 
    try:vi
        ins_resp = dsw_client.create_instance(request)
    except TeaException as t:
        print('创建实例失败,错误消息:' + t.message)
    else:
        instance_id = ins_resp.body.instance_id
        print("Created Instance ID:", instance_id)
    
        show_instance(instance_id)                           

    关于更多接口的说明,请参见API参考

相关文档

  • 创建实例后,您可以准备开发所需要的数据文件。DSW支持接入多种数据源,包括OSS、NAS和MaxCompute,详情请参见读写数据与文件传输;同时,还提供了数据上传和下载功能,适用于小数据量的文件传输,详情请参见上传与下载数据文件

  • DSW的功能特点、使用流程、快速入门等,详情请参见什么是DSW

  • 关于DSW的使用案例,详情请参见DSW使用案例汇总

  • 创建DSW实例等DSW相关API,详情请参见DSW API概览

阿里云首页 人工智能平台 PAI 相关技术圈