Exécuter des charges de travail TPU dans un conteneur Docker
Les conteneurs Docker facilitent la configuration des applications en combinant votre code et toutes les dépendances nécessaires dans un package unique distribuable. Vous pouvez exécuter des conteneurs Docker dans des VM TPU pour simplifier la configuration et le partage de vos applications Cloud TPU. Ce document explique comment configurer un conteneur Docker pour chaque framework de ML compatible avec Cloud TPU.
Entraîner un modèle PyTorch dans un conteneur Docker
PyTorch sur Cloud TPU décrit les bibliothèques PyTorch pour TPU et fournit des liens vers la documentation permettant d'obtenir les packages Python et les images Docker. Vous pouvez utiliser TorchTPU directement (consultez Premiers pas sur GKE pour l'image de conteneur de la version publique) ou utiliser la bibliothèque de référence TorchTitan pour créer et exécuter des charges de travail d'entraînement conteneurisées.
Entraîner un modèle JAX dans un conteneur Docker
Avant d'exécuter les commandes suivantes, créez les variables d'environnement suivantes :
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
Descriptions des variables d'environnement
PROJECT_ID: ID de votre projet Google Cloud . Utilisez un projet existant ou créez-en un.TPU_NAME: nom du TPU.ZONE: zone dans laquelle créer la VM TPU. Pour en savoir plus sur les zones compatibles, consultez Régions et zones TPU.ACCELERATOR_TYPE: le type d'accélérateur spécifie la version et la taille du Cloud TPU que vous souhaitez créer. Pour en savoir plus sur les types d'accélérateurs compatibles avec chaque version de TPU, consultez Versions de TPU.RUNTIME_VERSION: Version logicielle du Cloud TPU.
Appareil TPU
Créez la VM TPU.
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONConnectez-vous à la VM TPU à l'aide de SSH :
gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$ZONEDémarrez le daemon Docker dans la VM TPU.
sudo systemctl start dockerDémarrez le conteneur Docker.
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 \ bashInstallez JAX.
pip install jax[tpu]Installez FLAX.
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flaxInstallez les packages
tensorflowettensorflow-datasets.pip install tensorflow pip install tensorflow-datasetsExécutez le script d'entraînement FLAX MNIST.
cd flax/examples/mnist python3 main.py --workdir=/tmp/mnist \ --config=configs/default.py \ --config.learning_rate=0.05 \ --config.num_epochs=5
Une fois le script d'entraînement terminé, nettoyez les ressources.
- Saisissez
exitpour quitter le conteneur Docker. - Saisissez
exitpour quitter la VM TPU. Supprimez la VM TPU.
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$ZONE
Tranche TPU
Lorsque vous exécutez du code JAX sur une tranche de TPU, vous devez exécuter votre code JAX sur tous les nœuds de calcul TPU en même temps. Pour cela, vous pouvez utiliser la commande gcloud compute tpus tpu-vm ssh avec les options --worker=all et --command. La procédure suivante vous explique comment créer une image Docker pour faciliter la configuration de chaque nœud de calcul TPU.
Créez un fichier nommé
Dockerfiledans votre répertoire actuel et collez le texte suivant dans ce fichier.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/mnistPréparez un dépôt Artifact Registry.
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.devCompilez l'image Docker.
docker build -t your-image-name .Ajoutez un tag à votre image Docker avant de la transférer vers Artifact Registry. Pour en savoir plus sur l'utilisation d'Artifact Registry, consultez Utiliser des images de conteneurs.
docker tag your-image-name europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagTransférez l'image Docker dans Artifact Registry.
docker push europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagCréez une VM TPU.
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONExtrayez l'image Docker depuis Artifact Registry vers tous les nœuds de calcul TPU.
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"Exécutez le conteneur sur tous les nœuds de calcul TPU.
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"Exécutez le script d'entraînement sur tous les nœuds de calcul TPU.
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"
Une fois le script d'entraînement terminé, nettoyez les ressources.
Arrêtez le conteneur sur tous les nœuds de calcul.
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker kill your-container-name"Supprimer la VM TPU
gcloud compute tpus tpu-vm delete $TPU_NAME \ --zone=$ZONE