Alibaba Cloud AI Containers(简称AC2)提供了一系列的AI容器镜像,与阿里云基础设施(ECS、ACK等)深度集成优化,极大地节省了AI应用环境部署的成本。本文介绍了在ACK上如何运行AC2容器进行PyTorch训练。
创建ACK集群
在ACK上使用AC2,需要首先创建ACK集群,并确保集群中至少有一台可用节点。更多信息,请参见创建ACK托管集群。
创建节点池时,节点的默认操作系统为「Alibaba Cloud Linux 3.2104」。对于x86-64架构的CPU节点,可以选择「ContainerOS」作为节点系统,以获得更快的启动速度以及更小的性能开销
连接并管理ACK集群
目前可以通过三种方式连接并管理集群:
通过kubectl工具连接集群。Kubernetes提供了命令行工具用以管理K8s集群,通过kubectl工具连接集群,需要在客户端机器上安装kubectl,并确定通公网还是私网来连接集群。更多信息,请参见获取集群KubeConfig并通过kubectl工具连接集群。
使用CloudShell通过kubectl工具连接集群。CloudShell是阿里云推出的云命令行工具,通过容器服务控制台启动CloudShell时,CloudShell会预装kubectl并自动加载KubeConfig文件。更多信息,请参见在CloudShell上通过kubectl管理Kubernetes集群。
直接通过容器服务控制台管理集群。更多信息,请参见与原生Kubernetes名词对照。
使用AC2训练
AC2中提供了多种训练框架镜像,镜像中集成了不同的AI运行框架,包括PyTorch、TensorFlow等,同时按照不同的运行平台,内置了经过验证的NVIDIA驱动、CUDA等运行驱动以及加速库。为开发者节省了大量的环境部署时间。
PyTorch框架镜像
运行PyTorch CPU镜像训练模型
在kubectl所在的客户端机器上,创建Pod文件。
创建并打开文件。
vim pytorch-training-cpu.yaml
按
i
键进入编辑模式,将以下内容复制到文件中。文件中指定AC2运行镜像,并传入运行命令。
apiVersion: v1 kind: Pod metadata: name: pytorch-training-cpu namespace: default spec: restartPolicy: OnFailure containers: - name: pytorch-training image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/pytorch:2.3.0-alinux3.2304 command: - "/bin/sh" - "-c" args: - "git clone https://github.com/pytorch/examples.git && python3 examples/mnist/main.py --no-cuda" workingDir: /root
按
Esc
键退出编辑模式,输入:wq
后按Enter
键保存文件。
通过kubectl指定集群创建训练Pod。
运行后,该Pod将会下载PyTorch实例代码,并运行MNIST模型训练示例。
kubectl create -f pytorch-training-cpu.yaml
Pod创建成功会返回以下内容。
pod/pytorch-training-cpu created
使用kubectl检查Pod状态。
kubectl get pods
返回如下信息,其中创建的训练Pod名为
pytorch-training-cpu
。首次运行容器时,会从AC2拉取镜像文件,此时STATUS
显示ContainerCreating
。重复运行该命令,直至状态显示Running
。NAME READY STATUS RESTARTS AGE pytorch-training-cpu 1/1 Running 0 5m42s
使用以下命令查看Pod训练输出。
kubectl logs pytorch-training-cpu
输出日志类似以下内容。
Cloning into 'examples'... Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz ... Train Epoch: 1 [0/60000 (0%)] Loss: 2.305400 Train Epoch: 1 [640/60000 (1%)] Loss: 1.359776 ... Train Epoch: 14 [58880/60000 (98%)] Loss: 0.011213 Train Epoch: 14 [59520/60000 (99%)] Loss: 0.000181 Test set: Average loss: 0.0271, Accuracy: 9912/10000 (99%)
训练完毕后,再次检查Pod状态,
STATUS
显示Completed
,此时使用以下命令清理集群。kubectl delete pods pytorch-training-cpu
Pod清理完毕会返回以下内容。
pod "pytorch-training-cpu" deleted
运行PyTorch GPU镜像训练模型
在kubectl所在的客户端机器上,创建Pod文件。
创建并打开文件。
vim pytorch-training-gpu.yaml
按
i
键进入编辑模式,将以下内容复制到文件中。文件中申请GPU资源,指定AC2运行镜像,并传入运行命令。
apiVersion: v1 kind: Pod metadata: name: pytorch-training-gpu namespace: default spec: restartPolicy: OnFailure containers: - name: pytorch-training image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/pytorch:2.3.0-cuda12.1.1-alinux3.2304 command: - "/bin/sh" - "-c" args: - "git clone https://github.com/pytorch/examples.git && python3 examples/mnist/main.py" resources: limits: nvidia.com/gpu: 1 workingDir: /root
按
Esc
键退出编辑模式,输入:wq
后按Enter
键保存文件。
通过kubectl指定集群创建训练Pod。
运行后,该Pod将会下载PyTorch实例代码,并运行MNIST模型训练示例。
kubectl create -f pytorch-training-gpu.yaml
Pod创建成功会返回以下内容。
pod/pytorch-training-gpu created
使用kubectl检查Pod状态。
kubectl get pods
返回如下信息,其中创建的训练Pod名为
pytorch-training-gpu
。首次运行容器时,会从AC2拉取镜像文件,此时STATUS
显示ContainerCreating
。重复运行该命令,直至状态显示Running
。NAME READY STATUS RESTARTS AGE pytorch-training-gpu 1/1 Running 0 5m42s
使用以下命令查看Pod训练输出。
kubectl logs pytorch-training-gpu
输出日志类似以下内容。
Cloning into 'examples'... Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz ... Train Epoch: 1 [0/60000 (0%)] Loss: 2.282550 Train Epoch: 1 [640/60000 (1%)] Loss: 1.384815 ... Train Epoch: 14 [58880/60000 (98%)] Loss: 0.001355 Train Epoch: 14 [59520/60000 (99%)] Loss: 0.002194 Test set: Average loss: 0.0273, Accuracy: 9915/10000 (99%)
训练完毕后,再次检查Pod状态,
STATUS
显示Completed
。此时使用以下命令清理集群。kubectl delete pods pytorch-training-gpu
Pod清理完毕会返回以下内容。
pod "pytorch-training-gpu" deleted