在容器计算服务ACS中使用PPU
本文介绍如何快速在容器计算服务 ACS(Container Compute Service)中使用PPU。
前提条件
已创建ACS集群。
购买GPU-HPN容量预留
在容器计算服务控制台左侧,点击容量预留。
进入容量预留界面,单击创建GPU-HPN容量预留,选择集群所属地域进行购买。规格型号信息如下。
售卖规格
站点
GPU
CPU(核)
内存
硬盘(可挂载临时存储)
高网
gpu.p16en-16XL
国内
真武810E * 16
184
1.8T
6T
1.6T
将容量预留关联到ACS集群
在容量预留页面,单击目标容量预留右侧状态列的关联集群,然后在弹窗页面选择目标ACS集群进行关联。
关联成功后,进入目标集群详情页,单击左侧导航栏的虚拟节点可查看对应的虚拟节点信息。
也可通过
kubectl get nodes命令查询虚拟节点信息。
创建推理服务
详细内容,请参见基于NAS部署LLM服务。
挂载CPFS存储卷
关于GPU Pod挂载,请参见使用CPFS静态存储卷。
如您需要在ACS CPU Pod挂载CPFS,请参见ACS CPU Pod挂载CPFS。
PPU容器镜像快速上手:创建训练与微调任务
(可选)步骤一:配置镜像鉴权的Secret
在目标集群详情页左侧导航栏选择配置管理 > 保密字典,单击创建后根据提示进行操作。
步骤二:创建训练与微调任务
单机多卡任务
以下示例以创建 Pod 为例(Deployment 或 Job 等工作负载创建方式类似),展示如何在ACS 中部署一个模型训练任务。
登录容器计算服务控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 容器组。
在容器组页面,单击使用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 性能。
运行成功后,可在目标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集群中利用存储卷配置模型Checkpoint和Dataset
登录NAS文件系统控制台,购买文件存储系统NAS(购买选择VPC时需要选择和ACS集群同一VPC,否则无法正常连接NAS)。
在容器计算服务控制台页面创建存储声明PVC。
在集群管理页面的左侧导航栏,选择。
选择上文中任务所在的命名空间,点击创建。
选择NAS、使用挂载点域名创建。
确保存储声明名称与上文任务YAML中claimName一致,且挂载点域名选择所购买的NAS域名。
NAS域名获取方式:点击购买的NAS,选择挂载使用,复制挂载点地址。点击创建。
将模型Checkpoint和dataset拷贝至NAS中,NAS中的文件路径应与YAML的subPath相同。
购买同一VPC下的ECS。
将NAS挂载在ECS的目录下(以挂载在/mnt目录为例)。
NAS挂载命令:点击购买的NAS,选择挂载使用,复制挂载命令。
将模型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。
SSD模型示例数据集和模型。
镜像中不包含模型训练所需的Checkpoint文件和数据集,需要用户通过volume方式自行挂载到Pod中。
示例YAML文件中的mountPath分别为:
/opt/ljperf/benchmark/models/mmdetection/model_configs/ssd/是ssd模型Checkpoint文件。/opt/ljperf/benchmark/models/mmdetection/data/coco是ssd模型训练时所需使用的数据集。args中包含了启动模型训练的命令,核心为
ljperf benchmark --model cv/ssd通过该命令可以快速启动镜像中已内置好的benchmark模型,cv类模型目前在24.09镜像中支持 cv/ssd, cv/mask_rcnn, cv/fcn, cv/mask2former等几种
如何提升ACS默认配额
当前ACS默认每个用户可以创建最多3个集群,最多可以购买512卡GPU-HPN实例或512卡GPU实例。
如需提升该额度,请按照如下操作。
登录配额中心控制台,选择容器服务Kubernetes版。
在通用配额列表页面搜索ACS集群总数,单击申请进行调整(申请流程一般会在24小时内完成处理)。
在通用配额列表标题右侧选择容器计算服务,切换集群所属的地域。在列表中选择GPU可使用总卡数上限(HPN)进行申请操作。