Esegui 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 delle VM TPU per semplificare la configurazione e la condivisione delle tue applicazioni Cloud TPU. Questo documento descrive come configurare un container Docker per ogni framework ML supportato da Cloud TPU.
Addestra un modello PyTorch in un container Docker
Prima di eseguire i comandi seguenti, crea le variabili di ambiente seguenti:
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
Descrizioni delle variabili di ambiente
PROJECT_ID: il tuo ID progetto Google Cloud . Utilizza un progetto esistente o creane uno nuovo.TPU_NAME: il nome della TPU.ZONE: La zona in cui creare la VM TPU. Per saperne di più sulle zone supportate, consulta Regioni e zone TPU.ACCELERATOR_TYPE: Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per maggiori informazioni sui tipi di acceleratore supportati per ogni versione di TPU, consulta la sezione Versioni di TPU.RUNTIME_VERSION: la versione software di Cloud TPU.
Dispositivo TPU
Crea VM Cloud TPU
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONConnettiti alla VM TPU utilizzando SSH
gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$ZONEAssicurati che all'utente Google Cloud sia stato concesso il ruolo Lettore Artifact Registry. Per saperne di più, consulta Concessione dei ruoli di Artifact Registry.
Avvia un container nella VM TPU utilizzando l'immagine notturna di PyTorch/XLA
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 \ bashConfigura 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 saperne di più sulle diverse configurazioni di runtime, consulta la documentazione sul runtime PJRT.
PJRT
export PJRT_DEVICE=TPUXRT
export XRT_TPU_CONFIG="localservice;0;localhost:51011"Clona il repository PyTorch XLA
git clone --recursive https://github.com/pytorch/xla.gitAddestra ResNet50
python3 xla/test/test_train_mp_imagenet.py \ --fake_data \ --model=resnet50 \ --num_epochs=1
Al termine dello script di addestramento, libera spazio dalle risorse.
- Digita
exitper uscire dal container Docker - Digita
exitper uscire dalla VM TPU Elimina la VM TPU
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$ZONE
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 seguente procedura mostra come creare un'immagine Docker
per semplificare la configurazione di ogni worker TPU.
Crea una VM TPU
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONAggiungi l'utente corrente al gruppo Docker
gcloud compute tpus tpu-vm ssh $TPU_NAME \ --zone=$ZONE \ --worker=all \ --command='sudo usermod -a -G docker $USER'Clona il repository PyTorch XLA
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="git clone --recursive https://github.com/pytorch/xla.git"Esegui lo script di addestramento in un container su tutti i worker TPU
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --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 del comando Docker:
--rmrimuove il container al termine del processo.--privilegedespone il dispositivo TPU al container.--net=hostassocia tutte le porte del container alla VM TPU per consentire la comunicazione tra gli host nel pod.-eimposta le variabili di ambiente.
Al termine dello script di addestramento, libera spazio dalle risorse.
Elimina la VM TPU utilizzando il seguente comando:
gcloud compute tpus tpu-vm delete $TPU_NAME \
--zone=$ZONE
Addestra un modello JAX in un container Docker
Prima di eseguire i comandi seguenti, crea le variabili di ambiente seguenti:
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
Descrizioni delle variabili di ambiente
PROJECT_ID: il tuo ID progetto Google Cloud . Utilizza un progetto esistente o creane uno nuovo.TPU_NAME: il nome della TPU.ZONE: La zona in cui creare la VM TPU. Per saperne di più sulle zone supportate, consulta Regioni e zone TPU.ACCELERATOR_TYPE: Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per maggiori informazioni sui tipi di acceleratore supportati per ogni versione di TPU, consulta la sezione Versioni di TPU.RUNTIME_VERSION: la versione software di Cloud TPU.
Dispositivo TPU
Crea la VM TPU
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONConnettiti alla VM TPU utilizzando SSH
gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$ZONEAvvia il daemon Docker nella VM TPU
sudo systemctl start dockerAvvia 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 \ bashInstallare JAX
pip install jax[tpu]Installare FLAX
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flaxInstalla i pacchetti
tensorflowetensorflow-datasetspip install tensorflow pip install tensorflow-datasetsEsegui 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, libera spazio dalle risorse.
- Digita
exitper uscire dal container Docker - Digita
exitper uscire dalla VM TPU Elimina la VM TPU
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$ZONE
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 seguente
procedura mostra come creare un'immagine Docker per semplificare la configurazione di ogni worker TPU.
Crea un file denominato
Dockerfilenella directory attuale e incolla il seguente testo: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/mnistPrepara un 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.devCrea 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, vedi Utilizzare le immagini container.
docker tag your-image-name europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagEsegui il push dell'immagine Docker in Artifact Registry
docker push europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagCrea una VM TPU
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONEstrai l'immagine Docker da Artifact Registry su tutti i worker 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"Esegui il container su tutti i worker 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"Esegui lo script di addestramento su tutti i worker 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"
Al termine dello script di addestramento, libera spazio dalle risorse.
Arresta il container su tutti i worker
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker kill your-container-name"Elimina la VM TPU
gcloud compute tpus tpu-vm delete $TPU_NAME \ --zone=$ZONE
Passaggi successivi
- Tutorial su Cloud TPU
- Gestire le TPU
- Architettura Cloud TPU
- Esecuzione del codice JAX nelle sezioni TPU