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 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 do 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
Prepare um modelo JAX num contentor Docker com a JAX Stable Stack
Pode criar as imagens Docker MaxText e MaxDiffusion usando a imagem base da pilha estável do JAX.
O JAX Stable Stack oferece um ambiente consistente para o MaxText e o MaxDiffusion ao agrupar o JAX com pacotes essenciais, como orbax
, flax
, optax
e libtpu.so
. Estas bibliotecas são testadas para garantir a compatibilidade e oferecem uma base estável para criar e executar o MaxText e o MaxDiffusion.
Isto elimina potenciais conflitos devido a versões de pacotes incompatíveis.
A JAX Stable Stack inclui uma versão totalmente lançada e qualificada da libtpu.so
, a biblioteca principal que impulsiona a compilação, a execução e a configuração de rede da ICI do programa de TPU. A versão libtpu substitui a compilação noturna usada anteriormente pelo JAX e garante a funcionalidade consistente dos cálculos XLA no TPU com testes de qualificação ao nível do PJRT nos IRs HLO/StableHLO.
Para criar a imagem Docker MaxText e MaxDiffusion com a JAX Stable Stack,
quando executar o script docker_build_dependency_image.sh
, defina
a variável MODE
como stable_stack
e defina a variável BASEIMAGE
como
a imagem base que quer usar.
docker_build_dependency_image.sh
está localizado no repositório do GitHub MaxDiffusion
e no repositório do GitHub MaxText.
Clone o repositório que quer usar e execute o script docker_build_dependency_image.sh
desse repositório para criar a imagem do Docker.
git clone https://github.com/AI-Hypercomputer/maxdiffusion.git git clone https://github.com/AI-Hypercomputer/maxtext.git
O seguinte comando gera uma imagem Docker para utilização com o MaxText e o MaxDiffusion usando us-docker.pkg.dev/cloud-tpu-images/jax-stable-stack/tpu:jax0.4.35-rev1
como imagem de base.
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
Para ver uma lista das imagens base da JAX Stable Stack disponíveis, consulte as imagens da JAX Stable Stack no Artifact Registry.
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