Spot-VMs für das Training verwenden

Überblick

Mit Spot-VMs können Sie die Kosten für die Ausführung Ihrer benutzerdefinierten Trainingsjobs senken. Spot-VMs sind VM-Instanzen, die überschüssige Compute Engine-Kapazität darstellen. Für Spot-VMs gibt es erhebliche Rabatte. Compute Engine kann jedoch Spot-VMs jederzeit vorzeitig beenden oder löschen, um die Kapazität zurückzugewinnen.

Weitere Informationen finden Sie unter Spot-VMs.

Beschränkungen und Anforderungen

Beachten Sie die folgenden Einschränkungen und Anforderungen, wenn Sie Spot-VMs mit Vertex AI verwenden:

  • Alle Einschränkungen für Spot-VMs gelten, wenn Sie Spot-VMs mit Vertex AI verwenden.
  • Die Verwendung von Spot-VMs mit Vertex AI wird nur für benutzerdefiniertes Training und Vorhersagen unterstützt.
  • Die Verwendung von Spot-VMs mit TPU-Pods wird nicht unterstützt.
  • Für das Vertex AI-Training können nur Spot-VMs mit den folgenden Maschinenserien verwendet werden:

    • A2
    • A3
  • Das Einreichen von Jobs über die Google Cloud Console wird nicht unterstützt.

Abrechnung

Wenn Ihre Arbeitslasten fehlertolerant sind und einer möglichen vorzeitigen VM-Beendigung standhalten, können Spot-VMs Ihre Compute-Kosten erheblich reduzieren. Wenn einige dieser VMs während der Verarbeitung beendet werden, verlangsamt sich der Job zwar, stoppt aber nicht vollständig. Spot-VMs führen Ihre Batchverarbeitungsaufgaben aus, ohne Ihre vorhandenen VMs zusätzlich zu belasten, und Sie müssen nicht den vollen Preis für zusätzliche Standard-VMs bezahlen. Weitere Informationen finden Sie unter Vorwegnahme.

Wenn Sie Spot-VMs verwenden, werden Ihnen die Kosten basierend auf der Jobdauer und dem Maschinentyp in Rechnung gestellt. Sie zahlen nicht für die Zeit, in der der Job in der Warteschlange steht oder vorzeitig beendet wird.

Umgang mit Vorabankündigung

Spot-VMs können jederzeit von der Compute Engine zurückgefordert werden. Daher muss Ihr benutzerdefinierter Trainingsjob fehlertolerant sein, damit Sie Spot-VMs optimal nutzen können. Wenn Spot-VMs vorzeitig beendet werden, schlägt der benutzerdefinierte Trainingsjob mit einem STOCKOUT-Fehler fehl und die Compute Engine versucht, den Job bis zu sechsmal neu zu starten. Informationen dazu, wie Sie Spot-VMs optimal nutzen, finden Sie unter Best Practices für Spot-VMs.

Im Folgenden finden Sie einige Methoden, mit denen Sie Ihren benutzerdefinierten Trainingsjob ausfallsicher machen können:

  • Erstellen Sie Markierungen, um den Fortschritt zu speichern. Wenn Sie den Fortschritt Ihres Modells regelmäßig speichern, kann ein beendeter benutzerdefinierter Trainingsjob ab dem letzten gespeicherten Prüfpunkt fortgesetzt werden, anstatt von vorn anzufangen.
  • Elastic Horovod verwenden Mit dem elastischen Training kann Horovod Ihre Rechenressourcen skalieren, ohne dass ein Neustart erforderlich ist oder Sie von Prüfpunkten fortfahren müssen. Weitere Informationen finden Sie unter Elastic Horovod.
  • Verwenden Sie ein Shutdown-Script. Wenn Compute Engine eine Spot-VM vorzeitig beendet, können Sie ein Shutdown-Script verwenden, mit dem Bereinigungsaktionen ausgeführt werden, bevor die VM vorzeitig beendet wird. Weitere Informationen finden Sie unter Vorzeitiges Beenden mit einem Shutdown-Skript verwalten.

Vorbereitung

Benutzerdefinierte Trainingsanwendung vorbereiten:

Trainingsjob für die Verwendung von Spot-VMs konfigurieren

Sie können Ihren benutzerdefinierten Trainingsjob für die Verwendung von Spot-VMs konfigurieren, indem Sie in der Planungskonfiguration eine SPOT-Strategie angeben.

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: Ihre Projekt-ID.
  • JOB_NAME: erforderlich. Ein Anzeigename für CustomJob.
  • Definieren Sie den benutzerdefinierten Trainingsjob:
    • MACHINE_TYPE: Der Maschinentyp. Hier finden Sie die verfügbaren Maschinentypen für das Training.
    • 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 Docker-Container-Image mit Ihrem Trainingscode. Beachten Sie die Informationen zum Erstellen von benutzerdefinierten Container-Images.
      • 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.

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"
          }
        },
        "replicaCount": REPLICA_COUNT,

        // 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": {
      "strategy": "SPOT"
    }
  }
}

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 JOB_ID.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI SDK for Python API.

customJob = aiplatform.CustomJob(
    display_name=TEST_CASE_NAME,
    worker_pool_specs=worker_pool_spec,
    staging_bucket=OUTPUT_DIRECTORY
)
customJob.run(
    scheduling_strategy=aiplatform.compat.types.custom_job.Scheduling.Strategy.SPOT
)

Nächste Schritte