ML-Modell mit benutzerdefinierten Containern trainieren
AI Platform Training unterstützt das Training in benutzerdefinierten Containern. So können Nutzer ihre eigenen Docker-Container mit einem beliebigen vorinstallierten ML-Framework oder -Algorithmus auf AI Platform Training ausführen. Diese Schritt-für-Schritt-Anleitung zeigt einführend, wie ein PyTorch-Modell mit einem benutzerdefinierten Container auf AI Platform Training trainiert wird.
Übersicht
In diesem Startleitfaden wird das Training mit benutzerdefinierten Containern auf AI Platform Training anhand eines Grundmodells veranschaulicht, das handschriftliche Ziffern mithilfe des MNIST-Datasets klassifiziert.
Der Leitfaden behandelt folgende Schritte:
- Projekt und lokale Umgebung einrichten
- Benutzerdefinierten Container erstellen
- Dockerfile schreiben
- Docker-Image lokal erstellen und testen
- Image in Container Registry hochladen
- Benutzerdefinierten Container-Trainingsjob senden
- Hyperparameter-Abstimmungsjob senden
- GPUs mit einem benutzerdefinierten Container verwenden
Hinweis
Sie können für diesen Startleitfaden jede beliebige Umgebung verwenden, in der die Google Cloud CLI installiert ist.Optional: Lesen Sie Informationen zu Konzepten beim Training mit benutzerdefinierten Containern.
Führen Sie die folgenden Schritte aus, um ein GCP-Konto einzurichten, die erforderlichen APIs zu aktivieren und das Cloud SDK zu installieren und zu aktivieren.
- 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, Compute Engine and Container Registry APIs.
- 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, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installieren Sie Docker.
Wenn Sie ein Linux-basiertes Betriebssystem wie Ubuntu oder Debian verwenden, fügen Sie der Gruppe
docker
Ihren Nutzernamen hinzu, damit Sie Docker ohnesudo
ausführen können:sudo usermod -a -G docker ${USER}
Möglicherweise müssen Sie Ihr System neu starten, wenn Sie sich zur Gruppe
docker
hinzugefügt haben. - Öffnen Sie Docker. Prüfen Sie, ob Docker ausgeführt wird, indem Sie den folgenden Docker-Befehl ausführen, der die aktuelle Zeit und das aktuelle Datum zurückgibt:
docker run busybox date
- Verwenden Sie
gcloud
als Credential Helper für Docker:gcloud auth configure-docker
- Optional: Wenn Sie den Container mit GPU lokal ausführen möchten, installieren Sie
nvidia-docker
.
Cloud Storage-Bucket einrichten
In diesem Abschnitt erfahren Sie, wie Sie einen neuen Bucket erstellen. Sie können auch einen vorhandenen Bucket verwenden. Dieser muss sich aber in der Region befinden, in der Sie AI Platform-Jobs ausführen. Hinzu kommt: Wenn der Bucket nicht in dem Projekt ist, das Sie für die Ausführung von AI Platform Training verwenden, müssen Sie den AI Platform Training-Dienstkonten explizit Zugriff gewähren.
-
Geben Sie einen Namen für den neuen Bucket an. Der Name muss sich von allen anderen Bucket-Namen in Cloud Storage unterscheiden:
BUCKET_NAME="YOUR_BUCKET_NAME"
Beispielsweise verwenden Sie den Projektnamen mit angehängtem
-aiplatform
:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
Prüfen Sie den erstellten Bucketnamen.
echo $BUCKET_NAME
-
Wählen Sie eine Region für den Bucket aus und legen Sie eine Umgebungsvariable
REGION
fest.Verwenden Sie die Region, in der Sie auch AI Platform Training-Jobs ausführen möchten. Hier finden Sie die Regionen, in denen AI Platform Training-Dienste verfügbar sind.
Mit dem folgenden Code wird beispielsweise
REGION
erstellt und dafürus-central1
festgelegt:REGION=us-central1
-
Erstellen Sie den neuen Bucket:
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
Code für diese Anleitung herunterladen
Laden Sie die Beispiel-ZIP-Datei für AI Platform Training mit dem folgenden Befehl herunter:
wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
Entpacken Sie die Datei, um das Verzeichnis
cloudml-samples-master
zu extrahieren.unzip master.zip
Wechseln Sie zum Verzeichnis
cloudml-samples-master > pytorch > containers > quickstart > mnist
. Die Befehle in dieser Anleitung müssen im Verzeichnismnist
ausgeführt werden.cd cloudml-samples-master/pytorch/containers/quickstart/mnist
Benutzerdefinierten Container erstellen
Bei der Erstellung eines benutzerdefinierten Containers besteht der erste Schritt in der Definition eines Dockerfile zur Installation der für den Trainingsjob erforderlichen Abhängigkeiten. Anschließend erstellen und testen Sie Ihr Docker-Image lokal, bevor Sie es mit AI Platform Training verwenden.
Dockerfile schreiben
Das in dieser Anleitung angegebene Beispiel-Dockerfile führt die folgenden Schritte aus:
- Python 2.7-Basis-Image mit integrierten Python-Abhängigkeiten verwenden
- Installiert zusätzliche Abhängigkeiten, einschließlich PyTorch, die gcloud CLI und
cloudml-hypertune
, um Hyperparameter-Abstimmung zu verwenden. - Code für Ihre Trainingsanwendung in den Container kopieren
- Einstiegspunkt für AI Platform Training konfigurieren, damit Ihr Trainingscode beim Starten des Containers ausgeführt wird
Ihr Dockerfile kann je nach Ihren Anforderungen zusätzliche Logik enthalten. Weitere Informationen zum Schreiben von Dockerfiles
Docker-Image lokal erstellen und testen
Erstellen Sie den richtigen Image-URI mithilfe von Umgebungsvariablen und anschließend das Docker-Image. Mit dem
-t
-Flag wird das Image mit den ausgewählten Optionen fürIMAGE_REPO_NAME
undIMAGE_TAG
benannt und mit Tags versehen. Sie können für Ihr Image auch einen anderen Namen und ein anderes Tag auswählen.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_custom_container export IMAGE_TAG=mnist_pytorch_cpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile -t $IMAGE_URI ./
Prüfen Sie das Image und führen Sie es dazu lokal in einem neuen Container aus. Beachten Sie, dass das Flag
--epochs
an das Trainerskript übergeben wird.docker run $IMAGE_URI --epochs 1
Image in Container Registry hochladen
Wenn das Docker-Image korrekt lokal ausgeführt wird, können Sie es nach Container Registry in Ihrem Projekt übertragen.
Führen Sie als Erstes gcloud auth configure-docker
aus, falls noch nicht geschehen.
docker push $IMAGE_URI
Job senden und überwachen
Definieren Sie Umgebungsvariablen für Ihre Jobanfrage:
MODEL_DIR
benennt ein neues Verzeichnis mit Zeitstempel in Ihrem Cloud Storage-Bucket, in dem Ihre Modelldatei nach Abschluss des Trainings gespeichert wird.REGION
gibt eine gültige Region für das Training in AI Platform Training an.
export MODEL_DIR=pytorch_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_$(date +%Y%m%d_%H%M%S)
Senden Sie den Trainingsjob mit der gcloud CLI an AI Platform Training. Übergeben Sie den URI mit dem Flag
--master-image-uri
an Ihr Docker-Image:gcloud ai-platform jobs submit training $JOB_NAME \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \ --epochs=10
Nachdem Sie Ihren Job gesendet haben, können Sie den Jobstatus und die Streamlogs überwachen:
gcloud ai-platform jobs describe $JOB_NAME gcloud ai-platform jobs stream-logs $JOB_NAME
Hyperparameter-Abstimmungsjob senden
Für einen Hyperparameter-Abstimmungsjob sind einige Anpassungen nötig. Beachten Sie diese Bereiche im Beispielcode:
- Das Beispiel-Dockerfile mit dem
cloudml-hypertune
-Paket, das im benutzerdefinierten Container installiert wird. - Der Beispielcode (
mnist.py
):- Verwendet
cloudml-hypertune
, um die Ergebnisse der einzelnen Testversionen durch Aufrufen der Helper-Funktionreport_hyperparameter_tuning_metric
zu melden. Der Beispielcode meldet nach der Evaluierung die Hyperparameter-Abstimmungsergebnisse, sofern der Job als Hyperparameter-Abstimmungsjob gesendet wurde. - Fügt Befehlszeilenargumente für jeden Hyperparameter hinzu und führt das Parsen des Arguments mit
argparse
aus.
- Verwendet
- Die Jobanfrage enthält
HyperparameterSpec
im ObjektTrainingInput
. Im vorliegenden Fall optimieren wir--lr
und--momentum
, um den Modellverlust zu minimieren.
Erstellen Sie eine Datei
config.yaml
für die Definition Ihrer Hyperparameter-Spezifikation. Definieren SieMODEL_DIR
undJOB_NAME
neu. Definieren SieREGION
, falls noch nicht geschehen:export MODEL_DIR=pytorch_hptuning_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_hptuning_$(date +%Y%m%d_%H%M%S) # Creates a YAML file with job request. cat > config.yaml <<EOF trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: "my_loss" maxTrials: 20 maxParallelTrials: 5 enableTrialEarlyStopping: True params: - parameterName: lr type: DOUBLE minValue: 0.0001 maxValue: 0.1 - parameterName: momentum type: DOUBLE minValue: 0.2 maxValue: 0.8 EOF
Senden Sie den Hyperparameter-Abstimmungsjob an AI Platform Training:
gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC \ --region $REGION \ --master-image-uri $IMAGE_URI \ --config config.yaml \ -- \ --epochs=5 \ --model-dir="gs://$BUCKET_NAME/$MODEL_DIR"
GPUs mit benutzerdefinierten Containern verwenden
Zum Senden eines Jobs mit benutzerdefiniertem Container, der GPUs verwenden soll, müssen Sie ein anderes Docker-Image als das zuvor verwendete erstellen. Wir haben ein Beispiel-Dockerfile zur Verwendung mit GPUs bereitgestellt, das die folgenden Anforderungen erfüllt:
- CUDA-Toolkit und cuDNN sind im Container vorinstalliert. Die Verwendung des Images nvidia/cuda als Basis-Image ist die empfohlene Vorgehensweise. Hier sind das CUDA-Toolkit und cuDNN vorinstalliert und die zugehörigen Umgebungsvariablen können korrekt eingerichtet werden.
- Installieren Sie zusätzliche Abhängigkeiten, wie z. B.
wget
,curl
,pip
und alle anderen von Ihrer Trainingsanwendung benötigten Abhängigkeiten.
GPU-Docker-Image lokal erstellen und testen
Erstellen Sie mit dem GPU-Dockerfile ein neues Image für Ihren GPU-Trainingsjob. Damit das CPU-Image nicht überschrieben wird, müssen Sie
IMAGE_REPO_NAME
undIMAGE_TAG
mit anderen Namen definieren als denen, die Sie zuvor in der Anleitung verwendet haben:export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_gpu_container export IMAGE_TAG=mnist_pytorch_gpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile-gpu -t $IMAGE_URI ./
Wenn auf Ihrer Maschine GPUs verfügbar sind und
nvidia-docker
installiert ist, können Sie das Image durch lokale Ausführung prüfen:docker run --runtime=nvidia $IMAGE_URI --epochs 1
Laden Sie das Docker-Image in Container Registry hoch. Führen Sie als Erstes
gcloud auth configure-docker
aus, falls noch nicht geschehen.docker push $IMAGE_URI
Job senden
In diesem Beispiel wird für die Trainingsjob-Anfrage die einfache GPU-Skalierungsstufe verwendet. Hier finden Sie weitere Maschinenoptionen zum Trainieren mit GPUs.
Definieren Sie
MODEL_DIR
undJOB_NAME
neu. Definieren SieREGION
, falls noch nicht geschehen:export MODEL_DIR=pytorch_model_gpu_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_gpu_$(date +%Y%m%d_%H%M%S)
Senden Sie den Trainingsjob mit der gcloud CLI an AI Platform Training. Übergeben Sie den URI mit dem Flag
--master-image-uri
an Ihr Docker-Image.gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC_GPU \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --epochs=5 \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR