In diesem Leitfaden erfahren Sie, wie Sie die TPU-Bereitstellung für Trainingsarbeitslasten mittleren und kleinen Umfangs mit dem Bereitstellungsmodus „Flex-Start“ optimieren. In dieser Anleitung verwenden Sie Flex-Start, um eine Arbeitslast bereitzustellen, die aus einem TPU-Slice-Knotenpool besteht.
Dieser Leitfaden richtet sich an Entwickler von maschinellem Lernen (ML), Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die daran interessiert sind, Kubernetes-Container-Orchestrierungsfunktionen zum Ausführen von Batcharbeitslasten zu nutzen. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Trusted Cloud by S3NS Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.
Flex-Start-Preise
Flex-Start wird empfohlen, wenn für Ihre Arbeitslast dynamisch bereitgestellte Ressourcen nach Bedarf für bis zu sieben Tage mit kurzfristigen Reservierungen, ohne komplexes Kontingentmanagement und kostengünstigen Zugriff erforderlich sind. Flex-Start basiert auf dem Dynamic Workload Scheduler und wird gemäß der Preisgestaltung für den Dynamic Workload Scheduler abgerechnet:
- Rabattiert (bis zu 53%) für vCPUs, GPUs und TPUs.
- Sie zahlen nur für die tatsächliche Nutzung.
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.
- Prüfen Sie, ob Sie einen Autopilot-Cluster oder einen Standardcluster mit Version 1.33.0-gke.1712000 oder höher haben.
- Machen Sie sich mit den Einschränkungen von Flex-Start vertraut.
- Wenn Sie einen Standardcluster verwenden, muss mindestens ein Knotenpool ohne aktivierte Flex-Start-Funktion vorhanden sein, damit der Cluster ordnungsgemäß funktioniert.
- Prüfen Sie, ob Sie ein Kontingent für TPUs auf Abruf an Ihren Knotenstandorten haben.
Knotenpool mit Flex-Start erstellen
Wenn Sie einen Knotenpool mit aktiviertem Flex-Start in einem vorhandenen Standard-Cluster erstellen möchten, verwenden Sie die gcloud CLI.
Wenn Sie einen Cluster im Autopilot-Modus verwenden, überspringen Sie diesen Abschnitt und fahren Sie mit dem Abschnitt Batcharbeitslast ausführen fort.
Sie können einen TPU-Slice-Knotenpool mit einem oder mehreren Hosts mit Flex-Start erstellen:
So erstellen Sie einen Knotenpool mit Flex-Start:
Einzelner Host
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION_NAME \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --reservation-affinity=none \ --enable-autoscaling \ --flex-start \ --num-nodes 0 \ --min-nodes=0 \ --max-nodes=1
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: der Name, den Sie für Ihren Knotenpool auswählenCLUSTER_NAME
ist der Name des Clusters.LOCATION_NAME
: die Compute-Region für die Clustersteuerungsebene.NODE_ZONES
: Die durch Kommas getrennte Liste mit einer oder mehreren Zonen, in denen GKE den Knotenpool erstellt.MACHINE_TYPE
: Der Maschinentyp für Knoten. Weitere Informationen zu TPU-kompatiblen Maschinentypen finden Sie in der Tabelle unter TPU-Version auswählen.
Mehrere Hosts
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION_NAME \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --tpu-topology=TPU_TOPOLOGY \ --flex-start \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=2 \ --reservation-affinity=none \ --no-enable-autorepair
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: der Name, den Sie für Ihren Knotenpool auswählenCLUSTER_NAME
ist der Name des Clusters.LOCATION_NAME
: die Compute-Region für die Clustersteuerungsebene.NODE_ZONES
: Die durch Kommas getrennte Liste mit einer oder mehreren Zonen, in denen GKE den Knotenpool erstellt.MACHINE_TYPE
: Der Maschinentyp für Knoten. Sie können beispielsweisect6e-standard-4t
für TPU Trillium verwenden. Weitere Informationen zu den verfügbaren Maschinentypen finden Sie unter TPU-Version auswählen.TPU_TOPOLOGY
: Die physische Topologie für das TPU-Slice. Das Format der Topologie hängt von der TPU-Version ab. Weitere Informationen zu TPU-Topologien finden Sie in der Tabelle unter Topologie auswählen.
Im vorherigen Befehl werden die folgenden erforderlichen Flags verwendet, wenn Sie einen Knotenpool mit Flex-Start erstellen:
--enable-autoscaling
:Bei „flex-start“ werden nur die erforderlichen Rechenressourcen bereitgestellt, wenn Ihre Arbeitslast ausgeführt wird. Sie müssen die folgenden Parameter festlegen:--num-nodes=0
--min-nodes=0
--max-nodes
auf die Anzahl der virtuellen Maschinen festgelegt, die für Ihren TPU-Slice erforderlich sind.Der Befehl zum Erstellen eines Knotenpools kann beispielsweise die folgenden Parameter enthalten:
... --machine-type=ct6e-standard-4t \ --tpu-topology=4x4 \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=4 \
Mit diesem Befehl wird das Feld
--max-nodes
auf4
gesetzt, da eine4x4
-Topologie aus 16 Chips besteht und jedect6e-standard-4t
-VM 4 Chips hat.
Cluster Autoscaler skaliert auf die Anzahl der Knoten, die für Ihre Arbeitslast erforderlich sind. Nachdem Ihre Arbeitslast abgeschlossen ist, skaliert Cluster Autoscaler auf null Knoten herunter.
--reservation-affinity=none
:Bei „Flex-Start“ werden keine Reservierungen verwendet oder benötigt.
Prüfen Sie den Status von Flex-Start im Knotenpool:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
Wenn Flex-Start im Knotenpool aktiviert ist, wird das Feld
flexStart
aufTrue
festgelegt.
Batcharbeitslast ausführen
In diesem Abschnitt erstellen Sie einen Job, der einen TPU-Knoten mit Flex-Start plant. 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 Trusted Cloud Console eine Cloud Shell-Sitzung, indem Sie auf
Cloud Shell aktivieren klicken. Im unteren Bereich der Trusted Cloud -Konsole wird eine Sitzung geöffnet.
Erstellen Sie eine Datei mit dem Namen
dws-flex-start.yaml
:Einzelner Host
Verwenden Sie das folgende Manifest für die Datei
dws-flex-start.yaml
:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["3600s"] # Sleep for 1 hour resources: requests: google.com/tpu: NUM_CHIPS limits: google.com/tpu: NUM_CHIPS restartPolicy: OnFailure
Mehrere Hosts
Verwenden Sie das folgende Manifest für die Datei
dws-flex-start.yaml
:apiVersion: v1 kind: Service metadata: name: headless-svc spec: clusterIP: None selector: job-name: job-1 --- apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: backoffLimit: 0 completions: 2 parallelism: 2 completionMode: Indexed template: spec: subdomain: headless-svc restartPolicy: Never nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY containers: - name: tpu-job image: python:3.10 ports: - containerPort: 8471 # Default port using which TPU VMs communicate - containerPort: 8431 # Port to export TPU runtime metrics, if supported. securityContext: privileged: true command: - bash - -c - | pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("TPU cores:", jax.device_count())' resources: requests: google.com/tpu: NUM_CHIPS limits: google.com/tpu: NUM_CHIPS
Ersetzen Sie Folgendes:
ACCELERATOR_TYPE
: Der Typ des TPU-Beschleunigers, den Sie beim Erstellen der Knotenpools verwendet haben. Beispiel:tpu-v4-podslice
odertpu-v5-lite-podslice
.TPU_TOPOLOGY
: Die physische Topologie für das TPU-Slice. Der Wert kann beispielsweise4x4x4
oder2x2
sein, je nach TPU-Version.NUM_CHIPS
: Die Anzahl der TPU-Chips in jeder VM beträgt eins, vier oder acht. Weitere Informationen finden Sie unter TPU-Versionen.
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
Die Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
Bereinigen
Damit Ihrem Trusted Cloud by S3NS -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 Trusted 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 (job-1,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
- Mehr über TPUs in GKE erfahren
- Weitere Informationen zur automatischen Knotenbereitstellung
- Weitere Informationen zu Best Practices zum Ausführen von Batch-Arbeitslasten in GKE