Wenn für Ihre Arbeitslast die verteilte Verarbeitung auf mehreren Knoten erforderlich ist, sollten Sie Flex-Start mit Bereitstellung per Warteschlange verwenden. Weitere Informationen finden Sie unter Große Arbeitslast mit Flex-Start und Bereitstellung per Warteschlange ausführen.
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 verwenden. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Preise für Flex-Start
Flex-Start wird empfohlen, wenn für Ihre Arbeitslast dynamisch bereitgestellte Ressourcen nach Bedarf für bis zu sieben Tage mit kurzfristigen Reservierungen, ohne komplexe Kontingentverwaltung 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:
- Sie können einen Rabatt von bis zu 53 % für vCPUs, GPUs, TPUs und alle angehängten lokalen SSD-Laufwerke erhalten.
- Sie zahlen nach dem Pay-as-you-go-Modell (PAYG).
Hinweis
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 dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
- 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 in Ihren Knotenstandorten ein Kontingent für GPUs auf Abruf haben.
Wenn Sie keinen Cluster haben oder Ihr Cluster die Anforderungen nicht erfüllt, können Sie mit der gcloud CLI einen regionalen Standardcluster erstellen. Fügen Sie die folgenden Flags hinzu, um mehr über flex-start zu erfahren:
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
Wenn Sie einen Knotenpool mit flexiblem Start erstellen, verwenden Sie die oben genannten Flags und --accelerator type=nvidia-l4,count=1.
Wenn Sie einen Standardcluster haben, der die Anforderungen erfüllt, erfahren Sie in den nächsten Abschnitten, wie Sie einen GPU-Beschleunigertyp und einen Maschinentyp für Ihren Cluster auswählen.
GPU-Beschleunigertyp auswählen
Wenn Sie einen Cluster im Autopilot-Modus verwenden, überspringen Sie diesen Abschnitt und fahren Sie mit dem Abschnitt Batcharbeitslast ausführen fort.
Die GPU-Verfügbarkeit ist für jede Zone spezifisch. Sie müssen einen GPU-Beschleunigertyp finden, der in einer Zone verfügbar ist, in der sich der Standardcluster befindet. Wenn Sie einen regionalen Standardcluster haben, muss sich die Zone, in der der GPU-Beschleunigertyp verfügbar ist, in der Region befinden, in der sich der Cluster befindet. Wenn Sie den Knotenpool erstellen, geben Sie den Beschleunigertyp und die Zonen für die Knoten an. Wenn Sie einen Beschleunigertyp angeben, der am Standort des Clusters nicht verfügbar ist, schlägt die Erstellung des Knotenpools fehl.
Führen Sie die folgenden Befehle aus, um den Standort Ihres Clusters und einen unterstützten GPU-Beschleunigertyp abzurufen.
Rufen Sie den Standort des Clusters ab:
gcloud container clusters listDie Ausgabe sieht etwa so aus:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4Liste der verfügbaren GPU-Beschleunigertypen, ausgenommen virtuelle Workstations am Standort:
gcloud compute accelerator-types list | grep CONTROL_PLANE_LOCATION | grep -v "Workstation"Ersetzen Sie
CONTROL_PLANE_LOCATIONdurch den Standort des Clusters.Wenn Sie beispielsweise eine Liste der GPU-Beschleunigertypen in der Region
us-west2abrufen möchten, führen Sie den folgenden Befehl aus:gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"Die Ausgabe sieht etwa so aus:
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
Kompatiblen Maschinentyp auswählen
Wenn Sie einen Cluster im Autopilot-Modus verwenden, überspringen Sie diesen Abschnitt und fahren Sie mit dem Abschnitt Batcharbeitslast ausführen fort.
Nachdem Sie wissen, welche GPUs am Standort des Clusters verfügbar sind, können Sie die kompatiblen Maschinentypen ermitteln. Google Cloud beschränkt GPUs auf bestimmte Maschinenserien. So finden Sie einen Maschinentyp:
- Weitere Informationen finden Sie in der Tabelle Verfügbare GPU-Modelle.
- Suchen Sie die Zeile für den von Ihnen ausgewählten GPU-Beschleunigertyp.
- Sehen Sie sich die Spalte „Maschinenserie“ für diese Zeile an. In dieser Spalte sehen Sie, welche Maschinenreihe Sie verwenden müssen.
- Klicken Sie auf den Link in der Maschinenserie, um die Namen der Maschinentypen aufzurufen, die Sie angeben können.
Die einzige Ausnahme ist die N1-Maschinenserie, in der zusätzliche Informationen dazu enthalten sind, welche N1-Maschinentypen Sie mit dem ausgewählten Beschleunigertyp verwenden können.
Bevor Sie eine beschleunigungsoptimierte Maschine verwenden, prüfen Sie, ob sie den Flex-Start-Bereitstellungsmodus unterstützt. Informationen dazu finden Sie unter Verfügbarkeit von Verbrauchsoptionen nach Maschinentyp.
Anzahl der Beschleuniger ermitteln
Wenn Sie einen Cluster im Autopilot-Modus verwenden, überspringen Sie diesen Abschnitt und fahren Sie mit dem Abschnitt Batcharbeitslast ausführen fort.
Wenn Sie einen Knotenpool erstellen möchten, müssen Sie die Anzahl der Beschleuniger festlegen, die an jeden Knoten im Knotenpool angehängt werden sollen. Gültige Werte hängen vom Beschleunigertyp und Maschinentyp ab. Jeder Maschinentyp hat ein Limit für die Anzahl der GPUs, die er unterstützen kann. So ermitteln Sie, welchen Wert Sie verwenden sollten (außer dem Standardwert 1):
- Weitere Informationen finden Sie unter GPU-Maschinentypen.
- Suchen Sie in der Tabelle nach dem Beschleunigertyp für Ihren Maschinenserientyp.
- Verwenden Sie den Wert in der Spalte „GPU count“ (Anzahl der GPUs).
Knotenpool mit Flex-Start erstellen (nur Standard)
Wenn Sie einen Autopilot-Cluster verwenden, überspringen Sie diesen Abschnitt. Sie müssen Knotenpools nicht manuell erstellen. Wenn Sie Ihr Job- oder Pod-Manifest im Abschnitt Batch-Arbeitslast ausführen bereitstellen, stellt GKE Autopilot automatisch die erforderlichen Flex-Start-VMs basierend auf Ihrer nodeSelector bereit.
Zum Erstellen eines Knotenpools mit aktiviertem Flex-Start in einem vorhandenen Standardcluster können Sie die gcloud CLI oder Terraform verwenden.
gcloud
So erstellen Sie einen Knotenpool mit Flex-Start:
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --no-enable-autorepair \ --consolidation-delay=CONSOLIDATION_DELAYErsetzen Sie Folgendes:
NODE_POOL_NAME: Der Name, den Sie für den Knotenpool auswählen.CLUSTER_NAME: der Name des Standardclusters, den Sie ändern möchten.CONTROL_PLANE_LOCATION: die Compute-Region für die Cluster-Steuerungsebene.PROJECT_ID: Ihre Projekt-ID.ACCELERATOR_TYPE: Der spezifische Typ des Beschleunigers (z. B.nvidia-tesla-t4für NVIDIA T4), der an die Instanzen angehängt werden soll.COUNT: Die Anzahl der Beschleuniger, die an die Instanzen angehängt werden sollen. Der Standardwert ist1.MACHINE_TYPE: Der Maschinentyp für Knoten.MAX_RUN_DURATION: optional. Die maximale Laufzeit eines Knotens in Sekunden, bis zum Standardwert von sieben Tagen. Die Nummer, die Sie eingeben, muss mitsenden. Wenn Sie beispielsweise einen Tag angeben möchten, geben Sie86400sein.CONSOLIDATION_DELAY: optional. Die Dauer, die Cluster Autoscaler wartet, bevor er nicht ausgelastete Knoten herunterskalieren kann. Mit dieser Einstellung können Sie das Herunterskalieren verzögern und den Knotenpool für die spätere Wiederverwendung durch andere Pods beibehalten. Die Nummer, die Sie eingeben, muss mitsenden. Wenn Sie beispielsweise eine Stunde angeben möchten, geben Sie3600sein. Verfügbar in GKE-Version1.34.1-gke.2364000und höher.NODE_ZONES: Eine durch Kommas getrennte Liste mit einer oder mehreren Zonen, in denen GKE den Knotenpool erstellt.
In diesem Befehl weist das Flag
--flex-startgcloudan, einen Knotenpool mit Flex-Start-VMs zu erstellen.GKE erstellt einen Knotenpool mit Knoten, die zwei Instanzen des angegebenen Beschleunigertyps enthalten. Der Knotenpool hat anfangs null Knoten und das Autoscaling ist aktiviert.
Terraform
Sie können 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 = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
Ersetzen Sie Folgendes:
MACHINE_TYPE: Der Maschinentyp für Knoten.ACCELERATOR_TYPE: Der spezifische Typ des Beschleunigers (z. B.nvidia-tesla-t4für NVIDIA T4), der an die Instanzen angehängt werden soll.COUNT: die Anzahl der Beschleuniger, die an die Instanzen angehängt werden sollen. Der Standardwert ist1.NODE_ZONES: Die durch Kommas getrennte Liste mit einer oder mehreren Zonen, in denen GKE den Knotenpool erstellt.
Terraform ruft Google Cloud APIs auf, um einen Cluster mit einem Knotenpool zu erstellen, der Flex-Start-VMs 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.
Status von Flex-Start im Knotenpool prüfen
Führen Sie dazu diesen Befehl aus:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location CONTROL_PLANE_LOCATION \
--format="get(config.flexStart)"
Wenn Flex-Start im Knotenpool aktiviert ist, wird das Feld flexStart auf True gesetzt.
Batcharbeitslast ausführen
In diesem Abschnitt erstellen Sie zwei Kubernetes-Jobs, für die jeweils eine GPU erforderlich ist. Ein Job-Controller 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 Console eine Cloud Shell-Sitzung. Klicken Sie dazu 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: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: 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: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: 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: OnFailureWenden Sie das
dws-flex-start.yaml-Manifest an:kubectl apply -f dws-flex-start.yamlPrüfen Sie, ob die Jobs auf demselben Knoten ausgeführt werden:
kubectl get pods -l "job-name in (job-1,job-2)" -o wideDie 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> 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
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
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 CONTROL_PLANE_LOCATIONLö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 die Ausführung von Batch-Arbeitslasten in GKE.