在ACK上如何使用AC2鏡像

更新時間:
Copy as MD

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鏡像訓練模型

  1. kubectl所在的用戶端機器上,建立Pod檔案。

    1. 建立並開啟檔案。

      vim pytorch-training-cpu.yaml
    2. 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
    3. Esc鍵退出編輯模式,輸入:wq後按Enter鍵儲存檔案。

  2. 通過kubectl指定叢集建立訓練Pod。

    運行後,該Pod將會下載PyTorch執行個體代碼,並運行MNIST模型訓練樣本。

    kubectl create -f pytorch-training-cpu.yaml

    Pod建立成功會返回以下內容。

    pod/pytorch-training-cpu created
  3. 使用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
  4. 使用以下命令查看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%)
  5. 訓練完畢後,再次檢查Pod狀態,STATUS顯示Completed,此時使用以下命令清理叢集。

    kubectl delete pods pytorch-training-cpu

    Pod清理完畢會返回以下內容。

    pod "pytorch-training-cpu" deleted

運行PyTorch GPU鏡像訓練模型

  1. kubectl所在的用戶端機器上,建立Pod檔案。

    1. 建立並開啟檔案。

      vim pytorch-training-gpu.yaml
    2. 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
    3. Esc鍵退出編輯模式,輸入:wq後按Enter鍵儲存檔案。

  2. 通過kubectl指定叢集建立訓練Pod。

    運行後,該Pod將會下載PyTorch執行個體代碼,並運行MNIST模型訓練樣本。

    kubectl create -f pytorch-training-gpu.yaml

    Pod建立成功會返回以下內容。

    pod/pytorch-training-gpu created
  3. 使用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
  4. 使用以下命令查看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%)
  5. 訓練完畢後,再次檢查Pod狀態,STATUS顯示Completed。此時使用以下命令清理叢集。

    kubectl delete pods pytorch-training-gpu

    Pod清理完畢會返回以下內容。

    pod "pytorch-training-gpu" deleted