在ACK上如何使用AC2鏡像
Alibaba Cloud AI Containers(簡(jiǎn)稱AC2)提供了一系列的AI容器鏡像,與阿里云基礎(chǔ)設(shè)施(ECS、ACK等)深度集成優(yōu)化,極大地節(jié)省了AI應(yīng)用環(huán)境部署的成本。本文介紹了在ACK上如何運(yùn)行AC2容器進(jìn)行PyTorch訓(xùn)練。
創(chuàng)建ACK集群
在ACK上使用AC2,需要首先創(chuàng)建ACK集群,并確保集群中至少有一臺(tái)可用節(jié)點(diǎn)。更多信息,請(qǐng)參見創(chuàng)建ACK托管集群。
創(chuàng)建節(jié)點(diǎn)池時(shí),節(jié)點(diǎn)的默認(rèn)操作系統(tǒng)為「Alibaba Cloud Linux 3.2104」。對(duì)于x86-64架構(gòu)的CPU節(jié)點(diǎn),可以選擇「ContainerOS」作為節(jié)點(diǎn)系統(tǒng),以獲得更快的啟動(dòng)速度以及更小的性能開銷
連接并管理ACK集群
目前可以通過三種方式連接并管理集群:
通過kubectl工具連接集群。Kubernetes提供了命令行工具用以管理K8s集群,通過kubectl工具連接集群,需要在客戶端機(jī)器上安裝kubectl,并確定通過公網(wǎng)還是私網(wǎng)來連接集群。更多信息,請(qǐng)參見獲取集群KubeConfig并通過kubectl工具連接集群。
使用CloudShell通過kubectl工具連接集群。CloudShell是阿里云推出的云命令行工具,通過容器服務(wù)控制臺(tái)啟動(dòng)CloudShell時(shí),CloudShell會(huì)預(yù)裝kubectl并自動(dòng)加載KubeConfig文件。更多信息,請(qǐng)參見在CloudShell上通過kubectl管理Kubernetes集群。
使用AC2訓(xùn)練
AC2中提供了多種訓(xùn)練框架鏡像,鏡像中集成了不同的AI運(yùn)行框架,包括PyTorch、TensorFlow等,同時(shí)按照不同的運(yùn)行平臺(tái),內(nèi)置了經(jīng)過驗(yàn)證的NVIDIA驅(qū)動(dòng)、CUDA等運(yùn)行驅(qū)動(dòng)以及加速庫。為開發(fā)者節(jié)省了大量的環(huán)境部署時(shí)間。
PyTorch框架鏡像
運(yùn)行PyTorch CPU鏡像訓(xùn)練模型
在kubectl所在的客戶端機(jī)器上,創(chuàng)建Pod文件。
創(chuàng)建并打開文件。
vim pytorch-training-cpu.yaml
按
i
鍵進(jìn)入編輯模式,將以下內(nèi)容復(fù)制到文件中。文件中指定AC2運(yùn)行鏡像,并傳入運(yùn)行命令。
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指定集群創(chuàng)建訓(xùn)練Pod。
運(yùn)行后,該P(yáng)od將會(huì)下載PyTorch實(shí)例代碼,并運(yùn)行MNIST模型訓(xùn)練示例。
kubectl create -f pytorch-training-cpu.yaml
Pod創(chuàng)建成功會(huì)返回以下內(nèi)容。
pod/pytorch-training-cpu created
使用kubectl檢查Pod狀態(tài)。
kubectl get pods
返回如下信息,其中創(chuàng)建的訓(xùn)練Pod名為
pytorch-training-cpu
。首次運(yùn)行容器時(shí),會(huì)從AC2拉取鏡像文件,此時(shí)STATUS
顯示ContainerCreating
。重復(fù)運(yùn)行該命令,直至狀態(tài)顯示Running
。NAME READY STATUS RESTARTS AGE pytorch-training-cpu 1/1 Running 0 5m42s
使用以下命令查看Pod訓(xùn)練輸出。
kubectl logs pytorch-training-cpu
輸出日志類似以下內(nèi)容。
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%)
訓(xùn)練完畢后,再次檢查Pod狀態(tài),
STATUS
顯示Completed
,此時(shí)使用以下命令清理集群。kubectl delete pods pytorch-training-cpu
Pod清理完畢會(huì)返回以下內(nèi)容。
pod "pytorch-training-cpu" deleted
運(yùn)行PyTorch GPU鏡像訓(xùn)練模型
在kubectl所在的客戶端機(jī)器上,創(chuàng)建Pod文件。
創(chuàng)建并打開文件。
vim pytorch-training-gpu.yaml
按
i
鍵進(jìn)入編輯模式,將以下內(nèi)容復(fù)制到文件中。文件中申請(qǐng)GPU資源,指定AC2運(yùn)行鏡像,并傳入運(yùn)行命令。
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指定集群創(chuàng)建訓(xùn)練Pod。
運(yùn)行后,該P(yáng)od將會(huì)下載PyTorch實(shí)例代碼,并運(yùn)行MNIST模型訓(xùn)練示例。
kubectl create -f pytorch-training-gpu.yaml
Pod創(chuàng)建成功會(huì)返回以下內(nèi)容。
pod/pytorch-training-gpu created
使用kubectl檢查Pod狀態(tài)。
kubectl get pods
返回如下信息,其中創(chuàng)建的訓(xùn)練Pod名為
pytorch-training-gpu
。首次運(yùn)行容器時(shí),會(huì)從AC2拉取鏡像文件,此時(shí)STATUS
顯示ContainerCreating
。重復(fù)運(yùn)行該命令,直至狀態(tài)顯示Running
。NAME READY STATUS RESTARTS AGE pytorch-training-gpu 1/1 Running 0 5m42s
使用以下命令查看Pod訓(xùn)練輸出。
kubectl logs pytorch-training-gpu
輸出日志類似以下內(nèi)容。
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%)
訓(xùn)練完畢后,再次檢查Pod狀態(tài),
STATUS
顯示Completed
。此時(shí)使用以下命令清理集群。kubectl delete pods pytorch-training-gpu
Pod清理完畢會(huì)返回以下內(nèi)容。
pod "pytorch-training-gpu" deleted