在ACK上如何使用AC2鏡像
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是阿里雲推出的雲命令列工具,通過Container Service控制台啟動CloudShell時,CloudShell會預裝kubectl並自動載入KubeConfig檔案。更多資訊,請參見在CloudShell上通過kubectl管理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.yamlPod建立成功會返回以下內容。
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-cpuPod清理完畢會返回以下內容。
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.yamlPod建立成功會返回以下內容。
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-gpuPod清理完畢會返回以下內容。
pod "pytorch-training-gpu" deleted