Benutzerdefinierte Container

Ein benutzerdefinierter Container ist ein Docker-Image, das Sie zum Ausführen Ihrer Trainingsanwendung erstellen. Durch Ausführen des Jobs für maschinelles Lernen (ML) in einem benutzerdefinierten Container können Sie ML-Frameworks, Nicht-ML-Abhängigkeiten, Bibliotheken und Binärdateien verwenden, die ansonsten von Vertex AI nicht unterstützt werden.

Vorgehensweise zum Trainieren mit Containern

Ihre Trainingsanwendung, die in das ML-Framework Ihrer Wahl implementiert ist, bildet den Kern des Trainingsprozesses.

  1. Erstellen Sie mithilfe des ML-Frameworks Ihrer Wahl eine Anwendung, die Ihr Modell trainiert.

  2. Entscheiden Sie sich, ob Sie einen benutzerdefinierten Container verwenden möchten. Möglicherweise gibt es einen vordefinierten Container, der Ihre Abhängigkeiten bereits unterstützt. Andernfalls müssen Sie einen benutzerdefinierten Container für Ihren Trainingsjob erstellen. In Ihrem benutzerdefinierten Container installieren Sie Ihre Trainingsanwendung und alle zugehörigen Abhängigkeiten vorab in einem Image, das zum Ausführen Ihres Trainingsjobs verwendet wird.

  3. Speichern Sie Ihre Trainings- und Verifizierungsdaten in einer Quelle, auf die Vertex AI zugreifen kann. Speichern Sie Ihre Daten in Cloud Storage, Bigtable oder einem anderen Google Cloud-Speicherdienst im selben Google Cloud-Projekt und in derselben Region, die Sie für Vertex AI verwenden, um die Authentifizierung zu vereinfachen und die Latenz zu verringern. Weitere Informationen dazu, wie Vertex AI Ihre Daten laden kann.

  4. Wenn Ihre Anwendung für die Ausführung bereit ist, erstellen Sie das Docker-Image und verschieben Sie es in Artifact Registry oder Docker Hub. Achten Sie dabei darauf, dass Vertex AI auf Ihre Registry zugreifen kann.

  5. Senden Sie Ihren benutzerdefinierten Trainingsjob durch Erstellen eines benutzerdefinierten Jobs oder Erstellen einer benutzerdefinierten Trainingspipeline.

  6. Vertex AI richtet Ressourcen für Ihren Job ein. Er weist gemäß Jobkonfiguration mindestens eine virtuelle Maschine (auch als Trainingsinstanz bezeichnet) zu. Richten Sie eine Trainingsinstanz ein, indem Sie den benutzerdefinierten Container verwenden, den Sie als Teil des WorkerPoolSpec-Objekts angegeben haben als Sie Ihren benutzerdefinierten Trainingsjob sendeten.

  7. Vertex AI führt Ihr Docker-Image aus und gibt dabei alle Befehlszeilenargumente weiter, die Sie beim Erstellen des Trainingsjobs angegeben haben.

  8. Wenn der Trainingsjob erfolgreich abgeschlossen ist oder ein nicht behebbarer Fehler auftritt, stoppt Vertex AI  alle Jobvorgänge und bereinigt die Ressourcen.

Vorteile von benutzerdefinierten Containern

Mit benutzerdefinierten Containern können Sie alle für die Anwendung erforderlichen Abhängigkeiten angeben und vorinstallieren.

  • Schnellerer Programmstart: Wenn Sie einen benutzerdefinierten Container mit vorinstallierten Abhängigkeiten verwenden, sparen Sie die Zeit, die Ihre Trainingsanwendung andernfalls für die Installation von Abhängigkeiten beim Start benötigt.
  • Verwendung eines ML-Frameworks Ihrer Wahl: Wenn Sie keinen vorgefertigten Vertex AI-Container mit dem ML-Framework finden, das Sie verwenden möchten, können Sie einen benutzerdefinierten Container mit dem gewünschten Framework erstellen und damit Jobs auf Vertex AI ausführen. Sie können z. B. einen Kundencontainer zum Trainieren mit PyTorch verwenden.
  • Erweiterte Unterstützung für verteiltes Training: Mit benutzerdefinierten Containern können Sie verteiltes Training mit einem beliebigen ML-Framework durchführen.
  • Verwendung der neuesten Version: Sie können auch den neuesten Build oder die neueste Nebenversion eines ML-Frameworks verwenden. So können Sie beispielsweise einen benutzerdefinierten Container erstellen, um ihn mit tf-nightly zu trainieren.

Hyperparameter-Abstimmung mit benutzerdefinierten Containern

Geben Sie zum Durchführen der Hyperparameter-Abstimmung in Vertex AI Zielmesswerte an und legen Sie fest, ob jeder Messwert minimiert oder maximiert werden soll. Sie möchten beispielsweise die Genauigkeit Ihres Modells maximieren oder den Modellverlust minimieren. Außerdem listen Sie die Hyperparameter auf, die Sie optimieren möchten, sowie den Bereich der zulässigen Werte für jeden Hyperparameter. Vertex AI führt mehrere Versuche mit Ihrer Trainingsanwendung durch, verfolgt die Hyperparameter und passt sie nach jedem Versuch an. Wenn der Job für die Hyperparameter-Abstimmung abgeschlossen ist, gibt Vertex AI die Werte für die effektivste Konfiguration der Hyperparameter und eine Zusammenfassung für jeden Versuch zurück.

Für die Hyperparameter-Abstimmung mit benutzerdefinierten Containern müssen Sie die folgenden Anpassungen vornehmen:

  • Im Dockerfile: Installieren Sie cloudml-hypertune.
  • Im Trainingscode:
    • Verwenden Sie cloudml-hypertune und rufen Sie die zugehörige Hilfsfunktion report_hyperparameter_tuning_metric auf, um die Ergebnisse der einzelnen Tests zu melden.
    • Fügen Sie für jeden Hyperparameter Befehlszeilenargumente hinzu und verwenden Sie zum Parsen von Argumenten einen Argumentparser wie z. B. argparse.

Informationen zum Konfigurieren eines Hyperparameter-Abstimmungsjobs, der benutzerdefinierte Container verwendet oder zur Funktionsweise der Hyperparameter-Abstimmung in Vertex AI

GPUs in benutzerdefinierten Containern

Für das Training mit GPUs muss Ihr benutzerdefinierter Container einige spezielle Anforderungen erfüllen. Sie müssen ein anderes Docker-Image erstellen als für das Training mit CPUs.

  • Installieren Sie das CUDA-Toolkit und cuDNN in Ihrem Docker-Image. Zum Erstellen eines benutzerdefinierten Containers mit Unterstützung für GPUs wird die Verwendung des nvidia/cuda-Images als Basis-Image für den benutzerdefinierten Container empfohlen. Im Container-Image nvidia/cuda sind übereinstimmende Versionen des CUDA-Toolkits und von cuDNN bereits vorinstalliert. Außerdem können Sie die zugehörigen Umgebungsvariablen korrekt einrichten.
  • Installieren Sie Ihre Trainingsanwendung zusammen mit dem erforderlichen ML-Framework und anderen Abhängigkeiten im Docker-Image.

Sehen Sie sich ein Beispiel für ein Dockerfile zum Training mit GPUs an.

Nächste Schritte