使用 Google Kubernetes Engine 在容器中進行訓練

本頁面說明如何在 Deep Learning Containers 執行個體中執行訓練作業,並在 Google Kubernetes Engine 叢集上執行該容器映像檔。

事前準備

開始之前,請務必完成下列步驟。

  1. 完成「開始使用本機深度學習容器」一文「事前準備」一節中的設定步驟。

  2. 請確認您已為 Google Cloud 專案啟用計費功能。

    瞭解如何啟用計費功能

  3. 啟用 Google Kubernetes Engine、Compute Engine 和 Artifact Registry API。

    啟用 API

開啟指令列工具

您可以透過 Cloud Shell 或本機指令列工具,按照本指南操作。Cloud Shell 已預先安裝本教學課程所使用的 gclouddockerkubectl 指令列工具。如果使用 Cloud Shell,則不需要在工作站上安裝這些指令列工具。

Cloud Shell

如要使用 Cloud Shell,請完成下列步驟。

  1. 前往Google Cloud 控制台

  2. 按一下主控台視窗頂端的 [啟用 Cloud Shell] 按鈕。

    Google Cloud Platform 主控台

    系統會在主控台底部的新頁框中開啟 Cloud Shell 工作階段,並顯示指令列提示。

    Cloud Shell 工作階段

本機指令列

如要使用本機指令列,請完成下列步驟。

  1. 使用 gcloud CLI 安裝 Kubernetes 指令列工具。kubectl 會用來與 Deep Learning Containers 叢集的叢集自動化調度管理系統「Kubernetes」進行通訊:

    gcloud components install kubectl
    

    完成入門步驟後,您已安裝 Google Cloud CLI 和 Docker

建立 GKE 叢集

執行下列指令,在 GKE 中建立名為 pytorch-training-cluster 的雙節點叢集:

gcloud container clusters create pytorch-training-cluster \
    --num-nodes=2 \
    --zone=us-west1-b \
    --accelerator="type=nvidia-tesla-p100,count=1" \
    --machine-type="n1-highmem-2" \
    --scopes="gke-default,storage-rw"

如要進一步瞭解這些設定,請參閱建立叢集以執行容器的說明文件

可能需要幾分鐘時間才能建立叢集。

或者,您也可以使用 Google Cloud 專案中的現有叢集,不必建立叢集。如果這麼做,您可能需要執行下列指令,確保 kubectl 指令列工具有適當的憑證可存取叢集:

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

接著,安裝 NVIDIA GPU 裝置驅動程式

建立 Dockerfile

建構容器映像檔的方法有很多種。 下列步驟說明如何建構一個指令碼,執行名為 trainer.py 的 Python 指令碼。

如要查看可用的容器映像檔清單:

gcloud container images list \
    --repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"

建議您前往「選擇容器」頁面,選取所需容器。

以下範例說明如何將名為 trainer.py 的 Python 指令碼放入特定 PyTorch 深度學習容器類型。

如要建立 Dockerfile,請將下列指令寫入名為 Dockerfile 的檔案。這個步驟假設您在名為 model-training-code 的目錄中,有訓練機器學習模型的程式碼,且該目錄中的主要 Python 模組名為 trainer.py。在這個情境中,容器會在工作完成後移除,因此訓練指令碼應設定為輸出至 Cloud Storage (請參閱輸出至 Cloud Storage 的指令碼範例),或輸出至持續性儲存空間

FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

建構及上傳容器映像檔

如要建構容器映像檔並上傳至 Artifact Registry,請使用下列指令:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

部署應用程式

建立名為 pod.yaml 的檔案,並在其中加入下列內容,然後將 IMAGE_URI 換成映像檔的 URI。

apiVersion: v1
kind: Pod
metadata:
  name: gke-training-pod
spec:
  containers:
  - name: my-custom-container
    image: IMAGE_URI
    resources:
      limits:
        nvidia.com/gpu: 1

使用 kubectl 指令列工具執行下列指令,部署應用程式:

kubectl apply -f ./pod.yaml

如要追蹤 Pod 的狀態,請執行下列指令:

kubectl describe pod gke-training-pod