通过 DSW(Data Science Workshop)的内置 Notebook 或 VSCode,在云端开发、训练并部署深度学习模型。本文以 MNIST 手写数字识别为例,演示完整流程。
MNIST 手写数字识别是深度学习经典入门任务,目标是训练模型识别 10 个手写数字(0~9)。
一. 前提条件
主账号已开通 PAI 并创建工作空间。如尚未开通,访问PAI 控制台,在页面左上角选择目标地域,完成一键授权和产品开通。
二. 计费说明
三. 创建 DSW 实例
进入 DSW 页面。
访问PAI 控制台。
在页面左上方选择目标地域。
在左侧导航栏单击工作空间列表,进入目标工作空间。
在左侧导航栏选择。
在配置实例向导页面配置以下参数,其他保持默认。
资源类型:选择公共资源(按量付费)。
资源规格:选择
ecs.gn7i-c8g1.2xlarge。该规格库存不足时,可选择其他 GPU 实例。
镜像配置:选择官方镜像,搜索镜像
modelscope:1.26.0-pytorch2.6.0-gpu-py311-cu124-ubuntu22.04。建议使用相同镜像以避免环境兼容问题。
存储挂载:持久化存储模型开发文件。本文使用对象存储 OSS。单击 OSS,单击图标
,选择 Bucket 并新建目录(例如pai_test)。如果当前地域没有可用 Bucket,参考以下步骤创建:
Uri:
oss://**********oss-cn-hangzhou-internal.aliyuncs.com/pai_test/挂载路径:
/mnt/data/
单击确定创建实例。
实例启动失败时,参见创建DSW实例排查。
四. 在 DSW 中开发模型
在实例列表单击打开,进入 DSW 开发环境。在启动台单击创建 Notebook。
编写模型代码。本文已提供 MNIST 训练代码:下载mnist.ipynb,然后在 DSW 左上角单击
图标上传文件。训练模型。打开
mnist.ipynb,找到训练代码单元格,单击
执行。代码将自动下载 MNIST 数据集到dataSet目录,并将训练后的模型保存至output目录。训练约需 10 分钟。import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms from torch.utils.tensorboard import SummaryWriter # 超参数 batch_size = 64 # 每次训练的数据量 learning_rate = 0.01 # 学习率 num_epochs = 5 # 训练轮次 # 检查是否有可用的 GPU device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')Train Epoch: 3 [57600/60000 (96%)] Loss: 0.116840 Validation Loss: 0.0753, Accuracy: 9750/10000 (98%) Model saved with accuracy: 97.50% Train Epoch: 4 [0/60000 (0%)] Loss: 0.155105 Train Epoch: 4 [6400/60000 (11%)] Loss: 0.025345 Train Epoch: 4 [12800/60000 (21%)] Loss: 0.063321 Train Epoch: 4 [19200/60000 (32%)] Loss: 0.129752 Train Epoch: 4 [25600/60000 (43%)] Loss: 0.021768 Train Epoch: 4 [32000/60000 (53%)] Loss: 0.127890 Train Epoch: 4 [38400/60000 (64%)] Loss: 0.049701 Train Epoch: 4 [44800/60000 (75%)] Loss: 0.025785 Train Epoch: 4 [51200/60000 (85%)] Loss: 0.042838 Train Epoch: 4 [57600/60000 (96%)] Loss: 0.064462 Validation Loss: 0.0666, Accuracy: 9767/10000 (98%) Model saved with accuracy: 97.67% Training complete. writer.close()训练过程输出模型在验证集上的准确率(反映泛化能力)。本次训练验证集准确率为 98%,可进入后续步骤。
查看训练曲线。执行以下单元格,单击 TensorBoard 地址
http://localhost:6006/。!tensorboard --logdir=/mnt/workspace/output/runs TensorFlow installation not found - running with reduced feature set. NOTE: Using experimental fast data loading logic. To disable, pass "--load_fast=false" and report issues on GitHub. More details: https://github.com/tensorflow/tensorboard/issues/4784 Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all TensorBoard 2.19.0 at http://localhost:6006/ (Press CTRL+C to quit) ^CTensorBoard 显示 train_loss(训练集损失)和 validation_loss(验证集损失)曲线。

查看完曲线后,单击单元格的
图标停止 TensorBoard。未停止 TensorBoard 将导致后续单元格无法执行。测试模型效果。执行以下单元格,展示 20 张测试图片及其真实标签(label)和模型预测结果(predict)。
单击左侧的运行按钮执行以下代码:
import torch import torch.nn as nn import torch.nn.functional as F from torchvision import datasets, transforms import matplotlib.pyplot as plt # 定义与训练时相同的模型结构 class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(1, 10, kernel_size=5)示例输出:

持久化模型文件。本文使用公共资源组创建 DSW 实例,文件存储在免费云盘中。实例停机超过 15 天后,云盘内容将被自动清空。将模型文件拷贝至 OSS,以便后续使用 PAI-EAS 部署。
!cp -r /mnt/workspace/output/ /mnt/data/访问OSS 控制台查看已拷贝的文件:
OSS 存储路径
pai_test/output/下包含runs/文件夹和best_model.pth模型文件。
模型开发完成后,可将模型部署为在线服务,参见五. 使用 EAS 部署模型服务。
本文使用公共资源创建 DSW 实例,按量计费。不使用时请在实例列表页面右侧,停止或删除实例,避免持续扣费。
五. 使用 EAS 部署模型服务
EAS(Elastic Algorithm Service)将训练好的模型部署为在线推理服务或AI-Web应用。EAS支持异构资源,结合自动扩缩容、一键压测、灰度发布、实时监控等能力,以更低成本保障高并发场景下的服务稳定性。
编写模型 Web 接口并拷贝至 OSS。本文提供了 Web 接口代码和拷贝命令,执行以下单元格即可。
# 下载模型预测web服务接口代码web.py !curl -f -o web.py "http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/web.py" # 下载请求模型服务的测试代码 !curl -f -o request_web.py "http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/request_web.py" # 将web.py拷贝至OSS !cp /mnt/workspace/web.py /mnt/data/web.py(可选)在 DSW 中验证 Web 接口。执行以下单元格安装依赖并启动服务。
# 安装bottle包 !pip install bottle # 启动web.py服务 !python web.py Looking in indexes: https://mirrors.aliyun.com/pypi/simple/ Requirement already satisfied: bottle in /usr/local/lib/python3.11/site-packages (0.13.4) WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv [notice] A new release of pip is available: 23.3.2 -> 25.1.1 [notice] To update测试接口。在页面上方单击 WebIDE,左侧单击
request_web.py,单击
执行代码。import requests """ 测试图片url: label为7 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_7_No_0.jpg label为2 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_2_No_1.jpg返回结果:
{"prediction": 7}说明通过公网访问 DSW 中的 Web 服务需配置 VPC、NAT 网关和 EIP,详情参见通过公网访问实例中的服务。
创建 EAS 服务。在 PAI 控制台左侧导航栏单击模型在线服务(EAS) > 部署服务 > 自定义部署。
配置以下参数,其他保持默认:
部署方式:镜像部署
镜像配置:选择镜像地址,粘贴 DSW 使用的镜像地址。
DSW 已验证该镜像可正常运行模型代码,部署时使用相同镜像可避免环境问题。在 DSW 的实例列表页面,找到目标实例对应的镜像版本列,单击镜像地址右侧的复制图标即可获取该镜像地址。
存储挂载:模型文件和 Web 接口代码已拷贝至 OSS。单击 OSS,选择对应路径。
Uri:oss://*****/pai_test/
挂载路径:/mnt/data/
运行命令:
web.py已挂载至/mnt/data/,需调整路径。运行命令为:python /mnt/data/web.py端口号:填写
web.py使用的端口号9000。三方库配置:所选镜像缺少 bottle 库,在此处添加
bottle。资源类型:选择公共资源,资源规格选择
ecs.gn7i-c8g1.2xlarge。配置系统盘:设置为 20GB。
镜像体积较大,系统盘空间不足时会导致实例启动失败,建议设置为 20 GB 或以上。
单击部署创建服务。创建约需 5 分钟,状态变为运行中时代表部署成功。
获取调用信息。在服务详情页单击查看调用信息,获取公网调用地址和Token。
调用服务。将以下代码中的公网调用地址和Token替换为实际值,然后执行代码。
import requests """ 测试图片url: label为7 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_7_No_0.jpg label为2 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_2_No_1.jpg label为1 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_1_No_2.jpg label为0 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_0_No_3.jpg label为4 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_4_No_4.jpg label为5 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://www.alibabacloud.com/help/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 服务,按量计费。不使用时请在服务列表页面右侧,停止或删除服务,避免持续扣费。
六. 相关文档
DSW 启动失败排查参见创建DSW实例。
DSW 计费说明参见交互式建模(DSW)计费说明。
DSW 核心功能参见DSW概述。
在公网访问 DSW Web 服务参见通过公网访问实例中的服务。
EAS 核心功能参见EAS概述。