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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. 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

  1. 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:

    cuda_availability = torch.cuda.is_available()
    if cuda_availability:
      device = torch.device('cuda:{}'.format(torch.cuda.current_device()))
    else:
      device = 'cpu'

    Wenn Sie den Trainingscode ändern, lesen Sie den PyTorch-Leitfaden zur CUDA-Semantik, damit die GPU verwendet wird.

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

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

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

  3. 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 auch JOB_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