TPU-Arbeitslasten in einem Docker-Container ausführen
Docker-Container erleichtern die Konfiguration von Anwendungen, indem Ihr Code und alle erforderlichen Abhängigkeiten in einem verteilbaren Paket zusammengefasst werden. Sie können Docker-Container in TPU-VMs ausführen, um die Konfiguration und Freigabe Ihrer Cloud TPU-Anwendungen zu vereinfachen. In diesem Dokument wird beschrieben, wie Sie einen Docker-Container für jedes von Cloud TPU unterstützte ML-Framework einrichten.
PyTorch-Modell in einem Docker-Container trainieren
Unter PyTorch auf Cloud TPU werden die PyTorch-Bibliotheken für TPU beschrieben und Links zur Dokumentation zum Abrufen der Python-Pakete und Docker-Images bereitgestellt. Sie können TorchTPU direkt verwenden (Informationen zum Container-Image für die öffentliche Version finden Sie unter Erste Schritte mit GKE) oder die Referenzbibliothek TorchTitan verwenden, um containerisierte Trainingsarbeitslasten zu erstellen und auszuführen.
JAX-Modell in einem Docker-Container trainieren
Erstellen Sie vor dem Ausführen der folgenden Befehle die folgenden Umgebungsvariablen:
export PROJECT_ID=your-project-id export TPU_NAME=your-tpu-name export ZONE=us-west4-a export ACCELERATOR_TYPE=v5litepod-8 export RUNTIME_VERSION=v2-alpha-tpuv5-lite
Beschreibungen von Umgebungsvariablen
PROJECT_ID: Ihre Google Cloud -Projekt-ID. Verwenden Sie ein vorhandenes Projekt oder erstellen Sie ein neues Projekt.TPU_NAME: Der Name der TPU.ZONE: Die Zone, in der die TPU-VM erstellt werden soll. Weitere Informationen zu unterstützten Zonen finden Sie unter TPU-Regionen und ‑Zonen.ACCELERATOR_TYPE: Der Beschleunigertyp gibt die Version und Größe der Cloud TPU an, die Sie erstellen möchten. Weitere Informationen zu den unterstützten Beschleunigertypen für die einzelnen TPU-Versionen finden Sie unter TPU-Versionen.RUNTIME_VERSION: Die Cloud TPU-Softwareversion.
TPU-Gerät
Erstellen Sie eine TPU-VM.
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONStellen Sie eine SSH-Verbindung zur TPU-VM her.
gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$ZONEStarten Sie den Docker-Daemon in der TPU-VM.
sudo systemctl start dockerStarten Sie den Docker-Container.
sudo docker run --net=host -ti --rm --name your-container-name \ --privileged us-central1-docker.pkg.dev/tpu-pytorch-releases/docker/xla:r2.6.0_3.10_tpuvm_cxx11 \ bashInstallieren Sie JAX.
pip install jax[tpu]Installieren Sie FLAX.
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flaxInstallieren Sie das
tensorflow- und dastensorflow-datasets-Paket.pip install tensorflow pip install tensorflow-datasetsFühren Sie das FLAX-MNIST-Trainings-Script aus.
cd flax/examples/mnist python3 main.py --workdir=/tmp/mnist \ --config=configs/default.py \ --config.learning_rate=0.05 \ --config.num_epochs=5
Wenn das Trainings-Script abgeschlossen ist, bereinigen Sie die Ressourcen.
- Geben Sie
exitein, um den Docker-Container zu beenden. - Geben Sie
exitein, um die TPU-VM zu beenden. Löschen Sie die TPU-VM.
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$ZONE
TPU-Slice
Wenn Sie JAX-Code auf einem TPU-Slice ausführen, müssen Sie den JAX-Code gleichzeitig auf allen TPU-Workern ausführen. Eine Möglichkeit hierfür ist die Verwendung des Befehls gcloud compute tpus tpu-vm ssh mit den Flags --worker=all und --command. Im folgenden Verfahren wird gezeigt, wie Sie ein Docker-Image erstellen, um die Einrichtung der einzelnen TPU-Worker zu vereinfachen.
Erstellen Sie in Ihrem aktuellen Verzeichnis eine Datei namens
Dockerfileund fügen Sie den folgenden Text ein:FROM python:3.10 RUN pip install jax[tpu] RUN pip install --upgrade clu RUN git clone https://github.com/google/flax.git RUN pip install --user -e flax RUN pip install tensorflow RUN pip install tensorflow-datasets WORKDIR ./flax/examples/mnistBereiten Sie Artifact Registry vor.
gcloud artifacts repositories create your-repo \ --repository-format=docker \ --location=europe-west4 --description="Docker repository" \ --project=$PROJECT_ID gcloud artifacts repositories list \ --project=$PROJECT_ID gcloud auth configure-docker europe-west4-docker.pkg.devErstellen Sie das Docker-Image.
docker build -t your-image-name .Fügen Sie Ihrem Docker-Image ein Tag hinzu, bevor Sie es in Artifact Registry hochladen. Weitere Informationen zum Arbeiten mit Artifact Registry finden Sie unter Mit Container-Images arbeiten.
docker tag your-image-name europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagÜbertragen Sie das Docker-Image per Push an Artifact Registry.
docker push europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagErstellen Sie eine TPU-VM.
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONRufen Sie das Docker-Image auf allen TPU-Workern aus Artifact Registry ab.
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command='sudo usermod -a -G docker ${USER}'gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="gcloud auth configure-docker europe-west4-docker.pkg.dev --quiet"gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker pull europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tag"Führen Sie den Container auf allen TPU-Workern aus.
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker run -ti -d --privileged --net=host --name your-container-name europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tag bash"Führen Sie das Trainings-Script auf allen TPU-Workern aus.
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker exec --privileged your-container-name python3 main.py --workdir=/tmp/mnist \ --config=configs/default.py \ --config.learning_rate=0.05 \ --config.num_epochs=5"
Wenn das Trainings-Script abgeschlossen ist, bereinigen Sie die Ressourcen.
Fahren Sie den Container auf allen Workern herunter.
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker kill your-container-name"Löschen Sie die TPU-VM.
gcloud compute tpus tpu-vm delete $TPU_NAME \ --zone=$ZONE