AI Platform Training bietet Modelltraining als asynchronen Batchdienst.
Auf dieser Seite wird beschrieben, wie Sie einen Trainingsjob konfigurieren und senden. Dazu führen Sie gcloud ai-platform jobs submit training
über die Befehlszeile aus oder senden eine Anfrage an die API unter projects.jobs.create.
Hinweis
Bevor Sie einen Trainingsjob senden können, müssen Sie ein Anwendungspaket erstellen und es zusammen mit allen speziellen Abhängigkeiten in einen Cloud Storage-Bucket hochladen. Hinweis: Wenn Sie den Job über die Google Cloud CLI senden, können Sie im selben Schritt ein Anwendungspaket erstellen und den Job senden.
Job konfigurieren
Senden Sie die Parameter an den Trainingsdienst, indem Sie die Mitglieder der Ressource Job
festlegen, die die Elemente in der Ressource TrainingInput
enthalten.
Wenn Sie Trainingsjobs über die Google Cloud CLI senden, haben Sie folgende Möglichkeiten:
- Geben Sie die gebräuchlichsten Trainingsparameter als Flags des Befehls
gcloud ai-platform jobs submit training
an. - Übergeben Sie übrigen Parameter in einer YAML-Konfigurationsdatei, die üblicherweise den Namen
config.yaml
hat. Die Konfigurationsdatei folgt der Struktur der JSON-Darstellung der RessourceJob
. Sie übergeben den Pfad Ihrer Konfigurationsdatei im Flag--config
des Befehlsgcloud ai-platform jobs submit training
. Wenn der Pfad zu Ihrer Konfigurationsdatei alsoconfig.yaml
lautet, müssen Sie--config=config.yaml
festlegen.
Jobkonfigurationsdaten zusammenstellen
Mit den folgenden Parametern definieren Sie Ihren Job.
- Jobname (
jobId
) - Der für den Job zu verwendende, mit einem Buchstaben beginnende Name, bestehend aus Groß- und Kleinbuchstaben, Ziffern und Unterstrichen.
- Clusterkonfiguration (
scaleTier
) - Eine Skalierungsstufe, die den Typ von Verarbeitungscluster angibt, auf dem der Job ausgeführt wird. Dabei kann es sich um die Skalierungsstufe
CUSTOM
handeln, bei der Sie außerdem die Anzahl und Typen der zu verwendenden Maschinen explizit angeben. - Laufwerkkonfiguration (
diskConfig
) - Konfiguration des Bootlaufwerks für jede Trainings-VM. Dieses Feld ist optional. Standardmäßig wird jede VM mit einem Bootlaufwerk mit 100 GB
pd-ssd
ausgeführt. Wenn Sie dieses Feld angeben, können zusätzliche Laufwerkgebühren anfallen. - Trainingsanwendungspaket (
packageUris
) - Eine Trainingsanwendung, die in Form eines Pakets an einem Cloud Storage-Speicherort zur Verfügung gestellt wurde. Wenn Sie die Google Cloud CLI verwenden, ist das Erstellen eines Anwendungspakets weitgehend automatisiert. Weitere Informationen finden Sie in der Anleitung Anwendungspaket erstellen.
- Modulname (
pythonModule
) - Der Name des Hauptmoduls in Ihrem Paket. Das Hauptmodul ist die Python-Datei, die Sie zum Starten der Anwendung aufrufen. Wenn Sie den Job mit dem Befehl
gcloud
senden, geben Sie den Namen des Hauptmoduls im Flag--module-name
an. Weitere Informationen finden Sie in der Anleitung Anwendungspaket erstellen. - Region (
region
) - Die Compute Engine-Region, in der Sie den Job ausführen möchten. Sie sollten den Trainingsjob in der Region ausführen, in der sich auch der Cloud Storage-Bucket befindet, in dem die Trainingsdaten gespeichert sind. Hier finden Sie die Regionen, in denen die Dienste von AI Platform Training verfügbar sind.
- Jobverzeichnis (
jobDir
) - Der Pfad zum Cloud Storage-Speicherort, der für die Jobausgabe verwendet werden soll.
Die meisten Trainingsanwendungen speichern im Verlauf des Trainings Prüfpunkte und speichern das trainierte Modell nach Abschluss des Jobs in eine Datei. Für das Speichern der Datei benötigen Sie einen Cloud Storage-Standort. Ihr Google Cloud-Projekt muss Schreibzugriff auf diesen Bucket haben. Der Trainingsdienst übergibt dann den Pfad des angegebenen Jobverzeichnisses automatisch als Befehlszeilenargument mit dem Namen
job_dir
an Ihre Trainingsanwendung. Sie können dieses Argument mit den anderen Argumenten Ihrer Anwendung parsen und in Ihrem Code verwenden. Ein Jobverzeichnis bietet den Vorteil, dass der Trainingsdienst das Verzeichnis vor dem Start Ihrer Anwendung validiert. - Laufzeitversion (
runtimeVersion
) - Die AI Platform Training-Laufzeitversion, die für den Job verwendet werden soll.
- Python-Version (
pythonVersion
) - Die Python-Version, die für den Job verwendet werden soll. Python 3.5 ist in den Laufzeitversionen 1.13 bis 1.14 verfügbar. Python 3.7 ist in der Laufzeitversion 1.15 und höher verfügbar.
- Maximale Wartezeit (
scheduling.maxWaitTime
) - Maximale Wartezeit in Sekunden mit dem Suffix
s
(z. B.3600s
), der festlegt, wie lange Ihr Job in den StatusQUEUED
undPREPARING
bleibt. AI Platform Training startet Ihren Job nicht immer sofort, da Ressourcenbeschränkungen auftreten. Geben Sie dieses Feld an, wenn Sie nicht so lange warten möchten, bis die Ausführung des Jobs abgeschlossen ist. Die begrenzte Dauer beginnt, wenn Sie den Job erstellen. Wenn der Job bis zum Ende dieses Zeitraums noch nicht den StatusRUNNING
hat, bricht AI Platform Training den Job ab. Dieses Feld ist optional und hat standardmäßig kein Limit. Wenn Sie dieses Feld angeben, müssen Sie für den Wert mindestens auf1800s
(30 Minuten) festlegen. - Maximale Laufzeit (
scheduling.maxRunningTime
) - Maximale Dauer in Sekunden mit dem Suffix
s
(z. B.7200s
) für Ihren Trainingsjob. Die begrenzte Dauer beginnt, wenn der Job in den StatusRUNNING
wechselt. Wenn der Job nach Ablauf dieser Zeit noch ausgeführt wird, bricht AI Platform Training den Job ab. Dieses Feld ist optional und standardmäßig auf sieben Tage eingestellt (604800s
). serviceAccount
Dienstkonto- Die E-Mail-Adresse eines Dienstkontos, das AI Platform Training beim Ausführen Ihrer Trainingsanwendung verwenden soll. Dadurch kann Ihre Trainingsanwendung auf Google Cloud-Ressourcen zugreifen, ohne direkten Zugriff auf den AI Platform-Dienst-Agent Ihres Projekts zu gewähren. Dieses Feld ist optional. Weitere Informationen finden Sie unter Anforderungen an benutzerdefinierte Dienstkonten.
Konfigurationsparameter formatieren
Wie Sie die Konfigurationsdetails angeben, hängt davon ab, wie der Trainingsjob gestartet wird:
gcloud
Geben Sie im Befehl gcloud ai-platform jobs submit training
die Jobkonfigurationsdetails an.
Dafür haben Sie die beiden folgenden Möglichkeiten:
- Mit Befehlszeilen-Flags.
- In einer YAML-Datei, die die Ressource
Job
darstellt. Dieser Datei können Sie einen beliebigen Namen geben. Der Name lautet üblicherweiseconfig.yaml
.
Selbst wenn Sie eine YAML-Datei verwenden, müssen bestimmte Angaben als Befehlszeilen-Flags bereitgestellt werden. Beispielsweise müssen Sie das Flag --module-name
und entweder --package-path
oder --packages
angeben. Wenn Sie --package-path
verwenden, müssen Sie auch --job-dir
oder --staging-bucket
anfügen.
Außerdem müssen Sie entweder das Flag --region
angeben oder eine Standardregion für den gcloud
-Client festlegen.
Diese Optionen – und alle anderen, die Sie als Befehlszeilen-Flags angeben – überschreiben die Werte für diese Optionen in der Konfigurationsdatei.
Beispiel 1: In diesem Beispiel wählen Sie einen vorkonfigurierten Maschinencluster aus und geben beim Senden des Jobs alle erforderlichen Details als Befehlszeilen-Flags an. Es ist keine Konfiguration notwendig. Weitere Informationen finden Sie im nächsten Abschnitt Job senden.
Beispiel 2: Im folgenden Beispiel wird der Inhalt der Konfigurationsdatei für einen Job mit einem benutzerdefinierten Verarbeitungscluster gezeigt. Die Konfigurationsdatei enthält einige, aber nicht alle Konfigurationsdetails und setzt voraus, dass Sie beim Senden des Jobs alle erforderlichen Details als Befehlszeilen-Flags angeben.
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
runtimeVersion: '2.11'
pythonVersion: '3.7'
scheduling:
maxWaitTime: 3600s
maxRunningTime: 7200s
Im vorherigen Beispiel ist die Python-Version 3.7 angegeben, die in AI Platform Training ab Laufzeitversion 1.15 verfügbar ist. Es werden auch virtuelle Maschinen für Worker und Parameterserver konfiguriert. Konfigurieren Sie diese Maschinen nur, wenn Sie verteiltes Training mit TensorFlow oder benutzerdefinierten Containern durchführen. Weitere Informationen finden Sie unter Maschinentypen.
Python
Wenn Sie einen Trainingsjob mit der Google API-Clientbibliothek für Python senden, geben Sie die Konfiguration in einem Wörterbuch an, das dieselbe Struktur wie die Ressource Job
hat. Das Wörterbuch umfasst dann zwei Schlüssel: jobId
und trainingInput
, wobei die jeweiligen Daten der Name des Jobs und ein zweites Wörterbuch mit Schlüsseln für die Objekte in der Ressource TrainingInput
sind.
Das folgende Beispiel zeigt, wie Sie eine Darstellung von "Job" für einen Job mit einem benutzerdefinierten Verarbeitungscluster erstellen.
training_inputs = {
'scaleTier': 'CUSTOM',
'masterType': 'complex_model_m',
'workerType': 'complex_model_m',
'parameterServerType': 'large_model',
'workerCount': 9,
'parameterServerCount': 3,
'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
'pythonModule': 'trainer.task',
'args': ['--arg1', 'value1', '--arg2', 'value2'],
'region': 'us-central1',
'jobDir': 'gs://my/training/job/directory',
'runtimeVersion': '2.11',
'pythonVersion': '3.7',
'scheduling': {'maxWaitTime': '3600s', 'maxRunningTime': '7200s'},
}
job_spec = {'jobId': 'my_job_name', 'trainingInput': training_inputs}
training_inputs
und job_spec
sind willkürliche Kennzeichnungen. Sie können diesen Wörterbüchern beliebige Namen geben. Allerdings müssen die Wörterbuchschlüssel genauso wie oben gezeigt benannt werden, da sie den Namen in den Ressourcen Job
und TrainingInput
entsprechen müssen.
Im vorherigen Beispiel ist die Python-Version 3.7 angegeben, die in AI Platform Training ab Laufzeitversion 1.15 verfügbar ist. Es werden auch virtuelle Maschinen für Worker und Parameterserver konfiguriert. Konfigurieren Sie diese Maschinen nur, wenn Sie verteiltes Training mit TensorFlow oder benutzerdefinierten Containern durchführen. Weitere Informationen finden Sie unter Maschinentypen.
Job senden
Vor dem Senden eines Trainingsjobs geben Sie zwei Gruppen von Flags an:
- Parameter für die Jobkonfiguration. AI Platform Training benötigt diese Werte, um Ressourcen in der Cloud einzurichten und Ihre Anwendung auf jedem Knoten im Verarbeitungscluster bereitzustellen.
- Nutzerargumente oder Anwendungsparameter. AI Platform Training übergibt den Wert dieser Flags an die Anwendung.
Job erstellen:
gcloud
Senden Sie einen Trainingsjob mithilfe des Befehls gcloud ai-platform jobs submit training
.
Zuerst einmal ist es sinnvoll, einige Umgebungsvariablen zu definieren, in denen die Konfigurationsdetails enthalten sind. Beim folgenden Code werden zum Erstellen des Jobnamens das Datum und die Uhrzeit an den Modellnamen angehängt:
PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MODULE_NAME="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
REGION="us-east1"
RUNTIME_VERSION="2.11"
Die folgende Jobübermittlung entspricht der Konfiguration in Beispiel 1 oben. Dort wählen Sie eine vorkonfigurierte Skalierungsstufe (basic
) aus und stellen alle Konfigurationsdetails über Befehlszeilen-Flags bereit. Die Datei config.yaml
wird nicht benötigt:
gcloud ai-platform jobs submit training $JOB_NAME \
--scale-tier basic \
--package-path $PACKAGE_PATH \
--module-name $MODULE_NAME \
--job-dir $JOB_DIR \
--region $REGION \
-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value
Die folgende Jobübermittlung entspricht der Konfiguration in Beispiel 2 oben. Dabei befindet sich nur ein Teil der Konfiguration in der Datei und Sie stellen die anderen Details über Befehlszeilen-Flags bereit.
gcloud ai-platform jobs submit training $JOB_NAME \
--package-path $PACKAGE_PATH \
--module-name $MODULE_NAME \
--job-dir $JOB_DIR \
--region $REGION \
--config config.yaml \
-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value
Hinweise:
- Wenn Sie eine Option sowohl in der Konfigurationsdatei (
config.yaml
) als auch als Befehlszeilen-Flag angeben, wird der Wert in der Konfigurationsdatei durch den Wert in der Befehlszeile überschrieben. - Das leere Flag
--
markiert das Ende dergcloud
-spezifischen Flags und den Anfang derUSER_ARGS
, die Sie an die Anwendung übergeben möchten. - Spezifische Flags von AI Platform Training, wie
--module-name
,--runtime-version
und--job-dir
, müssen vor dem leeren Flag--
stehen. Der AI Platform Training-Dienst interpretiert diese Flags. - Das Flag
--job-dir
muss, falls es angegeben wird, vor dem leeren Flag--
stehen, weil AI Platform Training--job-dir
verwendet, um den Pfad zu validieren. - Wenn das Flag
--job-dir
angegeben wird, muss es auch von der Anwendung verarbeitet werden. Das Flag--job-dir
steht zwar vor dem leeren Flag--
, es wird aber trotzdem als Befehlszeilen-Flag an die Anwendung übergeben. - Sie können beliebig viele
USER_ARGS
definieren. AI Platform Training übergibt--user_first_arg
,--user_second_arg
usw. an Ihre Anwendung.
Python
Mit der Google API-Clientbibliothek für Java können Sie die AI Platform Training and Prediction API aufrufen, ohne manuell HTTP-Anfragen erstellen zu müssen. Bevor Sie das folgende Codebeispiel ausführen, müssen Sie die Authentifizierung einrichten.
Speichern Sie die Projekt-ID in dem von den APIs benötigten Format ('projects/_projectname'):
project_name = 'my_project_name' project_id = 'projects/{}'.format(project_name)
Rufen Sie eine Python-Darstellung der AI Platform Training-Dienste ab:
cloudml = discovery.build('ml', 'v1')
Erstellen und senden Sie die Anfrage. Beachten Sie, dass
job_spec
im vorherigen Schritt erstellt wurde, in dem Sie die Konfigurationsparameter formatiert haben.request = cloudml.projects().jobs().create(body=job_spec, parent=project_id) response = request.execute()
Fangen Sie etwaige HTTP-Fehler ab. Die einfachste Möglichkeit besteht darin, den vorherigen Befehl in einen
try
-Block zu setzen:try: response = request.execute() # You can put your code for handling success (if any) here. except errors.HttpError, err: # Do whatever error response is appropriate for your application. # For this example, just send some text to the logs. # You need to import logging for this to work. logging.error('There was an error creating the training job.' ' Check the details:') logging.error(err._get_reason())
Nächste Schritte
- Trainingsjob während der Ausführung überwachen oder visualisieren
- Weitere Informationen zur Angabe von Maschinentypen
- Hyperparameter-Abstimmung verwenden
- Modelle bereitstellen