使用 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 可用於與 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