交互式建模 DSW 快速入门

DSW(Data Science Workshop)为您提供云端 AI 开发 IDE(开发机),内置多种开发环境。熟悉 Notebook 或 VSCode 的用户可快速开始模型开发。本文以 MNIST 手写体识别为例,介绍如何在 DSW 中快速开发模型。

说明

MNIST手写体识别是深度学习最经典的入门任务之一,任务目标是通过构建机器学习模型,来识别10个手写数字(0~9)。

image

前提条件

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

计费说明

本文案例将使用公共资源创建DSW实例及EAS模型服务,计费方式为按量付费,详细计费规则请参见DSW计费说明EAS计费说明

创建DSW实例

  1. 进入DSW页面。

    1. 登录PAI控制台

    2. 在页面左上方选择目标地域。

    3. 在左侧导航栏单击工作空间列表,进入待操作工作空间内。

    4. 在左侧导航栏选择模型开发与训练 > 交互式建模(DSW) > 新建实例

      image

  2. 配置实例向导页面,配置以下关键参数,其他参数默认即可。

    • 资源类型:选择公共资源,计费方式为按量付费;

    • 资源规格:选择ecs.gn7i-c8g1.2xlarge

      如果该规格实例库存不足,您也可以选择其他GPU实例。
    • 镜像:选择官方镜像,搜索并选择镜像:modelscope:1.26.0-pytorch2.6.0-gpu-py311-cu124-ubuntu22.04

      请尽可能选择与本文相同的镜像,以免发生运行环境问题。
    • 存储路径挂载:用于持久化存储模型开发过程中的文件,本文选择使用对象存储OSS。单击OSS,单击图标 image,选择Bucket并新建目录如:pai_test,完整参数配置如下。

      如果您尚未开通OSS,或在当前地域下没有可选的Bucket,可参考如下步骤开通OSS,并新建Bucket:

      (可选)开通OSS,并新建Bucket

      1. 开通OSS服务

      2. 登录OSS管理控制台单击创建Bucket,填写Bucket名称地域选择与当前PAI相同的地域,其他参数默认即可,然后单击完成创建

        image

      • Urioss://**********oss-cn-hangzhou-internal.aliyuncs.com/pai_test/

      • 挂载路径/mnt/data/

  3. 单击确定创建DSW实例。

    如果实例启动失败,您可以参考实例启动和释放常见问题解决。

DSW中开发模型

  1. 打开DSW实例

    单击打开,进入刚创建的DSW开发环境中。

    image

    PAI-DSW界面如图所示:

    image

  2. 编写模型开发代码。以使用Notebook开发环境为例,本文已为您准备好了MNIST手写体识别的训练代码,您可以单击mnist.ipynb下载代码,然后单击DSW左上角的image图标,上传该代码文件。

    image

  3. 执行模型训练代码。打开mnist.ipynb文件,找到如下训练代码的单元格,单击image按钮执行代码。该段代码会自动下载MNIST数据集到dataSet中,并将训练后最优的检查点保存到 output目录下。训练过程大约需要10分钟。

    image

    image

    训练过程中会输出模型在验证集上的准确率,它代表了模型在未知数据上的泛化能力。可以看到本次训练在验证集上准确率为98%,模型效果很好,可以继续后续步骤。

  4. 通过TensorBoard查看loss曲线,了解训练情况。执行如下单元格,单击TensorBoard页面地址http://localhost:6006/

    image

    后续查看完图像后,单击单元格的image图标可停止TensorBoard。

    TensorBoard中即可看到train_loss曲线(反映训练集损失)与 validation_loss曲线(反映验证集损失)。

    image

    (可选)根据loss图像,调整超参数,提升模型效果

    您可以根据损失值的变化趋势,初步判断当前模型的训练效果:

    • 在结束训练前 train_loss 与 validation_loss 仍有下降趋势(欠拟合)

      您可以增加 num_epochs(训练轮次,与训练深度正相关),或适当增大 learning_rate 后再进行训练,加大模型的对训练数据的拟合程度;

    • 在结束训练前 train_loss 持续下降,validation_loss 开始变大(过拟合)

      您可以减少 num_epochs,或适当减小 learning_rate 后再进行训练,防止模型过度训练;

    • 在结束训练前 train_loss 与 validation_loss 均处于平稳状态(良好拟合)

      模型处于该状态时,您可以进行后续步骤。

    受限于篇幅,本文无法对微调参数做过多讲解。您可以学习阿里云大模型 ACP 课程 来了解微调命令中的关键参数、以及如何通过损失曲线来决定是否应该继续微调等细节。

  5. 调用训练后的模型,体验模型效果。执行图中所示单元格,将展示20张测试图片,并输出图片的真实标签(label)和模型预测结果(predict)。

    image

    示例输出:

    image

  6. 将模型文件拷贝至对象存储OSS中,持久化存储。本文使用的是公共资源组创建的DSW实例,文件都存储在免费的云盘中,若实例停机超过15天,云盘内容将被清空。因此,可以将模型文件拷贝至OSS中持久化存储,同时便于后续使用PAI-EAS部署模型。

    image

    登录OSS管理控制台可以看到拷贝的文件:

    image

至此,模型的开发工作完成。如果您想要在生产环境的其他应用中调用该模型,可参考使用EAS将模型部署为在线服务

重要

本文使用了公共资源创建DSW实例,计费方式为按量付费。当您不需要使用DSW请停止或删除实例,以免继续扣费image

使用EAS将模型部署为在线服务

模型训练完成后,您可以通过EAS(Elastic Algorithm Service)快速部署为在线推理服务或AI-Web应用。EAS支持异构资源,结合自动扩缩容、一键压测、灰度发布、实时监控等能力,以更低成本保障高并发场景下的服务稳定性与业务连续性。

  1. 编写模型服务的web接口,并将其拷贝到OSS中。本文已经为您准备好了web接口代码和拷贝命令,您只需执行如下单元格即可。

    image

  2. (可选)在DSW中验证web接口是否可以正常启动。执行如下单元格安装缺失的三方包并启动服务。

    image

    运行测试服务接口的代码。在页面上方单击WebIDE,左侧单击request_web.py代码文件,然后单击image按钮执行代码,请求服务接口。

    image

    返回结果:

    {"prediction": 7}
    说明

    如果您想通过外部公网,直接访问DSW中的启动的web服务,还需要为DSW配置专有网络VPC,NAT网关,弹性公网EIP,详情请参见通过公网访问实例中的服务

  3. 配置EAS。在PAI控制台左侧导航栏单击模型在线服务(EAS)> 部署服务 > 自定义部署

    image

    配置如下关键参数,其他参数默认即可:

    • 部署方式镜像部署

    • 镜像配置:选择镜像地址,复制并粘贴前文DSW使用的镜像地址。

      已在使用 DSW 时验证,该镜像环境能正常运行本文的模型服务代码。因此,部署时建议使用相同镜像,以规避未知的运行环境问题。

      image

    • 模型配置:本文已将模型文件及服务接口代码拷贝至OSS中。因此,单击OSS,选择对应OSS路径。

      image

    • 运行命令:运行命令与 DSW 中的服务启动命令相同,但由于 web.py 现已挂载至 /mnt/data/,需相应修改 web.py 的路径。最终运行命令为:python /mnt/data/web.py

    • 端口:配置web.py中使用的端口9000

    • 三方库配置:在 DSW 中测试时发现,所选镜像缺少 bottle 库。因此,需要在第三方库配置中添加该库。

      image

    • 资源类型:选择公共资源资源规格选择ecs.gn7i-c8g1.2xlarge 即可。

    • 额外系统盘:单击展开更多配置,额外系统盘设置为20GB。

      由于使用的镜像较大,不设置额外系统盘会因空间不足无法启动。

    单击部署,创建服务。创建过程大约需要5分钟,当处于运行中状态时,代表部署成功。

  4. 查看调用信息。在模型服务详情页,单击查看调用信息获取公网调用地址Token

    image

  5. 调用服务。执行如下服务请求代码,注意将代码中的调用地址Token替换为上步获取的真实信息。

    import requests
    
    """
    测试图片url:
    label7
    http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_7_No_0.jpg
    label2
    http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_2_No_1.jpg
    label1
    http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_1_No_2.jpg
    label0
    http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_0_No_3.jpg
    label4
    http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_4_No_4.jpg
    label5
    http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_9_No_5.jpg
    """
    
    image_url = 'http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_7_No_0.jpg'
    
    # 由客户端下载图片,得到二进制数据
    img_response = requests.get(image_url, timeout=10)
    # 根据状态码自动检测请求是否成功
    img_response.raise_for_status()
    img_bytes = img_response.content
    
    # header信息 <EAS_TOKEN>需替换为实际的Token
    # 实际生产中建议您将Token设置为环境变量,防止敏感信息泄漏
    # 环境变量配置方法请参见:https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems
    headers = {"Authorization": "Token"}
    # 把二进制数据作为POST请求的body,发送到模型服务
    resp = requests.post('调用地址/predict_image', data=img_bytes, headers=headers)
    print(resp.json())

    返回结果:

    {"prediction": 7}
重要

本文使用了公共资源创建EAS服务,计费方式为按量付费。当您不需要使用服务时请停止或删除服务,以免继续扣费

image

相关文档