In diesem Leitfaden erfahren Sie, wie Sie die GPU-Bereitstellung für Trainingsarbeitslasten mittlerer und kleiner Größe mithilfe des Bereitstellungsmodus „Flexibler Start“ optimieren. In dieser Anleitung verwenden Sie den Bereitstellungsmodus „Flex-Start“, um eine Arbeitslast bereitzustellen, die aus zwei Kubernetes-Jobs besteht, für die jeweils eine GPU erforderlich ist. GKE stellt automatisch einen einzelnen Knoten mit zwei A100-GPUs bereit, um beide Jobs auszuführen.
Wenn für Ihre Arbeitslast eine verteilte Verarbeitung mit mehreren Knoten erforderlich ist, sollten Sie den Bereitstellungsmodus „Flex-Start“ mit Bereitstellung in der Warteschlange verwenden. Weitere Informationen finden Sie unter Große Arbeitslast mit flex-start und Warteschlangenbereitstellung ausführen.
Dieser Leitfaden richtet sich an Entwickler für maschinelles Lernen (ML), Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die Kubernetes-Container-Orchestrierungsfunktionen zum Ausführen von Batcharbeitslasten nutzen möchten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
- Sie benötigen einen Autopilot-Cluster oder einen Standardcluster mit Version 1.32.2-gke.1652000 oder höher.
- Machen Sie sich mit den Einschränkungen des Bereitstellungsmodus „Flex-Start“ vertraut.
- Wenn Sie einen Standardcluster verwenden, muss mindestens ein Knotenpool ohne aktivierten Bereitstellungsmodus „Flex-Start“ vorhanden sein, damit der Cluster ordnungsgemäß funktioniert.
Knotenpool mit dem Bereitstellungsmodus „Flex-Start“ erstellen
Sie können die gcloud CLI oder Terraform verwenden, um einen Knotenpool mit aktiviertem Bereitstellungsmodus „Flex-Start“ in einem vorhandenen Standardcluster zu erstellen.
Wenn Sie einen Cluster im Autopilot-Modus verwenden, überspringen Sie diesen Abschnitt und fahren Sie mit dem Abschnitt Trainingsarbeitslast ausführen fort.
gcloud
So erstellen Sie einen Knotenpool mit dem Bereitstellungsmodus „Flex-Start“:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location LOCATION_NAME \ --project CLUSTER_PROJECT_ID \ --accelerator=type=nvidia-a100-80gb,count=2 \ --machine-type=a2-ultragpu-2g \ --max-run-duration=MAX_RUN_DURATION \ --flex-start \ --num-nodes=0 \ --enable-autoscaling \ --total-min-nodes=0 \ --total-max-nodes=5 \ --location-policy=ANY \ --reservation-affinity=none \ --no-enable-autorepair
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: der Name, den Sie für Ihren Knotenpool auswählenLOCATION_NAME
: die Compute-Region für die Clustersteuerungsebene.CLUSTER_NAME
: Der Name des Standardclusters, den Sie ändern möchten.MAX_RUN_DURATION
: Optional: Die maximale Laufzeit eines Knotens in Sekunden, bis zu sieben Tage als Standard.
Hier weist das Flag
--flex-start
dengcloud
-Befehl an, einen Knotenpool mit aktiviertem Bereitstellungsmodus „Flex-Start“ zu erstellen.GKE erstellt einen Knotenpool mit Knoten, die zwei A100-GPUs (
a2-ultragpu-2g
) enthalten. Dieser Knotenpool skaliert Knoten automatisch von null auf maximal fünf Knoten.Prüfen Sie den Status des Bereitstellungsmodus „Flexibler Beginn“ im Knotenpool:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
Wenn der Bereitstellungsmodus „Flex-Start“ im Knotenpool aktiviert ist, wird das Feld
flexStart
aufTrue
gesetzt.
Terraform
Sie können den Bereitstellungsmodus „Flex-Start“ mit GPUs über ein Terraform-Modul verwenden.
Fügen Sie Ihrer Terraform-Konfiguration den folgenden Block hinzu:
resource "google_container_node_pool" " "gpu_dws_pool" { name = "gpu-dws-pool" queued_provisioning { enabled = false } } node_config { machine_type = "a3-highgpu-8g" flex_start = true }
Terraform ruft Google Cloud APIs auf, um einen Cluster mit einem Knotenpool zu erstellen, der den Bereitstellungsmodus „Flexibler Start“ mit GPUs verwendet. Der Knotenpool hat anfangs null Knoten und das Autoscaling ist aktiviert. Weitere Informationen zu Terraform finden Sie in der google_container_node_pool
-Ressourcenspezifikation auf terraform.io.
Trainingsarbeitslast ausführen
In diesem Abschnitt erstellen Sie zwei Kubernetes-Jobs, für die jeweils eine GPU erforderlich ist. Ein Jobcontroller in Kubernetes erstellt einen oder mehrere Pods und sorgt dafür, dass sie eine bestimmte Aufgabe erfolgreich ausführen.
Starten Sie in der Google Cloud -Konsole eine Cloud Shell-Sitzung. Klicken Sie dazu in der Google Cloud -Konsole auf
Cloud Shell aktivieren. Im unteren Bereich der Google Cloud Console wird eine Sitzung geöffnet.
Erstellen Sie eine Datei mit dem Namen
dws-flex-start.yaml
:apiVersion: batch/v1 kind: Job metadata: name: gpu-job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" containers: - name: gpu-container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: gpu-job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" containers: - name: gpu-container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure
Wenden Sie das
dws-flex-start.yaml
-Manifest an:kubectl apply -f dws-flex-start.yaml
Prüfen Sie, ob die Jobs auf demselben Knoten ausgeführt werden:
kubectl get pods -l "job-name in (gpu-job-1,gpu-job-2)" -o wide
Die Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none> gpu-job-2 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
Bereinigen
Damit Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.
Projekt löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Einzelne Ressource löschen
Löschen Sie die Jobs:
kubectl delete job -l "job-name in (gpu-job-1,gpu-job-2)"
Löschen Sie den Knotenpool:
gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
Löschen Sie den Cluster:
gcloud container clusters delete CLUSTER_NAME
Nächste Schritte
- GPUs in GKE
- Weitere Informationen zur automatischen Knotenbereitstellung
- Weitere Informationen zu Best Practices für das Ausführen von Batch-Arbeitslasten in GKE