ML-Modell mit PyTorch trainieren
In dieser Anleitung wird beschrieben, wie Sie einen Trainingsjob ausführen, der das ML-Framework PyTorch verwendet. Die Anleitung erläutert, wie sich die Konfiguration Ihres Job für die Verwendung von PyTorch von der Verwendung anderer ML-Frameworks unterscheidet, die von AI Platform Training unterstützt werden. Anschließend erfahren Sie, wie Sie einen Trainingsjob mit einem PyTorch-Beispielcode ausführen, der ein Modell anhand von Daten aus dem Chicago Taxi Trips-Dataset trainiert.
Die Anleitung zeigt außerdem, wie PyTorch mit GPUs und der Hyperparameter-Abstimmung verwendet wird.
PyTorch-Container
Die Laufzeitversionen von AI Platform Training enthalten PyTorch nicht als Abhängigkeit. Stattdessen sollten Sie einen vorgefertigten PyTorch-Container angeben, den AI Platform Training verwenden kann, um einen Trainingsjob auszuführen.
Bei der Konfiguration eines vorkonfigurierten Containers für das Training kommt zum Teil die gleiche Syntax wie beim Konfigurieren eines benutzerdefinierten Containers zum Einsatz. Sie müssen jedoch keinen eigenen Docker-Container erstellen. Geben Sie stattdessen den URI eines von AI Platform bereitgestellten Container-Images an und stellen Sie ein von Ihnen erstelltes Python-Trainingspaket bereit.
AI Platform stellt die folgenden vordefinierten PyTorch-Container bereit:
URI des Container-Images | PyTorch-Version | Unterstützte Prozessoren |
---|---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
1.11 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-11 |
1.11 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 |
1.10 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 |
1.10 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 |
1.9 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-9 |
1.9 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 |
1,7 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-7 |
1,7 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 |
1,6 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-6 |
1,6 | GPU |
gcr.io/cloud-ml-public/training/pytorch-cpu.1-4 |
1.4 | CPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 |
1.4 | GPU |
Diese Container-Images stammen aus Deep Learning-Containern und enthalten die von Deep Learning-Containern bereitgestellten Abhängigkeiten.
Wenn Sie eine Version von PyTorch verwenden möchten, die in keinem der vordefinierten Container verfügbar ist, folgen Sie der Anleitung zur Verwendung eines benutzerdefinierten Containers.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Beispielcode herunterladen
Führen Sie die folgenden Befehle aus, um die PyTorch-Trainingsanwendung herunterzuladen und zum Verzeichnis mit der Trainingsanwendung zu wechseln:
git clone --depth=1 \
https://github.com/GoogleCloudPlatform/ai-platform-samples.git
cd ai-platform-samples/training/pytorch/structured/python_package
Prüfen Sie optional die Struktur des Trainingscodes:
ls -pR
Das Verzeichnis trainer/
enthält die PyTorch-Trainingsanwendung und setup.py
enthält Konfigurationsdetails zum Verpacken der Trainingsanwendung.
Cloud Storage-Bucket erstellen
Cloud Storage-Bucket zum Speichern des verpackten Trainingscodes und der Modellartefakte erstellen, die vom Trainingsjob erstellt werden. Führen Sie dazu diesen Befehl aus:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
Ersetzen Sie BUCKET_NAME durch einen eindeutigen Namen, den Sie für Ihren Bucket auswählen. Anforderungen an Bucket-Namen
Alternativ können Sie einen vorhandenen Cloud Storage-Bucket in Ihrem Google Cloud-Projekt verwenden. Für diese Anleitung müssen Sie einen Bucket in der Region us-central1
verwenden.
PyTorch-Modell trainieren
In dieser Anleitung werden mehrere Möglichkeiten zum Trainieren eines PyTorch-Modells in AI Platform Training erläutert:
- Auf einer VM-Instanz mit einem CPU-Prozessor
- Auf einer VM mit einem GPU-Prozessor
- Durch Verwendung der Hyperparameter-Abstimmung (auf einer VM mit einem CPU-Prozessor)
Entscheiden Sie sich nun für eine dieser Möglichkeiten und folgen Sie für den Rest dieser Anleitung den Hinweisen auf den entsprechenden Tabs. Wenn Sie das Training anschließend mit einer der anderen Konfigurationen durchführen möchten, können Sie diesen Abschnitt wiederholen.
Erstellen eines Trainingsjobs vorbereiten
Bevor Sie einen Trainingsjob erstellen, müssen Ihr Trainingscode bereit und einige Konfigurationsoptionen in Ihrer lokalen Umgebung angegeben sein.
CPU
Legen Sie mehrere Bash-Variablen fest, die Sie beim Erstellen Ihres Trainingsjobs verwenden möchten:
BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Ersetzen Sie BUCKET_NAME durch den Namen des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
gpu
Achten Sie darauf, dass Ihr PyTorch-Trainingscode die GPU auf der VM kennt, die Ihr Trainingsjob verwendet, damit PyTorch Tensoren und Module richtig in die GPU verschiebt.
Wenn Sie den bereitgestellten Beispielcode verwenden, müssen Sie nichts weiter unternehmen, da der Beispielcode die Logik enthält, mit der ermittelt wird, ob die Maschine, auf der der Code ausgeführt wird, eine GPU hat:
Wenn Sie den Trainingscode ändern, lesen Sie den PyTorch-Leitfaden zur CUDA-Semantik, damit die GPU verwendet wird.
Legen Sie mehrere Bash-Variablen fest, die Sie beim Erstellen Ihres Trainingsjobs verwenden möchten:
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_gpu JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Ersetzen Sie BUCKET_NAME durch den Namen des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
Hyperparameter-Abstimmung
Der Beispielcode für diese Anleitung passt die Parameter der Lernrate und Batchgröße an, um Testverluste zu minimieren.
Prüfen Sie, ob Ihr Trainingscode für die Hyperparameter-Abstimmung in AI Platform Training bereit ist:
Der Code muss Hyperparameter-Flags parsen, die von AI Platform Training übergeben werden.
Der Beispielcode kümmert sich in
task.py
darum, sodass Sie nichts weiter tun müssen, wenn Sie den Code nicht ändern.Der Code muss die Bibliothek
cloudml-hypertune
verwenden, um den Hyperparameter-Abstimmungsmesswert an AI Platform Training zu melden.Der Beispielcode kümmert sich in
experiment.py
darum, sodass Sie nichts weiter tun müssen, wenn Sie den Code nicht ändern.
Führen Sie den folgenden Befehl aus, um eine
config.yaml
-Datei zu erstellen, die Hyperparameter-Abstimmungsoptionen angibt:cat > config.yaml <<END trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: test_loss maxTrials: 2 maxParallelTrials: 2 enableTrialEarlyStopping: True params: - parameterName: learning-rate type: DOUBLE minValue: 0.0001 maxValue: 1 scaleType: UNIT_LOG_SCALE - parameterName: batch-size type: INTEGER minValue: 1 maxValue: 256 scaleType: UNIT_LINEAR_SCALE END
Diese Optionen optimieren die Hyperparameter
--learning-rate
und--batch-size
, um den Modellverlust zu minimieren.Legen Sie mehrere Bash-Variablen fest, die Sie beim Erstellen Ihres Trainingsjobs verwenden möchten:
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_hptuning JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Ersetzen Sie BUCKET_NAME durch den Namen des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
Diese Bash-Variablen dienen zu folgenden Zwecken:
JOB_NAME
ist eine ID für Ihren AI Platform Training-Job. Er darf in Ihrem Google Cloud-Projekt unter den AI Platform Training-Jobs nur einmal vorhanden sein.JOB_DIR
wird von AI Platform Training verwendet, um zu bestimmen, wo genau Ihre Trainingsanwendung hochgeladen werden soll. Die Trainingsanwendung verwendet auchJOB_DIR
, um zu bestimmen, wohin die Modellartefakte nach Abschluss des Trainings exportiert werden sollen.
Trainingsjob erstellen
Führen Sie den folgenden Befehl aus, um einen Trainingsjob zu erstellen:
CPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
gpu
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \
--scale-tier=CUSTOM \
--master-machine-type=n1-standard-8 \
--master-accelerator=type=nvidia-tesla-p100,count=1 \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
Hyperparameter-Feinabstimmung
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
--config=config.yaml \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10
Im Leitfaden zu Trainingsjobs erfahren Sie mehr über die Konfigurations-Flags und wie Sie sie verwenden, um das Training anzupassen.
Die Ausgabe des Befehls sieht in etwa so aus:
Job [JOB_NAME] submitted successfully.
Your job is still active. You may view the status of your job with the command
$ gcloud ai-platform jobs describe JOB_NAME
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs JOB_NAME
jobId: JOB_NAME
state: QUEUED
Sie können den Jobstatus mit dem folgenden Befehl überwachen:
gcloud ai-platform jobs describe ${JOB_NAME}
Mit dem folgenden Befehl können Sie die Trainingslogs Ihres Jobs streamen:
gcloud ai-platform jobs stream-logs ${JOB_NAME}
Nach Abschluss des Trainingsjobs wird das trainierte ML-Modell in einer Datei mit dem Namen model.pth
gespeichert, das sich im von Ihnen angegebenen Cloud Storage-Verzeichnis JOB_DIR
befindet und einen Zeitstempel hat.
Nächste Schritte
- Verteiltes PyTorch-Training auf einem Cluster mit mehreren Knoten ausführen.
- TPU für das Training mit PyTorch in AI Platform Training verwenden
- Konfiguration des Trainingsjobs anpassen
- Wenn Sie eine Version von PyTorch verwenden möchten, die in einem vordefinierten Container nicht verfügbar ist, erfahren Sie hier, wie Sie einen benutzerdefinierten Container verwenden können.
- Weitere Informationen zur Verwendung von PyTorch finden Sie in der PyTorch-Dokumentation.