创建DSW实例

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

DSW(Data Science Workshop)为您提供云端AI开发IDE或开发机,内置多种开发环境,熟悉Notebook/VSCode的用户,可以快速开始模型开发。本文为您介绍创建实例时可配置的参数,以及实例启动和释放时常见的问题。

前提条件

使用主账号开通PAI并创建工作空间。登录PAI控制台,左上角选择开通区域,然后一键授权和开通产品,详情见开通PAI并创建工作空间

通过控制台创建实例

初次使用DSW的用户,推荐您使用控制台的方式创建实例,除此之外,DSW还提供了通过Python SDK创建实例的方式。

重要

当您使用公共资源创建实例后,将开始按照实例的服务时长计费,当停止或删除实例后计费才会停止,详细计费规则,请参见交互式建模(DSW)计费说明

  1. 进入DSW页面。

    1. 登录PAI控制台

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

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

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

  2. 单击新建实例

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

    基础信息

    参数

    描述

    实例名称

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

    标签

    根据业务需要对实例打标,方便您对资源进行多维度查找、定位、批量操作、分账。

    资源信息

    参数

    描述

    资源类型

    • 公共资源:按量付费模式,无法转为包年包月

      说明

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

      • 资源规格:可选择GPU、CPU或免费试用资源。规格信息,请参见实例规格族

      • 竞价购买:可以选用竞价实例(抢占式实例),降低运行成本。详情请参见竞价购买DSW实例

        当前仅华东1(杭州)、华东2(上海)、华北2(北京)、华北6(乌兰察布)、华南1(深圳)、华南3(广州)、日本(东京)、新加坡地域支持配置该参数。

    • 资源配额:包年包月计费模式。

      • 资源配额:可选择通用计算资源、灵骏智算资源,如果没有可选资源,单击关联资源配额进行配置。

      • 资源规格:根据实际需求设置GPU、CPU和内存等。

      • 优先级: 优先级范围为1~9 ,数值越大,优先级越高。

      • CPU亲和性:能够将容器或Pod中的进程绑定到特定的CPU核心上执行。通过这种方式,可以减少CPU缓存未命中、上下文切换等现象,从而提高CPU利用率,提升应用性能,适用于对性能敏感和实时性要求高的场景。

        当前仅华北2(北京)、华南1(深圳)地域支持配置该参数。

    环境信息

    描述

    镜像

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

    • 自定义镜像:可使用添加到PAI的自定义镜像,镜像仓库需要设置为公开拉取状态,或将镜像存储在容器镜像服务ACR中,详情请参见自定义镜像

    • 镜像地址:支持配置公网环境下可访问的自定义镜像或官方镜像地址。

      • 如果是私有镜像地址,需要单击输入账号密码,并配置镜像仓库用户名和密码

      • 提升镜像拉取速度,可参见镜像加速

    系统盘

    用于存储开发过程中的文件。当资源类型选择公共资源,或当资源配额选择预付费通用计算资源(CPU核数≥2且内存≥4G,或配置GPU)时:每个实例会赠送100 GiB免费系统盘额度。云盘支持扩容,具体扩容价格以控制台界面为准。

    警告
    • 仅使用免费额度系统盘,如果实例停机超过15天,云盘的内容将被清空

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

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

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

    如果您需要永久性存储,可以配置数据集挂载存储路径挂载

    数据集挂载

    可用于存储需要读取的数据集,或持久化存储开发过程中的文件,支持以下两种数据集类型:

    • 自定义数据集:您可以创建自定义数据集来存放训练所需的数据文件,支持设置是否只读,支持在版本列表中选择数据集版本。

    • 公共数据集:PAI预置有公开的数据集,只支持只读挂载模式。

    挂载路径:表示数据集挂载到DSW的路径,例如/mnt/data,在代码中您可以检索该路径获取数据集。

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

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

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

    更多关于挂载的详情,请参见挂载数据集/OSS/NAS/CPFS

    存储路径挂载

    您也可以使用存储类型挂载存储需要读取的数据集,或持久化存储开发过程中的文件。

    • 支持类型:OSS、通用型NAS、极速型NAS、CPFS、智算CPFS。

    • 挂载路径:表示数据集挂载到DSW的路径,例如/mnt/data,在代码中您可以检索该路径获取数据集。

    更多关于挂载的详情,请参见挂载数据集/OSS/NAS/CPFS

    工作目录

    工作目录是Notebook、WebIDE的启动路径,挂载至/mnt/workspace

    展开更多配置

    参数

    描述

    自定义启动脚本

    用于在实例启动过程中定制环境或执行初始化任务。自定义脚本的执行时间在镜像和资源准备完成后,JupyterLab、Code Server等开发应用启动前。

    说明
    • 超时时间为3分钟:自定义脚本会增加实例的启动时间,脚本超时时间为3分钟,请勿在自定义脚本中执行镜像下载等长耗时任务。

    • 可查看脚本运行日志:实例启动后可在/var/log/user-command/路径下找到自定义脚本运行产生的日志。

    环境变量

    用于主容器启动、系统进程和用户进程。您可以按需增加自定义的环境变量或覆盖系统默认环境变量。

    注意:如下环境变量不建议修改:

    # 修改不会生效
    USER_NAME # 会被service里的逻辑覆盖
    
    # 不建议修改的系统变量,修改可能会影响正常使用
    JUPYTER_NAME:默认由实例信息构造而来,可用于修改jupyterlaburl访问路径
    JUPYTER_COMMAND: jupyter启动指令,默认设置为lab用于启动jupyterlab
    JUPYTER_SERVER_ADDR: jupyterlab服务监听地址,默认为0.0.0.0
    JUPYTER_SERVER_PORT: jupyterlab服务监听端口,默认为8088
    JUPYTER_SERVER_AUTH: jupyterlab访问密码,默认为空
    JUPYTER_SERVER_ROOT: jupyter工作目录,优先级不如WORKSPACE_DIR高
    CODE_SERVER_ADDR: code-server服务监听地址,默认为0.0.0.0
    CODE_SERVER_PORT: code-server服务监听地址,默认为8082
    CODE_SERVER_AUTH: code-server访问密码,默认为空
    WORKSPACE_DIR: 系统根据实例新建时设置的工作目录参数设定这个环境变量。可改变jupyter、codeserver的启动目录。如果路径不存在可能报错。

    高级配置

    允许用户通过高级配置,来调整部分业务所需且安全的内核参数。目前只支持灵骏资源组实例进行设置,参数详情请参见下表

    高级配置参数

    默认值

    说明

    注意事项

    VmMaxMapCount

    65530

    设置进程可拥有的最大内存映射区域数量。

    例如,可配置为1024000。

    小于65530不生效;过高值可能导致内存资源浪费。

    网络信息

    参数

    描述

    专有网络配置

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

    当您想要在专有网络VPC内使用DSW实例时,可以在DSW相同地域创建VPC并配置此参数,同时需配置交换机安全组。不同场景的配置策略详情,请参见网络配置

    公网访问网关

    支持以下配置方法:

    • 公有网关:其网络带宽受限,在用户高并发或下载大型文件时,网络速度可能无法满足需求。

    • 专有网关:为解决公有网关带宽限制问题,可以在DSW的专有网络中创建公网NAT网关、绑定EIP并配置SNAT条目,详情请参考通过专有网关提升公网访问速率

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

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

    说明

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

    访问配置

    参数

    描述

    启用SSH

    用于远程连接实例,选择专有网络后可配置。若您配置了自定义镜像,请确认自定义镜像安装了sshd。

    SSH公钥

    打开SSH配置开关后可配置该参数。

    说明

    如果您需要同时支持VPC内登录和公网登录方式,您需要同时添加多个客户端的公钥。请按照回车换行的方式逐个添加公钥,最多支持添加10个公钥。

    SSH访问方式

    打开SSH配置开关后可配置该参数。

    • VPC内访问:默认支持该访问方式。您可以从VPC内的其他终端(例如ECS),通过SSH远程连接DSW实例。

    • 公网访问:选中该项,可以增加公网访问方式。后续,您可以通过本地命令行或其他终端使用SSH远程连接实例。

      • NAT网关:选择为专有网络创建的公网NAT网关。

      • 弹性公网IP:选择在公网NAT网关中已创建的弹性公网IP。

    自定义服务

    用于在公网中访问DSW中启动的服务,详情请参见通过公网访问实例中的服务

    创建VPC内访问域名

    创建一条内置权威域名(Private Zone),您可在VPC内使用该域名来访问当前实例的SSH服务或其他自定义服务,避免使用变化的实例IP带来的访问不便。请注意创建的内置权威域名会产生费用,详情请参见云解析DNS产品计费

    角色与权限

    参数

    描述

    可见范围

    可选择仅实例所有者可见工作空间内公开可见

    实例所有者

    仅工作空间管理员可修改实例所有者。

    展开更多配置

    参数

    描述

    实例RAM角色

    当在DSW实例内访问其他云资源时,可以为实例关联RAM角色,该方式基于STS临时凭证访问其他云资源,无需配置长期AccessKey,有效降低密钥泄露的风险。

    实例RAM角色可配置为:

    • PAI默认角色:拥有访问PAI内部产品、MaxComputeOSS的权限。基于PAI默认角色签发的临时访问凭证,在访问PAI内部产品、MaxCompute表时,将拥有等同于DSW实例所有者的权限;在访问OSS时,仅能访问当前工作空间配置的默认存储路径Bucket。

    • 自定义角色:当您想要定制或者更精细的权限管理,可以配置自定义角色。

    • 不关联角色:当您想直接通过AccessKey访问其他云产品时,可以选择不关联角色。

    更多关于实例RAM角色的配置说明,请参见配置DSW实例RAM角色

  4. 确认所选配置无问题后,单击确定

实例启动和释放常见问题

实例启动

1. DSW实例启动失败

排查方法:单击DSW实例名称,在事件页签下查看报错信息。

image

通常DSW实例启动失败包含以下错误:

  • Your requested resource type [ecs.******] is not enough currently, please try other regions or other resource types

    • 错误原因:该地域下您所选取的资源规格库存紧张,导致无法创建实例。

    • 解决方案:稍后再尝试创建,或者更换其他资源规格和地域。

  • Your resource usage has exceeded the default limitation. Please contact us via ticket system to raise the limitation.

    • 错误原因:在创建DSW实例时,当前限制每个阿里云账号(主账号)在每个地域最多一次创建2*GPU规格的实例,当选择的规格超过2*GPU时,会创建失败。

    • 解决方案:如果您需要提升限额,请提交工单联系我们。

  • Sales of this resource are temporarily suspended in the specified zone. We recommend that you use the multi-zone creation function to avoid the risk of insufficient resource.

    当前指定区域的资源销售已暂停,您可以尝试以下操作来规避资源不足的风险:

    • 切换至其他地域。

    • 调整实例的资源规格。

    • 尝试在非高峰时段启动实例。

  • CommodityInstanceNotAvailableError:Commodity instance has been released due to prolonged arrears at past. Please create a new instance for use

    • 错误原因:因长时间欠费,系统自动回收资源并释放了实例。

    • 解决方案:需要重新创建新的实例。

  • The charge of current ECI instance has been stopped, but the related resources are still being cleaned.

    • 错误原因:试用资源是公共资源,如果在使用高峰期来启动DSW实例时,有可能启动时间长达半个多小时,如果一个小时拉取不到资源,系统会提示当前地域没有您所选的规格。

    • 解决方案:尝试以下操作:

      • 切换地域。

      • 变配实例的资源规格(等待中的实例不支持修改规格,您可手动停止实例,然后进行规格切换)。

      • 在非高峰期(如非工作时间)时使用。

      • 如果上述方法均无法解决问题,请联系您的商务经理进行处理。

  • The cluster resources are fully utilized. Please try later or other regions.

    • 错误原因:当前计算资源已完全被占用。

    • 解决方案:尝试以下操作:

      • 切换地域。

      • 变配实例的资源规格(等待中的实例不支持修改规格,您可手动停止实例,然后进行规格切换)。

      • 在非高峰期(如非工作时间)时使用。

      • 如果上述方法均无法解决问题,请联系您的商务经理进行处理。

  • Create ECI failed because the specified instance is out of stock. It is recommended to use the multi-zone creation function to avoid the risk of stockout.

    错误原因:指定的计算资源已经售罄。

    解决方案:尝试以下操作:

    • 切换地域。

    • 变配实例的资源规格(等待中的实例不支持修改规格,您可手动停止实例,然后进行规格切换)。

    • 在非高峰期(如非工作时间)时使用。

    • 如果上述方法均无法解决问题,请联系您的商务经理进行处理。

  • back-off 10s restarting failed container=dsw-notebook pod

    • 错误原因:系统盘已满,需要对系统盘进行扩容。

      查看系统盘占用情况:

      image

      image

    • 解决方案:通过变更配置对系统盘进行扩容:

      image

      重要

      扩容过系统盘后,无论实例是否处于运行状态,系统盘都会持续计费。如果您想停止DSW实例相关的一切计费,请删除DSW实例。删除前请务必确保必要数据已备份。

  • the available zone with vSwitch is out of stockInternalError-ResourceAllocateFailed

    • 错误原因:在创建DSW实例时配置了VPC专有网络,由于VPC下的vSwitch交换机具有可用区属性,配置交换机后,计算资源的查找范围将被限制在该交换机所在的可用区内,可能会出现资源短缺的问题。

    • 解决方案:对指定DSW实例进行配置变更,将专有网络配置为空。

      image

      说明

      如果需要使用专有网络,建议切换到另一个可用区并重新创建一个vSwitchDSW实例,以扩大可用资源的范围,避免因资源范围小而导致的货源短缺问题。

  • 启动失败,提示Workspace member not found

    此错误表示您当前登录的账号不是目标工作空间的成员。请联系您的工作空间管理员,将您的账号添加为该工作空间的成员。

  • InternalError-Failed to perform action, error: OperationDenied.NoStock: The resource is out of stock in the specified zone. Please try other types, or choose other regions and zones.

    指定区域的资源暂时缺货,请尝试选择其他类型或更换到其他区域。

  • RISK.RISK_CONTROL_REJECTION

    账号因为风控的原因被限制了,需要解除风控后才能进行创建。

其他启动失败原因:

  • 欠费导致创建失败

    如果您的账号欠费,将导致创建DSW实例创建失败,并且代金券不能抵扣欠费,您可登录费用与成本控制台,查看账户是否欠费。

2. DSW启动时可以开机执行Python文件吗?

目前,DSW启动时不支持开机执行Python文件。

3. 找不到DSW实例?

如果找不到实例,您可以尝试切换不同地域和工作空间。

image

4. DSW 页面异常或无法操作怎么办?

如果遇到页面白屏、Notebook 一直转圈加载,或者 Terminal 无法输入命令这类问题,通常与您的本地环境有关。请尝试以下步骤:

  1. 清理浏览器缓存后重试。

  2. 使用浏览器的 无痕/隐私模式 访问。

  3. 更换网络环境,例如从公司内网切换至手机热点,以排查防火墙限制。

  4. 尝试使用 其他浏览器(如 Chrome、Firefox)。

5. DSW实例停止或重启、变更实例规格、更换实例镜像是否会丢失数据?

  • 实例停止或重启:不会丢失。在实例停止或重启后,所有通过pip安装的包、代码文件以及其他存储在实例磁盘上的数据都会被保留,不会丢失。

  • 变更实例规格:不会丢失。调整实例规格(如CPU、内存、GPU等资源配置)不会影响实例的磁盘数据。

  • 更换实例镜像:可能会丢失部分数据。变更镜像不会影响挂载的数据集或OSS存储中的数据,但系统盘内的内容可能会被重置。因此,您在变更实例镜像时,注意保存实例数据。比如可以将数据复制或移动到数据集或OSS中。详情请参见挂载数据集/OSS/NAS/CPFS

6. 启动DSW实例时间越来越长

每次启动时间逐渐变长可能是由于您的保存镜像体积较大所致。

实例停止/删除/释放

1. 如何释放DSW实例?

DSW实例列表页,单击停止或删除实例。

image

注意:如果创建DSW实例时有扩容过系统盘,无论实例是否处于运行状态,系统盘都会持续计费。如果您想停止DSW实例相关的一切计费,请删除DSW实例。

2. 怎么找不到DSW实例?

如果找不到实例,您可以尝试切换不同地域和工作空间。

image

3. 如何释放免费试用抵扣包?

免费试用抵扣包无需释放或停止。

4. 如何完全停止DSW实例的计费?“停止”和“删除”操作有什么不同?

  • 停止实例:此操作释放实例的计算资源(CPU/GPU),并暂停计算费用。注意:扩容的系统盘会继续计费

  • 删除实例:此操作永久删除实例及其所有资源(包括系统盘)。所有相关计费会完全停止。

如何选择

  • 停止:临时不用,但想保留数据和环境供未来重启。

  • 删除:不再需要,希望停止所有计费。操作前请备份数据。

5. 为什么我的DSW实例长时间处于“停止中”或“删除中”状态,无法完成操作?

停止或删除实例需要时间。系统需要安全地终止任务、保存状态和回收资源。如果实例长时间无响应,常见原因如下:

  • 实例中有未正常结束的进程。

  • 内存占用过高,导致实例无法响应关机指令。

遇到这种情况,通常耐心等待一段时间后刷新页面,实例状态会正常停止。

6. 停止或删除DSW实例后,我的数据和代码会丢失吗?

数据是否保留取决于您的操作以及实例的资源组类型。

  • 停止实例:

    数据保留策略因资源组类型而异。

    • 公共资源组实例:数据会保留在挂载的云盘中。注意:实例连续停止超过 15 天,云盘和数据将被删除。

    • 专有资源组实例:数据存储在实例系统盘。停止实例会删除数据,且无法恢复。

  • 删除实例:

    其系统盘中的所有数据都将被永久擦除,且无法恢复。因此,在删除前务必备份所有重要数据。

7. 为什么我正在运行的DSW实例会自动停止?

实例配置了闲置自动关机策略。此策略旨在节省资源,默认对免费试用实例启用。

  • 触发条件:实例的 CPU 和 GPU 使用率连续 3 小时低于设定阈值。

  • 操作建议:

    • 手动停止:为确保节省资源,请在不使用时手动停止实例。自动关机策略不保证每次都触发。

    • 修改策略:如需运行长时任务,请修改或禁用此策略。具体操作步骤如下:

      修改DSW自动关机策略

      1. 进入工作空间详情页,单击工作空间配置 > 调度配置

        image

      2. 找到DSW的配置区域,在此处即可修改DSW的关机策略以及排除策略。

        image

8. 我已经将所有DSW实例停止或删除了,为什么还显示“运行中”或收到计费通知?

检查以下常见原因:

  • 混淆了资源包与实例。您看到的“运行中”状态可能指资源包(如“每月250计算时”),而非实例。资源包在有效期内始终有效,其状态与实例无关。

  • 扩容的系统盘仍在计费。停止实例仅暂停计算费用。扩容后的系统盘会继续产生存储费用。

  • 账单存在延迟。计费并非实时,账单可能在您使用资源几小时后才生成。例如,上午产生的费用,可能在下午才显示在账单中。

附录: 通过Python SDK创建实例

  1. 安装阿里云的Credentials工具。当您通过阿里云SDK调用OpenAPI进行资源操作时,必须安装Credentials工具配置凭证信息。要求:

    • Python版本 >= 3.7。

    • 使用V2.0代系的阿里云SDK。

    pip install alibabacloud_credentials
  2. 获取账号AccessKey。本示例使用AK信息配置访问凭证,为防止账号信息泄露,建议您将AccessKey配置为环境变量,idsecret环境变量名分别为ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。

  3. 安装PAI相关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
  4. 创建一个DSW实例。

    创建实例的代码示例

    import os
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import (ListWorkspacesRequest,
                                                         ListImagesRequest,
                                                         ListDatasetsRequest,
                                                         ListResourcesRequest)
    from alibabacloud_pai_dsw20220101.client import Client as DSWClient
    from alibabacloud_pai_dsw20220101.models import (GetInstanceRequest,
                                                     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 IDAccessKey Secret保存到工程代码中,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    # 本示例通过Credentials SDK默认从环境变量中读取AccessKey进行身份验证。
    region_id = 'cn-beijing'  # Region,可以是cn-hangzhou、cn-shanghai、cn-shenzhen等。
    config = Config(
    	type='access_key',
    	access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    	access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    )
    cred = Client(config)
    # 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, request=GetInstanceRequest()).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:
        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概览