阿里云国际代理商:人工智能平台PAI-分布式训练 DLC 快速入门

DLC 可快捷创建分布式或单机训练任务,无需手动购买机器和配置环境。本文以MNIST手写体识别为例,演示单机单卡训练和多机多卡分布式训练的完整流程。

说明

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

一. 前提条件

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

二. 计费说明

本文案例将使用公共资源创建DLC任务,计费方式为按量付费,计费规则参见分布式训练(DLC)计费说明。

三. 单机单卡训练

3.1 创建数据集

数据集用于存储模型训练的代码、数据、以及训练结果。本文以对象存储OSS类型数据集为例进行说明。

  1. 在PAI控制台左侧菜单栏单击数据集 > 自定义数据集 > 新建数据集

  2. 配置数据集参数。关键参数配置如下,其他参数默认即可。

    • 名称:如:dataset_mnist

    • 存储类型对象存储(OSS)

    • OSS路径:单击图标 image,选择bucket并新建目录如:dlc_mnist

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

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

       

    单击确定创建数据集。

  3. 上传训练代码和数据。

    1. 下载代码。本文已经为您准备好了训练代码,单击mnist_train.py下载。为减少您的操作,代码运行时会自动将训练数据下载到数据集的dataSet目录中。

      您在后续实际业务使用时,可以预先把代码和训练数据上传到PAI的数据集中。

      单机单卡训练代码示例 mnist_train.py

       

    2. 上传代码。在数据集详情页,单击查看数据跳转至OSS控制台。然后单击上传文件 >扫描文件 > 上传文件,将训练代码上传至OSS中。

3.2 创建DLC任务

  1. 在PAI控制台左侧菜单栏单击分布式训练(DLC) > 新建任务

  2. 配置DLC任务参数。关键参数配置如下,其他参数默认即可。全量参数请参见创建训练任务。

    • 镜像配置:选择镜像地址,然后根据您所在地域填写对应镜像地址。

      在控制台顶部导航栏的地域选择器中确认当前所在地域(如华东1(杭州))。

      地域

      对应镜像地址

      北京

      dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      上海

      dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      杭州

      dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      其他

      查询地域ID,并替换镜像地址中的<地域ID>获取完整链接:

      dsw-registry-vpc.<地域ID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      该镜像已在DSW 交互式建模快速入门中验证没有环境问题。使用PAI建模时,通常先在DSW中验证环境、开发代码,然后再使用DLC训练。

    • 数据集挂载:选择自定义数据集,选择上一步中创建的数据集。挂载路径默认/mnt/data

    • 启动命令python /mnt/data/mnist_train.py

      该启动命令与在DSW或本地运行时相同。但由于mnist_train.py 现已挂载至 /mnt/data/,因此仅需要修改代码的路径为/mnt/data/mnist_train.py

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

      如果该规格实例库存不足,您也可以选择其他GPU实例。

    单击确定创建任务,任务大约需要执行15分钟。执行过程中可以单击日志查看训练过程。

    训练日志显示MNIST模型在Epoch 18验证准确率达到9886/10000(约99%),任务状态为已成功,最终输出Training complete. writer.close()

    执行完成后,会在挂载数据集的output路径下输出最佳的模型检查点,以及TensorBoard日志。

    OSS Bucket 的 dlc_mnist/ 目录下包含 dataSet/ 子目录(训练数据)、output/ 子目录(模型输出)以及 mnist_train.py 训练脚本文件。

3.3 查看Tensorboard(可选)

您可以借助可视化工具TensorBoard查看loss曲线,了解训练的具体情况。

重要:DLC任务如果想使用TensorBoard,必须配置数据集。
  1. 单击DLC任务详情页上方的Tensorboard > 新建Tensorboard

  2. 配置类型选择按任务,在Summary目录处填写训练代码中Summary存储的路径:/mnt/data/output/runs/,单击确定启动。

    对应代码片段:writer = SummaryWriter('/mnt/data/output/runs/mnist_experiment')

  3. 单击查看Tensorboard查看train_loss曲线(反映训练集损失)与 validation_loss曲线(反映验证集损失)。

    image

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

     

3.4 部署训练后的模型

详情请参见五. 使用 EAS 部署模型服务。

四. 单机多卡或多机多卡分布式训练

当单个GPU的显存无法满足训练需求,或者想要加快训练速度时,您可以创建单机多卡或多机多卡的分布式训练任务。

本文以使用2台各有1个GPU的实例为例进行说明,该示例同样适用于其他配置的单机多卡或多机多卡训练。

4.1 创建数据集

如果您在三. 单机单卡训练时已经创建了数据集,只需单击下载代码mnist_train_distributed.py并上传。否则请先3.1 创建数据集,再上传该代码。

单机多卡或多机多卡训练代码示例 mnist_train_distributed.py

 

4.2 创建DLC任务

  1. 在PAI控制台左侧菜单栏单击分布式训练(DLC) > 新建任务

  2. 配置DLC任务参数。关键参数配置如下,其他参数默认即可。全量参数请参见创建训练任务。

    • 镜像配置:选择镜像地址,然后根据您所在地域填写对应镜像地址。

      地域

      镜像地址

      北京

      dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      上海

      dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      杭州

      dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      其他

      查询地域ID,并替换镜像地址中的<地域ID>获取完整链接:

      dsw-registry-vpc.<地域ID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04

      该镜像已在DSW 交互式建模快速入门中验证没有环境问题。使用PAI建模时,通常先在DSW中验证环境及代码,然后再使用DLC训练。

    • 数据集挂载:选择自定义数据集,并选择上一步中创建的数据集。挂载路径默认/mnt/data

    • 启动命令torchrun --nproc_per_node=1 --nnodes=${WORLD_SIZE} --node_rank=${RANK} --master_addr=${MASTER_ADDR} --master_port=${MASTER_PORT} /mnt/data/mnist_train_distributed.py

      DLC会自动注入MASTER_ADDRWORLD_SIZE等通用环境变量,通过$环境变量名来获取。

    • 资源来源:选择公共资源节点数量为2,资源规格选择ecs.gn7i-c8g1.2xlarge

      如果该规格实例库存不足,您也可以选择其他GPU实例。

    单击确定创建任务,任务大约需要执行10分钟。执行过程中可以在概览页面,查看两台实例的训练日志

    执行完成后,会在挂载数据集的output_distributed路径下输出最佳的模型检查点,以及TensorBoard日志。

4.3 查看Tensorbord(可选)

您可以借助可视化工具TensorBoard查看loss曲线,了解训练的具体情况。

重要:DLC任务如果想使用TensorBoard,必须配置数据集。
  1. 单击DLC任务详情页上方的Tensorboard > 新建Tensorboard

  2. 配置类型选择按任务,在Summary目录处填写训练代码中Summary存储的路径:/mnt/data/output_distributed/runs,单击确定启动。

    对应代码片段:writer = SummaryWriter('/mnt/data/output_distributed/runs/mnist_experiment')

  3. 单击查看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 均处于平稳状态(良好拟合)

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

相关新闻

联系我们

联系我们

电报:@yunshuguoji

邮件:yunshuguoji@outlook.com

工作时间:早上8:00-晚上11:00

认准电报
认准电报
分享本页
返回顶部