Mit Google Kubernetes Engine in einem Container trainieren

Auf dieser Seite erfahren Sie, wie Sie einen Trainingsjob in einer Deep Learning Container-Instanz ausführen und das Container-Image in einem Google Kubernetes Engine-Cluster ausführen.

Hinweise

Führen Sie zuerst die im Folgenden aufgeführten Schritte aus.

  1. Führen Sie die Einrichtungsschritte im Abschnitt „Hinweise“ von Erste Schritte mit einem lokalen Deep-Learning-Containeraus.

  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

    Weitere Informationen zum Aktivieren der Abrechnung

  3. Aktivieren Sie die APIs von Google Kubernetes Engine, Compute Engine und Container Registry.

    APIs aktivieren

Befehlszeilentool aufrufen

Sie können dieser Anleitung mit Cloud Shell oder den lokalen Befehlszeilentools folgen. Die in dieser Anleitung verwendeten Befehlszeilentools gcloud, docker und kubectl sind in Cloud Shell vorinstalliert. Wenn Sie Cloud Shell verwenden, müssen Sie diese Befehlszeilentools nicht auf Ihrer Workstation installieren.

Cloud Shell

Führen Sie die folgenden Schritte aus, um Cloud Shell zu verwenden.

  1. Öffnen Sie die Google Cloud Console.

  2. Klicken Sie im oberen Bereich des Konsolenfensters auf Cloud Shell aktivieren.

    Google Cloud Platform Console

    Es öffnet sich eine Cloud Shell-Sitzung in einem neuen Rahmen im unteren Teil der Console und zeigt eine Befehlszeilenaufforderung an.

    Cloud Shell-Sitzung

Lokale Befehlszeile

Führen Sie die folgenden Schritte aus, um die lokale Befehlszeile zu verwenden.

  1. Verwenden Sie die gcloud GLI um das Kubernetes-Befehlszeilentool zu installieren. kubectl wird für die Kommunikation mit Kubernetes verwendet. Dies ist das Cluster-Orchestrierungssystem für Deep Learning Container-Cluster.

    gcloud components install kubectl
    

    Sie haben das Google Cloud CLI und Docker bereits installiert, wenn Sie die Schritte im Abschnitt Erste Schritte abgeschlossen haben.

GKE-Cluster erstellen

Führen Sie den folgenden Befehl aus, um in GKE einen Cluster mit zwei Knoten namens pytorch-training-cluster zu erstellen:

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"

Weitere Informationen zu diesen Einstellungen finden Sie in der Dokumentation zum Erstellen von Clustern für die Ausführung von Containern.

Es kann einige Minuten dauern, bis der Cluster erstellt ist.

Statt einen neuen Cluster zu erstellen, können Sie auch einen vorhandenen Cluster in Ihrem Google Cloud-Projekt verwenden. Dazu müssen Sie möglicherweise den folgenden Befehl ausführen, damit das kubectl-Befehlszeilentool die korrekten Anmeldedaten für den Zugriff auf den Cluster hat:

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

Als Nächstes installieren Sie die NVIDIA GPU-Gerätetreiber.

Dockerfile erstellen

Es gibt viele Möglichkeiten, ein Container-Image zu erstellen. Mit den folgenden Schritten wird gezeigt, wie Sie ein Container-Image mit einem Python-Skript namens trainer.py erstellen.

So rufen Sie eine Liste der verfügbaren Container-Images auf:

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

Unter Container auswählen können Sie den gewünschten Container auswählen.

Im folgenden Beispiel wird gezeigt, wie Sie ein Python-Skript mit dem Namen trainer.py in einen bestimmten Deep Learning-Containertyp von PyTorch einfügen.

Schreiben Sie zum Erstellen des Dockerfile die unten aufgeführten Befehle in eine Datei mit dem Namen Dockerfile. In diesem Schritt wird davon ausgegangen, dass Code zum Trainieren eines ML-Modells in einem Verzeichnis namens model-training-code vorhanden ist und das Haupt-Python-Modul in diesem Verzeichnis den Namen trainer.py hat. In diesem Szenario wird der Container entfernt, sobald der Job abgeschlossen ist. Daher sollte Ihr Trainingsskript so konfiguriert sein, dass die Ausgabe nach Cloud Storage erfolgt (siehe das Beispielskript für eine Ausgabe nach Cloud Storage) oder in einen nichtflüchtigen Speicher.

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

Container-Image erstellen und hochladen

Um das Container-Image zu erstellen und in Container Registry hochzuladen, verwenden Sie die folgenden Befehle:

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=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

Anwendung bereitstellen

Erstellen Sie eine Datei namens pod.yaml mit dem unten aufgeführten Inhalt. Ersetzen Sie dabei IMAGE_URI durch den URI Ihres Images.

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

Führen Sie mit dem kubectl-Befehlszeilentool den folgenden Befehl aus, um die Anwendung bereitzustellen:

kubectl apply -f ./pod.yaml

Um den Status des Pods festzustellen, führen Sie folgenden Befehl aus:

kubectl describe pod gke-training-pod