Esegui i carichi di lavoro TPU in un container Docker
I container Docker semplificano la configurazione delle applicazioni combinando il codice e tutte le dipendenze necessarie in un unico pacchetto distribuibile. Puoi eseguire container Docker all'interno di VM TPU per semplificare la configurazione e la condivisione delle tue applicazioni Cloud TPU. Questo documento descrive come configurare un contenitore Docker per ogni framework ML supportato da Cloud TPU.
Addestra un modello PyTorch in un container Docker
Dispositivo TPU
Crea una VM Cloud TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Connettiti alla VM TPU tramite SSH
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=europe-west4-a
Assicurati che all' Google Cloud utente sia stato assegnato il ruolo di lettore del Registry degli elementi. Per ulteriori informazioni, consulta Concedere i ruoli di Artifact Registry.
Avvia un contenitore nella VM TPU utilizzando l'immagine PyTorch/XLA notturna.
sudo docker run -ti --rm --name your-container-name --privileged gcr.io/tpu-pytorch/xla:r2.0_3.8_tpuvm bash
Configura il runtime TPU
Esistono due opzioni di runtime PyTorch/XLA: PJRT e XRT. Ti consigliamo di utilizzare PJRT, a meno che tu non abbia un motivo per utilizzare XRT. Per scoprire di più sulle diverse configurazioni di runtime, consulta i motivi per cui utilizzare XRT. Per approfondire le diverse configurazioni del runtime, consulta la documentazione del runtime PJRT.
PJRT
export PJRT_DEVICE=TPU
XRT
export XRT_TPU_CONFIG="localservice;0;localhost:51011"
Clona il repository PyTorch XLA
git clone --recursive https://github.com/pytorch/xla.git
Addestra ResNet50
python3 xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=1
Al termine dello script di addestramento, assicurati di ripulire le risorse.
- Digita
exit
per uscire dal container Docker - Digita
exit
per uscire dalla VM TPU - Elimina la VM TPU
$ gcloud compute tpus tpu-vm delete your-tpu-name --zone=europe-west4-a
Sezione TPU
Quando esegui il codice PyTorch su una sezione TPU, devi eseguirlo su tutti i worker TPU contemporaneamente. Un modo per farlo è utilizzare il comando gcloud compute tpus tpu-vm ssh
con i flag --worker=all
e --command
. La procedura riportata di seguito mostra come creare un'immagine Docker per semplificare la configurazione di ogni worker TPU.
Crea una VM TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=us-central2-b \ --accelerator-type=v4-32 \ --version=tpu-ubuntu2204-base
Aggiungi l'utente corrente al gruppo docker
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=us-central2-b \ --worker=all \ --command="sudo usermod -a -G docker $USER"
Clona il repository PyTorch XLA
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=us-central2-b \ --command="git clone --recursive https://github.com/pytorch/xla.git"
Esegui lo script di addestramento in un contenitore su tutti i worker TPU.
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=us-central2-b \ --command="docker run --rm --privileged --net=host -v ~/xla:/xla -e PJRT_DEVICE=TPU us-central1-docker.pkg.dev/tpu-pytorch-releases/docker/xla:r2.6.0_3.10_tpuvm_cxx11 python /xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=1"
Flag dei comandi Docker:
--rm
rimuovi il contenitore al termine del processo.--privileged
espone il dispositivo TPU al contenitore.--net=host
associa tutte le porte del contenitore alla VM TPU per consentire la comunicazione tra gli host del pod.-e
imposta le variabili di ambiente.
Al termine dello script di addestramento, assicurati di ripulire le risorse.
Elimina la VM TPU utilizzando il seguente comando:
$ gcloud compute tpus tpu-vm delete your-tpu-name \ --zone=us-central2-b
Addestrare un modello JAX in un container Docker
Dispositivo TPU
Crea la VM TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Connettiti alla VM TPU tramite SSH
gcloud compute tpus tpu-vm ssh your-tpu-name --zone=europe-west4-a
Avvia il daemon Docker nella VM TPU
sudo systemctl start docker
Avvia il container 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 \ python:3.10 bash
Installa JAX
pip install jax[tpu]
Installa FLAX
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flax
Installa i pacchetti
tensorflow
etensorflow-dataset
pip install tensorflow pip install tensorflow-datasets
Esegui lo script di addestramento 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
Al termine dello script di addestramento, assicurati di ripulire le risorse.
- Digita
exit
per uscire dal container Docker - Digita
exit
per uscire dalla VM TPU Elimina la VM TPU
$ gcloud compute tpus tpu-vm delete your-tpu-name --zone=europe-west4-a
Sezione TPU
Quando esegui il codice JAX su una sezione TPU, devi eseguirlo su tutti i worker TPU contemporaneamente. Un modo per farlo è utilizzare il comando gcloud compute tpus tpu-vm ssh
con i flag --worker=all
e --command
. La procedura riportata di seguito mostra come creare un'immagine Docker per semplificare la configurazione di ogni worker TPU.
Crea un file denominato
Dockerfile
nella directory corrente e incolla il seguente testoFROM 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 WORKDIR ./flax/examples/mnist
Preparare un Artifact Registry
gcloud artifacts repositories create your-repo \ --repository-format=docker \ --location=europe-west4 --description="Docker repository" \ --project=your-project gcloud artifacts repositories list \ --project=your-project gcloud auth configure-docker europe-west4-docker.pkg.dev
Crea l'immagine Docker
docker build -t your-image-name .
Aggiungi un tag all'immagine Docker prima di eseguirne il push in Artifact Registry. Per ulteriori informazioni sull'utilizzo di Artifact Registry, consulta Utilizzare le immagini container.
docker tag your-image-name europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag
Esegui il push dell'immagine Docker in Artifact Registry
docker push europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag
Crea una VM TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Estrai l'immagine Docker da Artifact Registry su tutti i worker TPU.
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="sudo usermod -a -G docker ${USER}"
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="gcloud auth configure-docker europe-west4-docker.pkg.dev --quiet"
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="docker pull europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag"
Esegui il container su tutti i worker TPU.
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="docker run -ti -d --privileged --net=host --name your-container-name europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag bash"
Esegui lo script di addestramento su tutti i worker TPU:
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --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"
Al termine dello script di addestramento, assicurati di ripulire le risorse.
Arresta il contenitore su tutti i worker:
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="docker kill your-container-name"
Elimina la VM TPU utilizzando il seguente comando:
$ gcloud compute tpus tpu-vm delete your-tpu-name \ --zone=europe-west4-a
Addestrare un modello JAX in un container Docker utilizzando JAX Stable Stack
Puoi creare le immagini Docker MaxText e MaxDiffusion utilizzando l'immagine di base JAX Stable Stack.
JAX Stable Stack fornisce un ambiente coerente per MaxText e
MaxDiffusion raggruppando JAX con pacchetti di base come orbax
, flax
,
optax
e libtpu.so
. Queste librerie vengono testate per garantire la compatibilità
e fornire una base stabile per creare ed eseguire MaxText e MaxDiffusion.
In questo modo, vengono eliminati i potenziali conflitti dovuti a versioni del pacchetto incompatibili.
JAX Stable Stack include un libtpu.so
completamente rilasciato e qualificato,
la libreria di base che gestisce la compilazione, l'esecuzione e la configurazione della rete ICI dei programmi TPU. La release libtpu sostituisce la build notturna precedentemente utilizzata da JAX e garantisce la funzionalità coerente dei calcoli XLA su TPU con test di qualificazione a livello di PJRT negli IR HLO/StableHLO.
Per creare l'immagine Docker di MaxText e MaxDiffusion con JAX Stable Stack,
quando esegui lo script docker_build_dependency_image.sh
, imposta
la variabile MODE
su stable_stack
e la variabile BASEIMAGE
su
l'immagine di base che vuoi utilizzare.
docker_build_dependency_image.sh si trova nel repository GitHub di MaxDiffusion e nel repository GitHub di MaxText. Clona il repository che vuoi utilizzare e utilizza lo script docker_build_dependency_image.sh da quel repository per creare l'immagine Docker.
git clone https://github.com/AI-Hypercomputer/maxdiffusion.git git clone https://github.com/AI-Hypercomputer/maxtext.git
Il seguente comando genera un'immagine Docker da utilizzare con MaxText e
MaxDiffusion utilizzando
us-docker.pkg.dev/cloud-tpu-images/jax-stable-stack/tpu:jax0.4.35-rev1
come
l'immagine di base. Lo script bash docker_build_dependency_image.sh
è disponibile nel repository MaxDiffusion.
sudo bash docker_build_dependency_image.sh MODE=stable_stack BASEIMAGE=us-docker.pkg.dev/cloud-tpu-images/jax-stable-stack/tpu:jax0.4.35-rev1
Per un elenco delle immagini di base JAX Stable Stack disponibili, consulta Immagini JAX Stable Stack in Artifact Registry.
Passaggi successivi
- Tutorial su Cloud TPU
- Gestire le TPU
- Architettura di sistema di Cloud TPU
- Eseguire il codice TensorFlow nelle sezioni TPU
- Eseguire il codice JAX nelle sezioni TPU