Reservierungen mit Training verwenden

In diesem Dokument wird erläutert, wie Sie Compute Engine-Reservierungen verwenden, um ein hohes Maß an Sicherheit zu erhalten, dass Ihre serverlosen Trainingsjobs die erforderlichen VM-Ressourcen haben, um ausgeführt zu werden.

Reservierungen sind ein Compute Engine-Feature. Mit Reservierungen sorgen Sie dafür, dass die Ressourcen jederzeit verfügbar sind, die Sie zum Erstellen von VMs mit derselben Hardware (Arbeitsspeicher und vCPUs) und optionalen Ressourcen (CPUs, GPUs, TPUs und lokalen SSD-Laufwerken) benötigen.

Wenn Sie eine Reservierung erstellen, prüft Compute Engine, ob die angeforderte Kapazität in der angegebenen Zone verfügbar ist. Wenn ja, reserviert Compute Engine die Ressourcen, erstellt die Reservierung und es geschieht Folgendes:

  • Sie können die reservierten Ressourcen sofort nutzen und sie bleiben verfügbar, bis Sie die Reservierung löschen.
  • Die reservierten Ressourcen werden zu denselben On-Demand-Tarifen wie laufende VMs berechnet, einschließlich aller anwendbaren Rabatte, bis die Reservierung gelöscht wird. Für eine VM, die eine Reservierung nutzt, fallen keine separaten Gebühren an. Ihnen werden nur die Ressourcen außerhalb der Reservierung in Rechnung gestellt, z. B. Laufwerke oder IP-Adressen. Weitere Informationen finden Sie unter Preise für Reservierungen.

Beschränkungen und Anforderungen

Beachten Sie bei der Verwendung von Compute Engine-Reservierungen mit der Agent Platform die folgenden Einschränkungen und Anforderungen:

  • Die Agent Platform kann nur Reservierungen für CPUs, GPU-VMs oder TPUs (Vorabversion) verwenden.
  • Die Agent-Plattform kann keine Reservierungen von VMs nutzen, an die lokale SSD-Laufwerke manuell angehängt sind.
  • Die Verwendung von Compute Engine-Reservierungen mit der Agent Platform wird nur für serverloses Training, Inferenz und die Gemini Enterprise Agent Platform Workbench (Vorabversion) unterstützt.
  • Die VM-Eigenschaften einer Reservierung müssen genau mit Ihrer Agent Platform-Arbeitslast übereinstimmen, damit die Reservierung verwendet werden kann. Wenn in einer Reservierung beispielsweise der Maschinentyp a2-ultragpu-8g angegeben ist, kann die Agent Platform-Arbeitslast die Reservierung nur nutzen, wenn sie ebenfalls den Maschinentyp a2-ultragpu-8g verwendet. Anforderungen ansehen
  • Wenn Sie eine freigegebene Reservierung von GPU-VMs oder TPUs nutzen möchten, müssen Sie sie über das Inhaberprojekt oder ein Nutzerprojekt nutzen, für das die Reservierung freigegeben ist. Siehe Funktionsweise freigegebener Reservierungen.
  • Um regelmäßige Updates Ihrer Agent Platform-Bereitstellungen zu ermöglichen, empfehlen wir, die Anzahl der VMs für jede gleichzeitige Bereitstellung um mindestens eine VM zu erhöhen.
  • Flex Start für Dynamic Workload Scheduler und das Ausführen von Trainingsjobs auf einer persistenten Ressource werden beide unterstützt, außer wenn Compute Engine-Reservierungen mit Agent Platform-Training verwendet werden.

Abrechnung

Wenn Sie Compute Engine-Reservierungen verwenden, werden Ihnen Folgendes in Rechnung gestellt:

  • Compute Engine-Preise für die Compute Engine-Ressourcen, einschließlich aller anwendbaren Rabatte für zugesicherte Nutzung (Committed Use Discount, CUD). Siehe Compute Engine-Preise.
  • Zusätzlich zur Nutzung der Infrastruktur fallen die in den nachstehenden Tabellen aufgeführten Gebühren für die Verwaltung von serverlosem Training in der Agent Platform an. Siehe Preise für benutzerdefiniert trainierte Modelle.

Hinweis

Verbrauch einer Reservierung zulassen

Bevor Sie eine Reservierung von CPUs, GPU-VMs oder TPUs nutzen, müssen Sie die Freigaberichtlinie festlegen, damit die Agent Platform die Reservierung nutzen kann. Verwenden Sie dazu eine der folgenden Methoden:

Nutzung beim Erstellen einer Reservierung zulassen

Wenn Sie eine Reservierung für ein einzelnes Projekt oder eine freigegebene Reservierung von GPU-VMs erstellen, können Sie der Agent Platform wie unten beschrieben erlauben, die Reservierung zu nutzen:

  • Wenn Sie die Cloud de Confiance Console verwenden, wählen Sie im Bereich Google Cloud-Dienste die Option Reservierung teilen aus.
  • Wenn Sie die Google Cloud CLI verwenden, fügen Sie das Flag --reservation-sharing-policy mit dem Wert ALLOW_ALL hinzu.
  • Wenn Sie die REST API verwenden, geben Sie im Anfragetext das Feld serviceShareType mit dem Wert ALLOW_ALL an.

Nutzung einer vorhandenen Reservierung zulassen

Sie können eine automatisch erstellte Reservierung von GPU-VMs oder TPUs für eine vorausschauende Reservierung erst nach dem Beginn der Reservierung ändern.

Verwenden Sie eine der folgenden Methoden, um der Agent Platform die Nutzung einer vorhandenen Reservierung zu ermöglichen:

Prüfen, ob eine Reservierung genutzt wird

Informationen zum Prüfen, ob die Reservierung genutzt wird, finden Sie in der Compute Engine-Dokumentation unter Nutzung von Reservierungen prüfen.

Serverlosen Trainingsjob mit einer Reservierung erstellen

Verwenden Sie die REST API, um einen serverlosen Trainingsjob zu erstellen, der eine Compute Engine-Reservierung von GPU-VMs nutzt.

Funktionsweise von Reservierungsaffinität und -validierung

Wenn Sie einen benutzerdefinierten Trainingsjob mit einer reservationAffinity-Konfiguration senden, validiert die Agent Platform Ihre Reservierungskonfiguration, bevor der Job in die Warteschlange gestellt wird:

  • Für ANY_RESERVATION:
    • In der Region Ihres Jobs muss mindestens eine automatisch genutzte Reservierung vorhanden sein, die für die Agent Platform freigegeben ist (und für Ihr Projekt freigegeben ist, wenn sich die Reservierung in einem anderen Hostprojekt befindet).
    • Die Felder key und values in reservationAffinity müssen weggelassen werden oder leer sein.
  • Für SPECIFIC_RESERVATION:
    • Das Feld key muss auf compute.googleapis.com/reservation-name festgelegt sein und im Feld values muss eine einzelne vorhandene Reservierung in einer Zone innerhalb der Region des Jobs angegeben werden.
    • Die angegebene Reservierung muss für ein bestimmtes Targeting (nicht für den automatischen Verbrauch) konfiguriert und für die Agent Platform freigegeben sein (und für Ihr Projekt, wenn sich die Reservierung in einem anderen Hostprojekt befindet).

Wenn eine dieser Validierungsprüfungen fehlschlägt, lehnt die API die Anfrage sofort mit dem Fehler INVALID_ARGUMENT ab. Bei der Vorabvalidierung wird die Kompatibilität des Maschinentyps oder die verfügbare Reservierungskapazität zum Zeitpunkt der Jobeinreichung nicht geprüft.

In der folgenden Tabelle wird zusammengefasst, wie die Agent Platform einen Trainingsjob basierend auf dem Reservierungsstatus und reservationAffinityType verarbeitet:

Szenario Verhalten mit ANY_RESERVATION Verhalten mit SPECIFIC_RESERVATION
Reservierung ist vorhanden, stimmt mit den Maschinenattributen überein und hat verfügbare Kapazität Der Job wird akzeptiert, an die Zone der Reservierung weitergeleitet und verbraucht die Reservierung. Der Job wird akzeptiert und nutzt die angegebene Reservierung.
Reservierung ist vorhanden und stimmt mit den Maschinenattributen überein, ist aber voll Der Job wird akzeptiert und an die Zone weitergeleitet, in der sich Ihre übereinstimmende Reservierung befindet. Da die reservierte Kapazität erschöpft ist, versucht die Agent Platform, On-Demand-Kapazität bereitzustellen. Der Job wird akzeptiert. Wenn jedoch in der Zielreservierung keine Kapazität verfügbar wird, wird der Job von der Agent Platform abgelehnt. Es wird nicht auf On-Demand-Kapazität zurückgegriffen.
Reservierung ist vorhanden, aber nicht für die Agent Platform oder das Nutzerprojekt freigegeben Der Job schlägt beim Senden sofort mit dem Fehler INVALID_ARGUMENT fehl (es sei denn, es gibt eine andere zugängliche, automatisch genutzte Reservierung in der Region). Der Job schlägt beim Senden sofort mit dem Fehler INVALID_ARGUMENT fehl.
In der Region des Jobs ist keine zugängliche Reservierung vorhanden Der Job schlägt beim Senden sofort mit dem Fehler INVALID_ARGUMENT fehl. Es wird nicht auf On-Demand-Kapazität zurückgegriffen. Der Job schlägt beim Senden sofort mit dem Fehler INVALID_ARGUMENT fehl.

REST

Ersetzen Sie dabei folgende Werte für die Anfragedaten:

  • LOCATION: Die Region, in der der Container oder das Python-Paket ausgeführt wird.
  • PROJECT_ID: das Projekt, in dem die Reservierung erstellt wurde. Wenn Sie eine freigegebene Reservierung aus einem anderen Projekt nutzen möchten, müssen Sie die Reservierung für dieses Projekt freigeben. Weitere Informationen finden Sie unter Nutzerprojekte in einer freigegebenen Reservierung ändern.
  • JOB_NAME: erforderlich. Ein Anzeigename für CustomJob.
  • MACHINE_TYPE: der für den Job zu verwendende Maschinentyp. Die Standardeinstellung ist n1-standard-2. Weitere Informationen zu den unterstützten Maschinentypen finden Sie unter Computing-Ressourcen für benutzerdefiniertes Training konfigurieren.
  • ACCELERATOR_TYPE: Der Typ des Beschleunigers, der an die Maschine angehängt werden soll. Weitere Informationen zu den GPU-Typen, die von den einzelnen Maschinentypen unterstützt werden, finden Sie unter GPUs für Computing-Arbeitslasten.
  • ACCELERATOR_COUNT: die Anzahl der Beschleuniger, die an die Maschine angehängt werden sollen.
  • Definieren Sie den benutzerdefinierten Trainingsjob:
    • RESERVATION_AFFINITY_TYPE: muss ANY_RESERVATION, SPECIFIC_RESERVATION oder NO_RESERVATION sein.

      • ANY_RESERVATION bedeutet, dass die VMs Ihrer customJob automatisch jede Reservierung mit übereinstimmenden Attributen nutzen können.
      • SPECIFIC_RESERVATION bedeutet, dass die VMs Ihrer customJob nur eine Reservierung nutzen können, auf die die VMs ausdrücklich namentlich ausgerichtet sind.
      • NO_RESERVATION bedeutet, dass die VMs Ihres customJob keine Reservierungen nutzen können. Wenn Sie NO_RESERVATION angeben, hat das denselben Effekt wie das Weglassen einer Reservierungsaffinitätsspezifikation.
    • ZONE: die Zone, in der die Reservierung erstellt wurde.
    • RESERVATION_NAME: der Name Ihrer Reservierung.
    • DISK_TYPE: Optional. Der Typ des Bootlaufwerks, das für den Job verwendet werden soll, entweder pd-standard (Standardeinstellung) oder pd-ssd. Weitere Informationen zu Laufwerkstypen
    • DISK_SIZE: Optional. Die Größe des Bootlaufwerks in GB, das für den Job verwendet werden soll. Der Standardwert ist 100.
    • REPLICA_COUNT: die Anzahl der zu verwendenden Worker-Replikate. In den meisten Fällen ist dies auf 1 für den ersten Worker-Pool festgelegt.
    • Wenn Ihre Trainingsanwendung in einem benutzerdefinierten Container ausgeführt wird, geben Sie Folgendes an:
      • CUSTOM_CONTAINER_IMAGE_URI: Der URI eines Container-Images in Artifact Registry oder Docker Hub, der auf jedem Worker-Replikat ausgeführt werden soll.
      • CUSTOM_CONTAINER_COMMAND: Optional. Der Befehl, der beim Start des Containers aufgerufen werden soll. Mit diesem Befehl wird der Standardeinstiegspunkt des Containers überschrieben.
      • CUSTOM_CONTAINER_ARGS: Optional. Die Argumente, die beim Starten des Containers übergeben werden.
    • Wenn Ihre Trainingsanwendung ein Python-Paket ist, das in einem vordefinierten Container ausgeführt wird, geben Sie Folgendes an:
      • EXECUTOR_IMAGE_URI: Der URI des Container-Images, in dem der bereitgestellte Code ausgeführt wird. Siehe Verfügbare vordefinierte Container für das Training.
      • PYTHON_PACKAGE_URIS: Durch Kommas getrennte Liste der Cloud Storage-URIs, die die Python-Paketdateien angeben, wobei es sich um das Trainingsprogramm und die abhängigen Pakete handelt. Die maximale Anzahl der Paket-URIs beträgt 100.
      • PYTHON_MODULE: Der Name des Python-Moduls, der nach der Installation der Pakete ausgeführt werden soll.
      • PYTHON_PACKAGE_ARGS: Optional. Befehlszeilenargumente, die an das Python-Modul übergeben werden sollen.
    • TIMEOUT: Optional. Die maximale Ausführungszeit für den Job.
  • Geben Sie LABEL_NAME und LABEL_VALUE für alle Labels an, die Sie auf diesen benutzerdefinierten Job anwenden möchten.

HTTP-Methode und URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

JSON-Text der Anfrage:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "MACHINE_TYPE",
          "acceleratorType": "ACCELERATOR_TYPE",
          "acceleratorCount": ACCELERATOR_COUNT,
          "reservationAffinity": {
            "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
            // Use the following key and values only if
            // the reservationAffinityType is SPECIFIC_RESERVATION.
            "key": "compute.googleapis.com/reservation-name",
            "values": [
              "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
            ]
          },
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

Die Antwort enthält Informationen zu Spezifikationen sowie die TRAININGPIPELINE_ID.

Nächste Schritte