Ejecutar cargas de trabajo de TPU en un contenedor Docker
Los contenedores Docker facilitan la configuración de las aplicaciones, ya que combinan el código y todas las dependencias necesarias en un paquete distribuible. Puedes ejecutar contenedores Docker en VMs de TPU para simplificar la configuración y el uso compartido de tus aplicaciones de TPU de Cloud. En este documento se describe cómo configurar un contenedor de Docker para cada framework de aprendizaje automático compatible con Cloud TPU.
Entrenar un modelo de PyTorch en un contenedor Docker
Dispositivo de TPU
Crear una máquina virtual de TPU de Cloud
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Conectarse a la VM de TPU mediante SSH
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=europe-west4-a
Asegúrate de que se ha concedido el rol Lector de Artifact Registry a tu usuario de Google Cloud . Para obtener más información, consulta el artículo sobre cómo asignar roles de Artifact Registry.
Iniciar un contenedor en la VM de TPU con la imagen nocturna de 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
Configurar el tiempo de ejecución de la TPU
Hay dos opciones de tiempo de ejecución de PyTorch/XLA: PJRT y XRT. Te recomendamos que uses PJRT a menos que tengas un motivo para usar XRT. Para obtener más información sobre las diferentes configuraciones de tiempo de ejecución, consulta la documentación del tiempo de ejecución de PJRT.
PJRT
export PJRT_DEVICE=TPU
XRT
export XRT_TPU_CONFIG="localservice;0;localhost:51011"
Clona el repositorio de PyTorch XLA
git clone --recursive https://github.com/pytorch/xla.git
Entrenar ResNet50
python3 xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=1
Cuando se complete la secuencia de comandos de entrenamiento, asegúrate de limpiar los recursos.
- Escribe
exit
para salir del contenedor Docker. - Escribe
exit
para salir de la VM de TPU. Eliminar la VM de TPU
gcloud compute tpus tpu-vm delete your-tpu-name --zone=europe-west4-a
Slice de TPU
Cuando ejecutas código de PyTorch en un segmento de TPU, debes ejecutarlo en todos los trabajadores de TPU al mismo tiempo. Una forma de hacerlo es usar el comando gcloud compute tpus tpu-vm ssh
con las marcas --worker=all
y --command
. En el siguiente procedimiento se muestra cómo crear una imagen de Docker para facilitar la configuración de cada trabajador de TPU.
Crear una VM de TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=us-central2-b \ --accelerator-type=v4-32 \ --version=tpu-ubuntu2204-base
Añadir el usuario actual al grupo Docker
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=us-central2-b \ --worker=all \ --command='sudo usermod -a -G docker $USER'
Clona el repositorio de 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"
Ejecutar la secuencia de comandos de entrenamiento en un contenedor en todos los trabajadores de 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"
Marcas de comandos de Docker:
--rm
elimina el contenedor después de que finalice su proceso.--privileged
expone el dispositivo TPU al contenedor.--net=host
vincula todos los puertos del contenedor a la VM de TPU para permitir la comunicación entre los hosts del pod.-e
define variables de entorno.
Cuando se complete la secuencia de comandos de entrenamiento, asegúrate de limpiar los recursos.
Elimina la VM de TPU con el siguiente comando:
gcloud compute tpus tpu-vm delete your-tpu-name \ --zone=us-central2-b
Entrenar un modelo de JAX en un contenedor Docker
Dispositivo de TPU
Crear la VM de TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Conectarse a la VM de TPU mediante SSH
gcloud compute tpus tpu-vm ssh your-tpu-name --zone=europe-west4-a
Iniciar el daemon de Docker en una máquina virtual de TPU
sudo systemctl start docker
Iniciar el contenedor 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
Instalar JAX
pip install jax[tpu]
Instalar FLAX
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flax
Instalar los paquetes
tensorflow
ytensorflow-dataset
pip install tensorflow pip install tensorflow-datasets
Ejecutar la secuencia de comandos de entrenamiento de MNIST de Flax
cd flax/examples/mnist python3 main.py --workdir=/tmp/mnist \ --config=configs/default.py \ --config.learning_rate=0.05 \ --config.num_epochs=5
Cuando se complete la secuencia de comandos de entrenamiento, asegúrate de limpiar los recursos.
- Escribe
exit
para salir del contenedor Docker. - Escribe
exit
para salir de la VM de TPU. Eliminar la VM de TPU
gcloud compute tpus tpu-vm delete your-tpu-name --zone=europe-west4-a
Slice de TPU
Cuando ejecutas código JAX en un segmento de TPU, debes ejecutarlo en todos los trabajadores de TPU al mismo tiempo. Una forma de hacerlo es usar el comando gcloud compute tpus tpu-vm ssh
con las marcas --worker=all
y --command
. En el siguiente procedimiento se muestra cómo crear una imagen de Docker para facilitar la configuración de cada trabajador de TPU.
Crea un archivo llamado
Dockerfile
en el directorio actual y pega el siguiente texto: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/mnist
Preparar 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
Crear la imagen de Docker
docker build -t your-image-name .
Añade una etiqueta a tu imagen de Docker antes de enviarla a Artifact Registry. Para obtener más información sobre cómo trabajar con Artifact Registry, consulta el artículo Trabajar con imágenes de contenedor.
docker tag your-image-name europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag
Enviar la imagen Docker a Artifact Registry
docker push europe-west4-docker.pkg.dev/your-project/your-repo/your-image-name:your-tag
Crear una VM de TPU
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=europe-west4-a \ --accelerator-type=v2-8 \ --version=tpu-ubuntu2204-base
Extrae la imagen Docker de Artifact Registry en todos los trabajadores de 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"
Ejecutar el contenedor en todos los trabajadores de 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"
Ejecuta la secuencia de comandos de entrenamiento en todos los trabajadores de 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"
Cuando se complete la secuencia de comandos de entrenamiento, asegúrate de limpiar los recursos.
Cerrar el contenedor en todos los trabajadores
gcloud compute tpus tpu-vm ssh your-tpu-name --worker=all \ --zone=europe-west4-a \ --command="docker kill your-container-name"
Eliminar la VM de TPU
gcloud compute tpus tpu-vm delete your-tpu-name \ --zone=europe-west4-a
Siguientes pasos
- Tutoriales de TPU de Cloud
- Gestionar TPUs
- Arquitectura de TPU de Cloud
- Ejecutar código JAX en sectores de TPU