在容器计算服务ACS中使用PPU

更新时间:
复制为 MD 格式

本文介绍如何快速在容器计算服务 ACS(Container Compute Service)中使用PPU。

前提条件

创建ACS集群

购买GPU-HPN容量预留

  1. 容器计算服务控制台左侧,点击容量预留

  2. 进入容量预留界面,单击创建GPU-HPN容量预留,选择集群所属地域进行购买。规格型号信息如下。

    售卖规格

    站点

    GPU

    CPU(核)

    内存

    硬盘(可挂载临时存储)

    高网

    gpu.p16en-16XL

    国内

    真武810E * 16

    184

    1.8T

    6T

    1.6T

将容量预留关联到ACS集群

  1. 容量预留页面,单击目标容量预留右侧状态列的关联集群,然后在弹窗页面选择目标ACS集群进行关联。

  2. 关联成功后,进入目标集群详情页,单击左侧导航栏的虚拟节点可查看对应的虚拟节点信息。

    也可通过kubectl get nodes命令查询虚拟节点信息。

创建推理服务

详细内容,请参见基于NAS部署LLM服务

挂载CPFS存储卷

  1. 关于GPU Pod挂载,请参见使用CPFS静态存储卷

  2. 如您需要在ACS CPU Pod挂载CPFS,请参见ACS CPU Pod挂载CPFS

PPU容器镜像快速上手:创建训练与微调任务

(可选)步骤一:配置镜像鉴权的Secret

在目标集群详情页左侧导航栏选择配置管理 > 保密字典,单击创建后根据提示进行操作。

步骤二:创建训练与微调任务

镜像列表

按照如下示例获取ACS AI容器镜像,以便您在ACS实例上配置工作负载时使用。

说明
  • 推理类镜像示例

    镜像名称

    镜像Tag

    公网镜像地址

    VPC镜像地址

    说明

    inference-xpu-pytorch

    25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

    egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

    • 以华北2(北京)地域为例:

      acs-registry-vpc.cn-beijing.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

    • 以华北6(乌兰察布)地域为例:

      acs-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-xpu-pytorch:25.03-v1.4.3-hotfix-vllm0.7.3-torch2.5-cu123-20250331

    • 基础镜像升级PPU SDKv1.4.3-hotfix

    • vLLM版本升级至v0.7.3,提升DeepSeek-V3/R1推理性能。

    • SGLang版本升级至v0.4.3

    • ACCL-P升级至v1.4.3-8、EIC升级至1.3.7.1-v2503,合入对应版本功能并修复了相关缺陷。

  • 训练类镜像示例

    镜像名称

    镜像Tag

    公网镜像地址

    VPC镜像地址

    说明

    training-xpu-pytorch

    25.03

    egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/training-xpu-pytorch:25.03

    • 以华北2(北京)地域为例:

      acs-registry-vpc.cn-beijing.cr.aliyuncs.com/egslingjun/training-xpu-pytorch:25.03

    • 以华北6(乌兰察布)地域为例:

      acs-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/egslingjun/training-xpu-pytorch:25.03

    • 基础镜像升级PPU SDK1.4.3-hotfix

    • ACCL-P升级至v1.4.3-8、EIC升级至1.3.7.1-v2503,合入对应版本功能和Bug fix。

    • vLLM升级至v0.7.3、Ray相应升级至v2.43,支持FlashInfer 0.2.1.post1、Accelerate升级至v1.5.2、Transformers升级至4.49.0+ali,合入对应版本功能并修复了相关缺陷。

单机多卡任务

以下示例以创建 Pod 为例(Deployment 或 Job 等工作负载创建方式类似),展示如何在ACS 中部署一个模型训练任务。

  1. 登录容器计算服务控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 容器组

  3. 容器组页面,单击使用YAML创建资源在编辑框中输入以下 YAML 编排。该示例演示了如何创建一个申请了 GPU 资源、挂载了持久化存储且支持 RDMA 网络加速的任务。

    apiVersion: v1
    kind: Pod
    metadata:
      name: training-demo
      labels:
        # 算力分级标签:指定使用高主频 GPU 实例
        alibabacloud.com/compute-class: gpu-hpn
        # 开启 RDMA 网络加速,提升分布式训练性能
        alibabacloud.com/hpn-type: "rdma"
    spec:
      # 【重要】镜像拉取凭证
      # 如果您的镜像托管在企业版 ACR 等私有仓库,必须在此指定已创建的 Secret 名称
      imagePullSecrets:
        - name: <YOUR_IMAGE_SECRET> 
      containers:
        - name: training-demo
          image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/training-xpu-pytorch:24.09
          env:
          - name: USE_PRETRAIN
            value: "true"
          - name: PRETRAIN_PATH
            value: "/opt/ljperf/benchmark/models/mmdetection/model_configs/ssd/"
          command: ["/bin/bash"]
          args: ["-c", "ljperf benchmark --model cv/ssd"]
          resources:
            limits:
              cpu: 50
              memory: 500G
              # 申请算力资源:此处以 16 个 PPU 为例
              alibabacloud.com/ppu: 16
            requests:
              cpu: 50
              memory: 500G
              alibabacloud.com/ppu: 16
          volumeMounts:
            # 共享内存挂载,防止训练过程中 DataLoader 报错
            - name: dshm
              mountPath: /dev/shm          
            # 【重要】模型与数据集挂载
            # 将 PVC 中的子路径挂载到容器内指定的模型和数据存放目录
            - name: data
              mountPath: /opt/ljperf/benchmark/models/mmdetection/model_configs/ssd/
              subPath: shared/public/model_configs/ssd
            - name: data
              mountPath: /opt/ljperf/benchmark/models/mmdetection/data/coco
              subPath: shared/public/dataset/coco
      volumes:
        - name: dshm
          emptyDir:
            medium: Memory
            sizeLimit: 1000Gi
        # 【重要】定义持久化存储卷
        - name: data
          persistentVolumeClaim:
            # 必须确保已在集群中提前创建好该 PVC 名称(如 cnp0)
            # 该 PVC 通常绑定了 NAS 或 OSS 存储,用于存放大型训练数据集
            claimName: <YOUR_PVC>

    为了确保任务成功运行,请在单击创建前重点检查以下配置:

    • 镜像拉取凭证 (imagePullSecrets)
      由于训练镜像通常较大或存放在私有仓库(如示例中的 cn-wulanchabu.cr.aliyuncs.com),需预先在集群同一命名空间下创建一个类型为 docker-registry 的 Secret,然后将示例中<YOUR_IMAGE_SECRET>替换为实际创建的Secret名称。

    • 持久化存储声明(PVC)

      • claimName:示例中的<YOUR_PVC>需替换为实际创建的 PVC 名称。

      • 用途:模型训练通常涉及海量数据,建议通过 NAS 类型的 PVC 挂载数据集,以支持多 Pod 共享访问并保证 I/O 性能。

  4. 运行成功后,可在目标Pod详情页,单击日志查看。

多机多卡训练任务

多机多卡任务需要调度编排支持,如果您有自己的编排调度方案,可以部署自己的方案。

如果您对编排调度无特殊要求可以部署社区的Kubeflow方案。确保平台已经支持PyTorchJob CRD之后,就可以像创建单机多卡任务中的工作负载一样创建PyTorchJob多机训练任务,示例YAML文件如下:

apiVersion: "kubeflow.org/v1"
kind: PyTorchJob
metadata:
  name: pytorchjob-llama3-8b 
  namespace: llm-training  
  labels:
    alibabacloud.com/compute-class: gpu-hpn
    alibabacloud.com/hpn-type: "rdma"
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      restartPolicy: Never
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: gpu-hpn
            alibabacloud.com/hpn-type: "rdma"
          annotations:
            sidecar.istio.io/inject: "false"
        spec:
          imagePullSecrets:
          - name: acs-image-secret #需要和上述创建Secret的name一致
          containers:
            - name: pytorch
              imagePullPolicy: Always
              image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/training-xpu-pytorch:24.09
              securityContext:
                privileged: true
                capabilities:
                    add:
                      - IPC_LOCK
              command: ["/bin/bash"]
              args: ["-c", "ljperf benchmark --model deepspeed/llama3-8b"]
              resources:
                limits:
                  alibabacloud.com/ppu: 16 
                  cpu: 90
                  memory: 1000Gi
                  ephemeral-storage: 1000Gi
              volumeMounts:
                - mountPath: /dev/shm
                  name: dshm
              env:
                - name: KUBERNETES_POD_NAME
                  valueFrom:
                    fieldRef:
                       apiVersion: v1
                       fieldPath: metadata.name
          hostNetwork: true
          hostIPC: true
          dnsPolicy: ClusterFirstWithHostNet
          volumes:
              - emptyDir:
                  medium: Memory
                  sizeLimit: 1000Gi
                name: dshm
          
    Worker:
      replicas: 1
      restartPolicy: Never
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: gpu-hpn
            alibabacloud.com/hpn-type: "rdma"
          annotations:
            sidecar.istio.io/inject: "false"
        spec:
          imagePullSecrets:
          - name: acs-image-secret #需要和上述创建Secret的name一致
          containers:
            - name: pytorch
              imagePullPolicy: Always
              image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/training-xpu-pytorch:24.09
              securityContext:
                privileged: true
                capabilities:
                    add:
                      - IPC_LOCK
              command: ["/bin/bash"]
              args: ["-c", "ljperf benchmark --model deepspeed/llama3-8b"]
              resources:
                limits:
                  alibabacloud.com/ppu: 16 
                  cpu: 90
                  memory: 1000Gi
                  ephemeral-storage: 1000Gi
              volumeMounts:
                - mountPath: /dev/shm
                  name: dshm
              env:
                - name: KUBERNETES_POD_NAME
                  valueFrom:
                    fieldRef:
                       apiVersion: v1
                       fieldPath: metadata.name
          hostNetwork: true
          hostIPC: true
          dnsPolicy: ClusterFirstWithHostNet
          volumes:
              - emptyDir:
                  medium: Memory
                  sizeLimit: 1000Gi
                name: dshm

集合通信设置

基础环境变量

为了让任务能够运行,需要配置如下基础环境变量,这些环境变量已经默认配置好,无需单独配置。

重要

其它的NCCL环境变量均默认为unset状态,如果您在代码中设置了其它的环境变量,也需unset,否则NCCL程序可能运行失败。

export NCCL_IB_DISABLE=1 
export NCCL_SOCKET_IFNAME=eth0 
export NCCL_IB_HCA= 
export NCCL_DEBUG=INFO

为模型训练设置最优环境变量

ACS+PPU场景下,ACCL已针对底层硬件差异进行了深度优化与默认配置,用户通常无需感知底层细节。但由于PPU ICN(Inter-Connect Network)采用非全互联拓扑,为了在特定并行策略下实现极致性能,建议根据任务需求手动配置环境变量。其优化核心在于:为高耗时通信组(Communication Group)分配更多的ICN链路,并降低不同通信组间的链路共享与竞争,从而提升全局互联通信效率。

# TP 2 时配置环境变量:
export CUDA_VISIBLE_DEVICES=4,7,5,6,1,2,0,3,12,15,13,14,9,10,8,11
# TP 4 时配置环境变量:
export CUDA_VISIBLE_DEVICES=4,5,7,6,0,1,3,2,9,8,10,11,13,12,14,15
# TP 8 时配置环境变量:
export CUDA_VISIBLE_DEVICES=4,5,7,6,2,3,1,0,13,12,14,15,11,10,8,9
# TP1/TP16 时无需配置

常见问题

ACS集群中利用存储卷配置模型CheckpointDataset

  1. 登录NAS文件系统控制台,购买文件存储系统NAS(购买选择VPC时需要选择和ACS集群同一VPC,否则无法正常连接NAS)。

  2. 容器计算服务控制台页面创建存储声明PVC。

    1. 在集群管理页面的左侧导航栏,选择存储 > 存储声明

    2. 选择上文中任务所在的命名空间,点击创建

    3. 选择NAS、使用挂载点域名创建。

      确保存储声明名称与上文任务YAMLclaimName一致,且挂载点域名选择所购买的NAS域名。

      NAS域名获取方式:点击购买的NAS,选择挂载使用,复制挂载点地址。点击创建。

  3. 将模型Checkpointdataset拷贝至NAS中,NAS中的文件路径应与YAMLsubPath相同。

  4. 购买同一VPC下的ECS。

    1. NAS挂载在ECS的目录下(以挂载在/mnt目录为例)。

    2. NAS挂载命令:点击购买的NAS,选择挂载使用,复制挂载命令。

    3. 将模型Checkpoint和数据集拷贝到NAS中即ECS的/mnt目录下(Checkpoint:/mnt/shared/public/model_configs/ssd 数据集: /mnt/shared/public/dataset/coco)。下载模型Checkpoint,解压后将model_configs/ssd中的内容拷贝到/mnt/shared/public/model_configs/ssd下,下载数据集文件,解压后datasets/coco/中的内容拷贝到/mnt/shared/public/dataset/coco。

  5. SSD模型示例数据集和模型。

    镜像中不包含模型训练所需的Checkpoint文件和数据集,需要用户通过volume方式自行挂载到Pod中。

    示例YAML文件中的mountPath分别为:

    1. /opt/ljperf/benchmark/models/mmdetection/model_configs/ssd/ssd模型Checkpoint文件。

    2. /opt/ljperf/benchmark/models/mmdetection/data/cocossd模型训练时所需使用的数据集。

      args中包含了启动模型训练的命令,核心为ljperf benchmark --model cv/ssd通过该命令可以快速启动镜像中已内置好的benchmark模型,cv类模型目前在24.09镜像中支持 cv/ssd, cv/mask_rcnn, cv/fcn, cv/mask2former等几种

如何提升ACS默认配额

当前ACS默认每个用户可以创建最多3个集群,最多可以购买512GPU-HPN实例或512GPU实例。

如需提升该额度,请按照如下操作。

  1. 登录配额中心控制台,选择容器服务Kubernetes

  2. 通用配额列表页面搜索ACS集群总数,单击申请进行调整(申请流程一般会在24小时内完成处理)。

  3. 通用配额列表标题右侧选择容器计算服务,切换集群所属的地域。在列表中选择GPU可使用总卡数上限(HPN)进行申请操作。