Execute cargas de trabalho de TPU num contentor do Docker
Os contentores Docker facilitam a configuração das aplicações combinando o seu código e todas as dependências necessárias num pacote distribuível. Pode executar contentores Docker em VMs de TPU para simplificar a configuração e a partilha das suas aplicações Cloud TPU. Este documento descreve como configurar um contentor Docker para cada framework de ML suportado pela Cloud TPU.
Prepare um modelo do PyTorch num contentor do Docker
Dispositivo TPU
Crie uma VM do Cloud TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Estabeleça ligação à VM de TPU através de SSH
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=europe-west4-a
Certifique-se de que ao seu Google Cloud utilizador foi concedido o papel de leitor do Artifact Registry. Para mais informações, consulte o artigo Conceder funções do Artifact Registry.
Inicie um contentor na VM da TPU com a imagem noturna do 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 \ bash
Configure o tempo de execução da TPU
Existem duas opções de tempo de execução do PyTorch/XLA: PJRT e XRT. Recomendamos que use o PJRT, a menos que tenha um motivo para usar o XRT. Para saber mais acerca das diferentes configurações de tempo de execução, consulte a documentação de tempo de execução do PJRT.
PJRT
export PJRT_DEVICE=TPU
XRT
export XRT_TPU_CONFIG="localservice;0;localhost:51011"
Clone o repositório PyTorch XLA
git clone --recursive https://github.com/pytorch/xla.git
Preparar ResNet50
python3 xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=1
Quando o script de preparação estiver concluído, certifique-se de que limpa os recursos.
- Escreva
exit
para sair do contentor Docker - Escreva
exit
para sair da VM da TPU Elimine a VM da TPU
gcloud compute tpus tpu-vm delete your-tpu-name --zone=europe-west4-a
Fatia de TPU
Quando executa código PyTorch numa fatia de TPU, tem de executar o código em todos os trabalhadores de TPU ao mesmo tempo. Uma forma de o fazer é usar o comando
gcloud compute tpus tpu-vm ssh
com os indicadores --worker=all
e
--command
. O procedimento seguinte mostra como criar uma imagem do Docker para facilitar a configuração de cada worker de TPU.
Crie uma VM da TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=us-central2-b \ --accelerator-type=v4-32 \ --version=tpu-ubuntu2204-base
Adicione o utilizador atual ao grupo Docker
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=us-central2-b \ --worker=all \ --command='sudo usermod -a -G docker $USER'
Clone o repositório 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"
Executar o script de preparação num contentor em todos os trabalhadores da 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"
Sinalizadores de comandos do Docker:
--rm
remove o contentor após a terminação do respetivo processo.--privileged
expõe o dispositivo TPU ao contentor.--net=host
associa todas as portas do contentor à VM da TPU para permitir a comunicação entre os anfitriões no pod.-e
define variáveis de ambiente.
Quando o script de preparação estiver concluído, certifique-se de que limpa os recursos.
Elimine a VM da TPU com o seguinte comando:
gcloud compute tpus tpu-vm delete your-tpu-name \ --zone=us-central2-b
Prepare um modelo JAX num contentor do Docker
Dispositivo TPU
Crie a VM da TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Estabeleça ligação à VM de TPU através de SSH
gcloud compute tpus tpu-vm ssh your-tpu-name --zone=europe-west4-a
Inicie o daemon Docker na VM da TPU
sudo systemctl start docker
Inicie o contentor do 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 \ bash
Instale o JAX
pip install jax[tpu]
Instale o FLAX
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flax
Instale pacotes
tensorflow
etensorflow-dataset
pip install tensorflow pip install tensorflow-datasets
Execute o script de preparação do 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
Quando o script de preparação estiver concluído, certifique-se de que limpa os recursos.
- Escreva
exit
para sair do contentor Docker - Escreva
exit
para sair da VM da TPU Elimine a VM da TPU
gcloud compute tpus tpu-vm delete your-tpu-name --zone=europe-west4-a
Fatia de TPU
Quando executa código JAX numa fatia de TPU, tem de executar o código JAX em todos os trabalhadores de TPU ao mesmo tempo. Uma forma de o fazer é usar o comando gcloud compute tpus tpu-vm ssh
com as flags --worker=all
e --command
. O procedimento
seguinte mostra como criar uma imagem do Docker para facilitar a configuração de cada worker da TPU.
Crie um ficheiro denominado
Dockerfile
no seu diretório atual e cole o seguinte textoFROM 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/mnist
Prepare um 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
Crie a imagem de Docker
docker build -t your-image-name .
Adicione uma etiqueta à sua imagem do Docker antes de a enviar para o Artifact Registry. Para mais informações sobre como trabalhar com o Artifact Registry, consulte o artigo Trabalhe com imagens de contentores.
docker tag your-image-name europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag
Envie a sua imagem de Docker para o Artifact Registry
docker push europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag
Crie uma VM da TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Extraia a imagem do Docker do Artifact Registry em todos os trabalhadores da 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"
Executar o contentor em todos os trabalhadores da 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"
Execute o script de preparação em todos os trabalhadores da 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"
Quando o script de preparação estiver concluído, certifique-se de que limpa os recursos.
Encerre o contentor em todos os trabalhadores
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="docker kill your-container-name"
Elimine a VM da TPU
gcloud compute tpus tpu-vm delete your-tpu-name \ --zone=europe-west4-a
O que se segue?
- Tutoriais do Cloud TPU
- Faça a gestão das TPUs
- Arquitetura do Cloud TPU
- Execute código JAX em fatias de TPUs