Mit AI Platform Training können Sie Ihre TensorFlow-, scikit-learn- und XGBoost-Trainingsanwendungen in der Cloud ausführen. AI Platform Training stellt in den Laufzeitversionen die Abhängigkeiten zur Verfügung, die zum Trainieren von Modellen für maschinelles Lernen mithilfe dieser gehosteten Frameworks erforderlich sind. Außerdem haben Sie so die Möglichkeit, mithilfe von benutzerdefinierten Containern Trainingsjobs mit anderen ML-Frameworks auszuführen. Auf dieser Seite werden die wichtigsten Konzepte von AI Platform Training beschrieben. Wenn Sie lieber direkt in den Trainingsprozess einsteigen möchten, sehen Sie sich an, wie Sie einen Trainingsjob starten.
So funktioniert das Training
Mit AI Platform Training wird der Trainingsjob auf Rechenressourcen in der Cloud ausgeführt. Sie können einen integrierten Algorithmus (Beta) mit Ihrem Dataset trainieren, ohne eine Trainingsanwendung schreiben zu müssen. Wenn die integrierten Algorithmen für Ihren Anwendungsfall nicht geeignet sind, können Sie eine Trainingsanwendung zur Ausführung in AI Platform Training erstellen.
Hier ein Überblick über die Vorgehensweise bei Verwendung einer eigenen Trainingsanwendung:
- Sie erstellen eine Python-Anwendung, die Ihr Modell trainiert. Sie können sie dabei wie für eine lokale Ausführung in Ihrer Entwicklungsumgebung entwickeln.
- Sie laden die Trainings- und Verifizierungsdaten in eine Quelle hoch, auf die AI Platform Training zugreifen kann. Dies bedeutet in der Regel, dass Sie die Daten in Cloud Storage, Bigtable oder einem anderen Google Cloud-Speicherdienst ablegen, der mit dem Google Cloud-Projekt verknüpft ist, das Sie für AI Platform Training verwenden.
- Wenn die Anwendung ausführungsbereit ist, müssen Sie ein Paket dafür erstellen und in einen Cloud Storage-Bucket übertragen, auf den Ihr Projekt zugreifen kann. Dies geschieht automatisch, wenn Sie die Google Cloud CLI verwenden, um einen Trainingsjob auszuführen.
- Der AI Platform Training-Trainingsdienst richtet Ressourcen für Ihren Job ein. Er weist gemäß Jobkonfiguration mindestens eine virtuelle Maschine (auch als Trainingsinstanz bezeichnet) zu. So richten Sie jeweils eine Trainingsinstanz ein:
- Maschinenstandard-Image für die Version von AI Platform Training anwenden, die der Job verwendet
- Anwendungspaket mit
pip
laden und installieren - Installation etwaiger zusätzlicher Pakete, die Sie als Abhängigkeiten angeben
- Der Trainingsdienst führt die Anwendung aus und übergibt die Befehlszeilenargumente, die Sie beim Erstellen des Trainingsjobs angegeben haben.
- Informationen zum ausgeführten Job können Sie auf folgende Arten abrufen:
- In Cloud Logging.
- Durch Anfordern von Jobdetails oder Ausführen von Logstreamings mit dem
gcloud
-Befehlszeilentool - Durch programmgesteuerte Statusanfragen an den Trainingsdienst
- Wenn der Trainingsjob erfolgreich abgeschlossen ist oder ein nicht behebbarer Fehler auftritt, stoppt AI Platform Training alle Jobprozesse und bereinigt die Ressourcen.
Typische Anwendung für maschinelles Lernen
Der Trainingsdienst von AI Platform Training ist darauf ausgelegt, möglichst wenig Einfluss auf Ihre Anwendung zu nehmen. Damit können Sie sich auf den Modellcode konzentrieren.
Die meisten Anwendungen für maschinelles Lernen:
- ermöglichen den Zugriff auf Trainings- und Evaluationsdaten,
- verarbeiten Dateninstanzen,
- verwenden Evaluierungsdaten, um die Genauigkeit des Modells zu testen (wie oft es den richtigen Wert vorhersagt),
- (für TensorFlow-Trainingsanwendungen) ermöglichen die Ausgabe von Prüfpunkten in Intervallen, um einen Snapshot des Modellfortschritts zu erhalten,
- bieten eine Möglichkeit zum Export des trainierten Modells, wenn die Anwendung fertig ist.
Struktur für verteiltes Training
Wenn Sie einen verteilten TensorFlow-Job mit AI Platform Training ausführen, legen Sie mehrere Maschinen (Knoten) in einem Trainingscluster fest. Der Trainingsdienst weist die Ressourcen für die angegebenen Maschinentypen zu. Der aktuell auf einem Knoten ausgeführte Job wird Replikat genannt. Gemäß dem verteilten TensorFlow-Modell wird jedem Replikat im Trainingscluster eine einzige Rolle oder Aufgabe im verteilten Training zugewiesen:
Master: Es wird genau ein Replikat als Master festgelegt. Diese Aufgabe verwaltet die anderen Replikate und meldet den Gesamtstatus des Jobs. Der Trainingsdienst wird so lange ausgeführt, bis der Job erfolgreich abgeschlossen wurde oder ein nicht behebbarer Fehler auftritt. Beim verteilten Training wird der Gesamtstatus des Jobs vom Status des Master-Replikats abgeleitet.
Wenn Sie einen Job mit einem einzigen Prozess ausführen, ist das einzelne Replikat gleichzeitig das Master-Replikat für den Job.
Worker: Ein oder mehrere Replikate können als Worker festgelegt werden. Diese Replikate übernehmen jeweils einen Teil der Arbeit, wie Sie dies in der Jobkonfiguration festgelegt haben.
Parameterserver: Ein oder mehrere Replikate können als Parameterserver festgelegt werden. Diese Replikate koordinieren den gemeinsamen Modellstatus unter den Workern.
Strategien für verteiltes Training
Für das Trainieren eines Modells mit mehreren Knoten gibt es drei grundlegende Strategien:
- Datenparalleles Training mit synchronen Aktualisierungen.
- Datenparalleles Training mit asynchronen Aktualisierungen.
- Modellparalleles Training.
Da Sie die datenparallele Strategie unabhängig von der Modellstruktur anwenden können, ist diese ein guter Ausgangspunkt für die Anwendung der verteilten Trainingsmethode auf Ihr benutzerdefiniertes Modell. Bei einem datenparallelen Training wird das gesamte Modell von allen Worker-Knoten genutzt. Jeder Knoten berechnet Gradientenvektoren unabhängig vom Trainings-Dataset in der gleichen Art wie die Minibatchverarbeitung. Die berechneten Gradientenvektoren werden im Parameterserverknoten erfasst und die Modellparameter mit den zusammengefassten Gradientenvektoren aktualisiert. Wenn Sie 10.000 Batches zwischen zehn Worker-Knoten verteilen, verarbeitet jeder Knoten etwa 1.000 Batches.
Das datenparallele Training kann mit synchronen oder asynchronen Aktualisierungen durchgeführt werden. Bei asynchronen Aktualisierungen wendet der Parameterserver jeden Gradientenvektor direkt nach dem Erhalt von einem der Worker-Knoten separat an, wie im folgenden Diagramm gezeigt:
Informationen zum datenparallelen verteilten Training erhalten Sie unter MultiWorkerMirroredStrategy
und ParameterServerStrategy
von TensorFlow.
Lesen Sie danach, wie Sie in AI Platform Training verteiltes Training konfigurieren.
Weitere Informationen zum modellparallelen Training finden Sie unter Mesh TensorFlow.
Anwendungspaket erstellen
Bevor Sie Ihre Trainingsanwendung auf AI Platform Training ausführen können, müssen Sie ein Paket für Ihre Anwendung und deren Abhängigkeiten erstellen. Anschließend müssen Sie dieses Paket in einen Cloud Storage-Bucket hochladen, auf den Ihr Google Cloud-Projekt zugreifen kann.
Die Google Cloud CLI automatisiert einen Großteil des Prozesses. Genauer gesagt können Sie mit gcloud ai-platform jobs submit training
Ihr Anwendungspaket hochladen und Ihren Trainingsjob senden.
Weitere Informationen finden Sie unter Paket für eine Trainingsanwendung erstellen.
Trainingsjobs senden
AI Platform Training bietet Modelltraining als asynchronen Batchdienst.
Zum Senden eines Trainingsjobs führen Sie gcloud ai-platform jobs submit training
über die Befehlszeile aus oder senden eine Anfrage an die API unter projects.jobs.create.
Hier erfahren Sie, wie Sie einen Trainingsjob starten.
Job-ID
Für den Namen eines Trainingsjobs ist Folgendes zu beachten:
- Er darf im Google Cloud-Projekt nur einmal vorkommen.
- Er darf nur Klein- und Großbuchstaben, Ziffern und Unterstriche enthalten.
- Er muss mit einem Buchstaben beginnen.
- Er darf nicht länger als 128 Zeichen sein.
Darüber hinaus können Sie eigene Konventionen für die Jobnamen verwenden. Wenn Sie nicht viele Jobs ausführen, ist der von Ihnen gewählte Name möglicherweise nicht unbedingt entscheidend. Werden jedoch viele Jobs ausgeführt, müssen Sie Job-IDs unter Umständen in umfangreichen Listen finden können. In diesem Fall empfiehlt sich die Wahl von Job-IDs, die leicht voneinander zu unterscheiden sind.
Eine gängige Methode besteht darin, einen Basisnamen für alle mit einem bestimmten Modell verknüpften Jobs festzulegen und dann einen Datums-/Uhrzeitstring anzuhängen. Diese Konvention ermöglicht eine einfache Sortierung von Joblisten anhand des Namens, da alle Jobs für ein Modell in aufsteigender Reihenfolge gruppiert werden.
Skalierungsstufen
Vor dem Ausführen eines Trainingsjobs in AI Platform Training müssen Sie die Anzahl und den Typ der erforderlichen Maschinen angeben. Zur Vereinfachung können Sie aus einer Reihe von vordefinierten Clusterspezifikationen, den sogenannten Skalierungsstufen, auswählen. Alternativ können Sie eine benutzerdefinierte Stufe auswählen und die Maschinentypen selbst angeben.
Um eine Skalierungsstufe anzugeben, fügen Sie sie dem Objekt "TrainingInput" in der Jobkonfiguration hinzu. Wenn Sie mit dem gcloud
-Befehl den Trainingsjob senden, können Sie dieselben IDs verwenden.
Weitere detaillierte Informationen zu Skalierungsstufen und Maschinentypen.
Hyperparameter-Abstimmung
Wenn Sie die Hyperparameter-Abstimmung nutzen möchten, müssen Sie beim Erstellen des Trainingsjobs Konfigurationsdetails angeben. Weitere Informationen finden Sie unter Hyperparameter-Abstimmung und Hyperparameter-Abstimmung verwenden.
Regionen und Zonen
Google Cloud verwendet in Zonen unterteilte Regionen, um den geografischen Standort von physischen Rechenressourcen zu definieren. Wenn Sie einen Job in AI Platform Training ausführen, geben Sie die Region an, in der er ausgeführt werden soll.
Wenn Sie das Trainings-Dataset in Cloud Storage speichern, sollten Sie den Trainingsjob in derselben Region ausführen wie den Cloud Storage-Bucket, den Sie für die Trainingsdaten verwenden. Falls Sie den Job in einer anderen Region als der Region des Daten-Buckets ausführen müssen, kann der Job mehr Zeit in Anspruch nehmen.
Informationen zu den verfügbaren Regionen für AI Platform Training-Dienste, einschließlich Modelltraining und Online-/Batchvorhersage, finden Sie unter Regionen.
"job-dir" als gemeinsames Ausgabeverzeichnis verwenden
Sie können ein Ausgabeverzeichnis für Ihren Job angeben, indem Sie beim Konfigurieren des Jobs ein Jobverzeichnis festlegen. Wenn Sie den Job senden, führt AI Platform Training folgende Schritte aus:
- Prüft das Verzeichnis, sodass Sie eventuelle Probleme vor dem Ausführen des Jobs beheben können.
- Übergibt den Pfad in Form des Befehlszeilenarguments
--job-dir
an Ihre Anwendung.
Sie müssen das Argument --job-dir
in Ihrer Anwendung berücksichtigen.
Erfassen Sie den Argumentwert, wenn Sie die anderen Parameter parsen, und verwenden Sie ihn, wenn Sie die Ausgabe der Anwendung speichern. Weitere Informationen finden Sie in der Anleitung zum Starten eines Trainingsjobs.
Laufzeitversion
Geben Sie eine unterstützte Laufzeitversion von AI Platform Training an, die für Ihren Trainingsjob verwendet werden soll, um für das Training ein von AI Platform Training gehostetes Framework für maschinelles Lernen zu verwenden. Die Laufzeitversion gibt die Versionen von TensorFlow, scikit-learn, XGBoost und anderen Python-Paketen vor, die auf Ihren zugeordneten Trainingsinstanzen installiert werden. Geben Sie eine Version an, die Ihnen die erforderliche Funktionalität bietet. Sorgen Sie dafür, dass Sie jeweils dieselbe Laufzeitversion verwenden, wenn Sie den Trainingsjob sowohl lokal als auch in der Cloud ausführen.
Eingabedaten
Die Daten, die Sie in Ihrem Trainingsjob verwenden können, müssen für die Ausführung in AI Platform Training den folgenden Regeln entsprechen:
- Sie müssen in einem Format vorliegen, das vom Trainingscode eingelesen werden kann.
- Sie müssen sich an einem Speicherort befinden, auf den Ihr Code Zugriff hat. Dies bedeutet in der Regel, dass sie in einem der Google Cloud-Speicher- oder Big Data-Dienste gespeichert werden sollten.
Ausgabedaten
Anwendungen geben üblicherweise Daten aus, z. B. Prüfpunkte während des Trainings oder ein gespeichertes Modell nach Trainingsabschluss. Bei Bedarf können Sie von der Anwendung auch andere Daten ausgeben lassen. Am einfachsten ist es, wenn Sie die Ausgabedateien in einem Cloud Storage-Bucket im selben Google Cloud-Projekt wie Ihren Trainingsjob speichern.
VM-Neustart-resistente Trainingsjobs erstellen
Google Cloud-VMs werden gelegentlich neu gestartet. Speichern Sie Modellprüfpunkte regelmäßig und konfigurieren Sie den Job so, dass der letzte Prüfpunkt wiederhergestellt wird. Dadurch sorgen Sie dafür, dass Ihre Trainingsjobs diesen Neustarts gegenüber resistent sind.
In der Regel sollten Modellprüfpunkte in dem Cloud Storage-Pfad gespeichert werden, den Sie mit dem Argument --job-dir
im Befehl gcloud ai-platform jobs submit
training
angegeben haben.
Die TensorFlow Estimator API implementiert die Prüfpunkt-Funktionalität für Sie. Wenn Ihr Modell in einen Estimator eingebettet ist, müssen Sie sich keine Gedanken über Neustartereignisse auf den VMs machen.
Wenn Sie Ihr Modell nicht in einen TensorFlow Estimator einbinden können, schreiben Sie eine Funktion zum Speichern und Wiederherstellen von Prüfpunkten in Ihren Trainingscode. TensorFlow stellt folgende nützliche Ressourcen im Modul tf.train zur Verfügung:
Training mit GPUs
Sie können Trainingsjobs in AI Platform Training auch mit Grafikprozessoren (Graphics Processing Units, GPUs) ausführen. GPUs sind auf rechenintensive Vorgänge mit hoher Geschwindigkeit ausgelegt. Ihre Verwendung kann für bestimmte Vorgänge mit Tensordaten effektiver als das Hinzufügen weiterer Maschinen mit einem oder mehreren CPU-Kernen sein.
Der Trainingsdienst von AI Platform Training bietet keine spezielle Oberfläche für die Arbeit mit GPUs. Sie können GPU-fähige Maschinen für die Ausführung Ihres Jobs angeben und der Dienst übernimmt die Zuordnung für Sie. In einem TensorFlow-Trainingsjob können Sie beispielsweise den GPUs in Ihrem Code TensorFlow-Operationen zuweisen. Wenn Sie einen Maschinentyp mit GPU-Zugriff für einen Aufgabentyp angeben, wird jede Instanz, die diesem Aufgabentyp zugeordnet ist, (wie immer) identisch konfiguriert: Der Dienst führt ein einzelnes Replikat des Codes auf jeder Maschine aus.
Wenn Sie das Training mit einem anderen Framework für maschinelles Lernen unter Verwendung eines benutzerdefinierten Containers durchführen, bietet dieses Framework möglicherweise eine andere Schnittstelle für die Arbeit mit GPUs.
Einige Modelle profitieren nicht von der Ausführung auf GPUs. GPUs empfehlen sich für große, komplexe Modelle mit vielen mathematischen Operationen. Und selbst in diesem Fall sollten Sie zuerst testen, ob die Vorteile von GPUs überwiegen, indem Sie ein Training für eine kleine Stichprobe Ihrer Daten ausführen.
Hier erfahren Sie, wie Sie GPUs für Trainingsjobs verwenden.
Training mit TPUs
Sie können Ihre Trainingsjobs in AI Platform Training mit Cloud TPU ausführen.
Weitere Informationen zum Verwenden von TPUs für Trainingsjobs