灵骏智算资源组使用指南

灵骏智算资源为您提供高性能AI训练、高性能计算所需的异构计算算力服务,用于提交DLC训练任务或创建DSW实例。本文为您介绍PAI灵骏智算服务从开通到使用的最佳实践。

前提条件

  • 已开通PAI(DLC、DSW)后付费,详情请参见开通并创建默认工作空间

  • 已创建VPC和公网NAT网关,并有已创建的交换机、安全组。

  • 提交工单,申请添加灵骏智算使用白名单。

    当前仅白名单用户可受限使用灵骏智算资源。

  • 已新建资源组并购买灵骏智算资源,具体操作,请参见灵骏智算资源配额

  • 如果使用RAM角色提交DLC分布式训练任务,需要完成信任策略配置,配置详情请参见RAM角色登录并使用PAI

    其中为Role配置的权限策略在当前的实现中会影响到PAI DLC的任务运行,您可参考以下权限策略制定您的自定义策略(AliyunPAIDLCDefaultRolePolicy):

    单击此处,查看自定义权限策略

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cs:GetClusterById",
                    "cs:GetClusters",
                    "cs:GetUserConfig",
                    "cs:DescribeClusterNodes",
                    "cs:DescribeClusterInnerServiceKubeconfig",
                    "cs:RevokeClusterInnerServiceKubeconfig"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "vpc:DescribeNatGateways",
                    "vpc:DescribeVpnGateways",
                    "vpc:DescribeEipAddresses",
                    "vpc:DescribeRouteTableList",
                    "vpc:DescribeIpv6Gateways",
                    "vpc:DescribeHaVips",
                    "vpc:DescribeVRouters",
                    "vpc:DescribeRouterInterfaceAttribute",
                    "vpc:DescribeSnatTableEntries",
                    "vpc:DescribeNetworkAcls",
                    "vpc:DescribeRegions",
                    "vpc:DescribeVpcs",
                    "vpc:DescribeVSwitches",
                    "vpc:DescribeVpcAttribute",
                    "vpc:DescribeVSwitchAttributes",
                    "vpc:AssociatePhysicalConnectionToVirtualBorderRouter",
                    "vpc:UnassociatePhysicalConnectionFromVirtualBorderRouter",
                    "vpc:DescribeAccessPoints",
                    "vpc:CreatePhysicalConnectionNew",
                    "vpc:DescribePhysicalConnections",
                    "vpc:EnablePhysicalConnection",
                    "vpc:CreateVirtualBorderRouter",
                    "vpc:CreateRouterInterface",
                    "vpc:ModifyRouterInterfaceAttribute",
                    "vpc:ModifyRouterInterfaceSpec",
                    "vpc:DescribeRouterInterfaces",
                    "vpc:DescribeRouteTables",
                    "vpc:ConnectRouterInterface",
                    "vpc:CreateRouteEntry",
                    "vpc:DeleteRouteEntry",
                    "vpc:DeactivateRouterInterface",
                    "vpc:DeleteRouterInterface",
                    "vpc:DeleteVirtualBorderRouter",
                    "vpc:TerminatePhysicalConnection",
                    "vpc:DeletePhysicalConnection",
                    "vpc:CreateVSwitch",
                    "vpc:DeleteVSwitch",
                    "vpc:ModifyVSwitchAttribute",
                    "vpc:DescribeVirtualBorderRouters"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "ecs:DescribeSecurityGroupAttribute",
                    "ecs:DescribeSecurityGroups",
                    "ecs:CreateNetworkInterface",
                    "ecs:DeleteNetworkInterface",
                    "ecs:DescribeNetworkInterfaces",
                    "ecs:CreateNetworkInterfacePermission",
                    "ecs:DescribeNetworkInterfacePermissions",
                    "ecs:DeleteNetworkInterfacePermission"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "nas:DescribeFileSystems",
                    "nas:CreateMountTarget",
                    "nas:DescribeMountTargets",
                    "nas:ModifyMountTarget",
                    "nas:DescribeProtocolMountTarget"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "cr:ListNamespace",
                    "cr:ListRepository",
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository",
                    "cr:PushRepository",
                    "cr:GetInstance",
                    "cr:GetInstanceVpcEndpoint",
                    "cr:ListInstance",
                    "cr:ListInstanceDomain"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "datasetacc:DescribeInstance",
                    "datasetacc:DescribeSlot",
                    "datasetacc:DescribeEndpoint"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }

使用限制

  • 仅华北6(乌兰察布)地域支持使用灵骏智算资源。

  • 支持的任务类型

    当前灵骏智算资源仅支持TensorFlow、PyTorch、ElasticBatchMPIJob类型的训练任务。

  • 使用灵骏智算资源提交训练任务(DLC)时,当前仅OSS类型的数据集支持加速,NAS、智算CPFS类型的数据集暂不支持加速。

准备工作

准备灵骏智算资源组

新建灵骏资源组

  1. 登录并进入PAI控制台的AI计算资源 > 资源池页面。

  2. 灵骏智算资源页签中,单击新建资源组

  3. 新建资源组对话框中配置以下参数,完成后单击确定

    参数

    说明

    类型

    选择专有资源组

    资源组名称

    根据界面提示设置满足规则的资源组名称。

    专有网络&交换机&安全组

    在下拉框中选择已创建好的VPC、交换机和安全组。

    说明

    后续如果您有访问公网的需求,还需对此处绑定的VPC进行公网NAT网关的配置并绑定EIP,因此此处选择的VPC建议选择为您后续用于访问公网的VPC。

购买灵骏智算资源

  1. 灵骏智算资源页签的资源组列表中,单击资源组名称。

  2. 在资源组详情页面右上方,单击新建订单

  3. 在购买页面中根据实际业务需要选择节点规格节点数量购买时长等必要参数,完成后单击立即购买image.png

  4. 支付页面完成支付后,在订单列表页面中会展示已购买的灵骏智算资源列表。image.png

新增资源配额

  1. 登录并进入PAI控制台的AI计算资源 > 资源配额页面。

  2. 灵骏智算资源页签中,单击新增资源配额

  3. 新增资源配额页面中,配置以下参数,完成后单击提交

    参数

    描述

    名称

    根据界面提示设置资源配额的名称。

    调度策略

    选择合适的调度策略,提高算力资源的利用率,取值如下:

    • 智能策略

    • 均衡策略

    • 遍历策略

    • FIFO策略

    关于各个调度策略的原理介绍,请参见调度策略

    说明

    仅华北6(乌兰察布)地域支持配置调度策略。

    关联工作空间

    选择所属的工作空间后,该资源配额将与该工作空间绑定。

    描述

    对资源配额进行简单的描述,以区分不同的资源配额。

    来源类型

    支持以下两种配置:

    • 专有资源组:选择资源池中的资源组,将从该资源组中分配资源。

    • 已有资源配额:从已有的资源配额中分配资源。

    来源

    选择已创建的专有资源组或资源配额。

    规格/资源

    单击image.png按钮,从已有的资源配额或专有资源组中选择合适的资源规格和节点数量。

准备数据集

使用灵骏智算资源提交DLC任务时,支持使用OSS、NAS、智算CPFS类型的数据集,以下以智算CPFS类型的数据集为例为您介绍准备数据集的操作流程。

说明

如果您的训练任务对数据读取有很高的读写速度与性能要求,建议您使用智算CPFS数据集。

  1. 购买智算CPFS资源。

    登录并进入PAI控制台的计算资源仪表页面,单击页面右方的新建CPFS,在弹出的新购页面中选择配置容量后,根据界面提示完成付费、下单。

  2. 新建CPFS数据集。

    单击左侧导航中的工作空间列表,单击待提交任务的工作空间名称进入工作空间后,在AI资产管理>数据集页面单击创建数据集,其中:

    • 选择数据存储:请选择为阿里云文件存储(智算CPFS)

    • 选择文件系统:请在下拉框中选择智算CPFS的文件系统(bmcpfs开头的文件系统)。

    其他参数的配置与通用数据集创建一致,详情请参见创建及管理数据集

    说明

    阿里云PAI为您提供了数据集加速能力,如果您希望在使用灵骏智算资源时同时开启数据集加速,可参考典型场景:基于灵骏智算资源的数据集加速文档查看数据集加速的配置要点。

  3. 完成数据集参数配置后单击提交,完成数据集创建。

准备自定义镜像环境

环境要求

  • CUDA >= 11.2

  • NCCL >= 2.12.10

  • Python3

安装RDMA

灵骏智算资源为您提供高性能的RDMA网络,当您用自定义镜像时,需在自定义镜像的Dockerfile中手动安装灵骏智算资源的ServerlessRDMA库,才能更好的使用灵骏智算资源的RDMA网络能力。

安装RDMA库的示例代码如下。

RUN apt-get update && \
    apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends libnl-3-dev libnl-route-3-dev libnl-3-200 libnl-route-3-200 iproute2 udev dmidecode ethtool && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN cd /tmp/ && \
    wget http://pythonrun.oss-cn-zhangjiakou.aliyuncs.com/rdma/nic-libs-mellanox-rdma-5.2-2/nic-lib-rdma-core-installer-ubuntu.tar.gz && \
    tar xzvf nic-lib-rdma-core-installer-ubuntu.tar.gz && \
    cd nic-lib-rdma-core-installer-ubuntu && \
    echo Y | /bin/bash install.sh && \
    cd .. && \
    rm -rf nic-lib-rdma-core-installer-ubuntu && \
    rm -f nic-lib-rdma-core-installer-ubuntu.tar.gz

提交DLC分布式作业

支持配置的系统环境变量

公共环境变量

DLC会自动注入以下NCCL相关的环境变量,作业中不需要再进行配置:

  • NCCL_IB_HCA

  • NCCL_IB_TC

  • NCCL_IB_SL

  • NCCL_IB_GID_INDEX

  • NCCL_SOCKET_IFNAME

Pytorch环境变量

PyTorch的分布式训练过程中,MasterWorker是两个不同的角色,它们需要建立连接并通信。而在DLC中,提供了一些环境变量来同步必要的信息,例如将Master的地址和端口号同步给Worker。以下是DLC设置的PyTorch环境变量:

环境变量名

描述

MASTER_ADDR

Master节点地址。例如:dlc18isgeaydtnhl-master-0,通常为Master节点的Service地址。

MASTER_PORT

Master节点端口。例如:23456。

WORLD_SIZE

分布式作业的节点总数。例如提交了一个包含1Master、1Worker的作业,WORLD_SIZE会设置为2。

RANK

节点的Index。例如提交一个包含1Master、2Worker的作业,Master上设置的RANK0,Worker-0设置的RANK1, Worker-1 设置的RANK2。

TensorFlow环境变量

TensorFlow分布式作业通过TF_CONFIG环境变量来构建分布式的网络拓扑信息,对于TensorFlow,DLC设置了如下环境变量:

环境变量名

描述

TF_CONFIG

TensorFlow分布式网络拓扑信息,示例如下:

{

"cluster":{

"worker":[

"dlc1y3madghdduqi-worker-0.t1612285282502324.svc:2222",

"dlc1y3madghdduqi-worker-1.t1612285282502324.svc:2222"

]

},

"task":{

"type":"worker",

"index":0

},

"environment":"cloud"

}

提交分布式作业

您可参考创建训练任务进入提交任务的配置页面,参考下文配置分布式任务的参数。本文的示例场景为使用基于CIFAR10数据集的216卡规模的模型。

配置基本信息

核心配置参数如下,其他参数可保持默认。

参数

描述

节点镜像

选择合适的PyTorch镜像,本文选择了PAI平台镜像中的pytorch-training:1.10PAI-gpu-py36-cu110-ubuntu18.04,您在实际使用时可以根据实际业务需要选择官方镜像或自定义镜像。

数据集配置

选择已准备的OSS、NAS或智算CPFS数据集。

执行命令

根据需要在分布式作业的每个Pod中执行的脚本命令,本文示例如下。

cd /root/code/examples/pytorch
export NCCL_DEBUG=INFO
torchrun \
--master_addr=$MASTER_ADDR \
--master_port=$MASTER_PORT \
--nproc_per_node=8 \
--nnodes=$WORLD_SIZE \
--node_rank=$RANK \
pytorch-dist-cifar10-multigpus.py

配置任务资源

核心配置参数如下,其他参数可保持默认。

参数

描述

资源配额

选择已购买的灵骏智算资源配额。

框架

本示例选择Pytorch

任务资源

配置Worker节点:

  • 节点数量:配置为2。

  • GPU(卡数):配置为8。

查看作业详情

完成配置后即可提交分布式训练任务,提交成功后可单击查看详情查看作业详情,或在任务列表中找到最近提交的作业,单击任务名称,进入作业详情页面。

  • 查看作业日志

    任务详情页面下方的实例页签,单击实例操作列下的日志,查看某个节点的输出日志。

  • 查看事件日志

    事件日志中记录了这个作业调度以及资源相关的一些进度日志。

    • 任务详情页面下方的事件页签,查看某个节点的输出日志。

    • 任务详情页面下方的实例页签,单击实例操作列下的日志,在弹出的对话框中单击事件,查看节点事件日志。

创建及管理DSW实例

创建DSW实例

您可参考创建及管理DSW实例进入配置实例配置向导页面,参考下表配置核心参数,其他参数可保持默认。

参数

描述

资源配额

选择已购买的灵骏智算资源配额,并填写资源申请量,包括CPU(核数)、内存(GB)和GPU(卡数)。

存储配置

单击共享数据集,选择已准备的OSS、NAS或智算CPFS数据集。强烈建议您挂载数据集,这样您的数据不会因为实例的停止和关闭而丢失。

选择镜像

PAI预置了若干镜像,镜像中预装了常用的软件和机器学习框架,如果这些框架不符合您的需求,您可以通过镜像URL标签页自行添加。

管理DSW实例

  • 打开DSW实例

    DSW实例创建成功后,您可以单击实例操作列下的打开,进入DSW实例操作页面。关于DSW实例界面介绍,请参见创建及管理DSW实例

  • 停止DSW实例

    单击DSW实例操作列下的停止,来停止DSW实例。

  • 启动DSW实例

    如果您需要再次使用已经被停止的实例,可以单击操作列下的启动来启动实例。启动实例后,需要等待一段时间,当实例状态启动中变为运行中时,表明DSW实例启动完成。

相关文档

  • 更多关于灵骏智算资源的内容介绍,请参见AI计算资源概述

  • 创建DSW实例后,您可以在DSW实例页面进行AI开发。具体操作,请参见DSW概述

  • 提交DLC任务后,您可以查看任务训练详情,对DLC任务进行管理操作。具体操作,请参见查看训练详情管理训练任务