Ejecutar tareas de preparación en contenedores mediante Google Kubernetes Engine

En esta página se explica cómo ejecutar un trabajo de entrenamiento en una instancia de Deep Learning Containers y cómo ejecutar esa imagen de contenedor en un clúster de Google Kubernetes Engine.

Antes de empezar

Antes de empezar, asegúrate de que has completado los siguientes pasos.

  1. Sigue los pasos de configuración que se indican en la sección "Antes de empezar" del artículo Primeros pasos con un contenedor de aprendizaje profundo local.

  2. Comprueba que la facturación esté habilitada en tu Google Cloud proyecto.

    Consulta cómo habilitar la facturación.

  3. Habilita las APIs de Google Kubernetes Engine, Compute Engine y Artifact Registry.

    Habilitar las APIs

Abre la herramienta de línea de comandos.

Puedes seguir esta guía con Cloud Shell o con herramientas de línea de comandos de forma local. Cloud Shell tiene preinstaladas las herramientas de línea de comandos gcloud, docker y kubectl que se usan en este tutorial. Si usas Cloud Shell, no tienes que instalar estas herramientas de línea de comandos en tu estación de trabajo.

Cloud Shell

Para usar Cloud Shell, sigue estos pasos.

  1. Ve a la Google Cloud consola.

  2. Haz clic en el botón Activar Cloud Shell situado en la parte superior de la ventana de la consola.

    Consola de Google Cloud Platform

    Se abre una sesión de Cloud Shell dentro de un nuevo marco en la parte inferior de la consola y muestra un indicador de línea de comandos.

    Sesión de Cloud Shell

Línea de comandos local

Para usar tu línea de comandos local, sigue estos pasos.

  1. Con la CLI de gcloud, instala la herramienta de línea de comandos Kubernetes. kubectl se usa para comunicarse con Kubernetes, que es el sistema de orquestación de clústeres de los clústeres de Deep Learning Containers:

    gcloud components install kubectl
    

    Cuando completaste los pasos iniciales, instalaste la CLI de Google Cloud y Docker.

Crear un clúster de GKE

Ejecuta el siguiente comando para crear un clúster de dos nodos en GKE llamado pytorch-training-cluster:

gcloud container clusters create pytorch-training-cluster \
    --num-nodes=2 \
    --zone=us-west1-b \
    --accelerator="type=nvidia-tesla-p100,count=1" \
    --machine-type="n1-highmem-2" \
    --scopes="gke-default,storage-rw"

Para obtener más información sobre estos ajustes, consulta la documentación sobre cómo crear clústeres para ejecutar contenedores.

La creación del clúster puede tardar unos minutos.

También puedes usar un clúster ya creado en tu Google Cloud proyecto en lugar de crear uno. Si lo haces, puede que tengas que ejecutar el siguiente comando para asegurarte de que la herramienta de línea de comandos kubectl tiene las credenciales adecuadas para acceder a tu clúster:

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

A continuación, instala los controladores del dispositivo de GPU NVIDIA.

Crear el Dockerfile

Hay muchas formas de crear una imagen de contenedor. En estos pasos se muestra cómo crear uno para ejecutar una secuencia de comandos de Python llamada trainer.py.

Para ver una lista de las imágenes de contenedor disponibles, haz lo siguiente:

gcloud container images list \
    --repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"

Puede consultar la sección Elegir un contenedor para que le ayude a seleccionar el contenedor que quiera.

En el siguiente ejemplo se muestra cómo colocar una secuencia de comandos de Python llamada trainer.py en un tipo de contenedor de aprendizaje profundo de PyTorch específico.

Para crear el archivo Dockerfile, escribe los siguientes comandos en un archivo llamado Dockerfile. En este paso se da por hecho que tienes código para entrenar un modelo de aprendizaje automático en un directorio llamado model-training-code y que el módulo principal de Python de ese directorio se llama trainer.py. En este caso, el contenedor se eliminará una vez que se complete el trabajo, por lo que tu secuencia de comandos de entrenamiento debe configurarse para que genere resultados en Cloud Storage (consulta un ejemplo de una secuencia de comandos que genera resultados en Cloud Storage) o en almacenamiento persistente.

FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

Crea y sube la imagen del contenedor

Para compilar y subir la imagen de contenedor a Artifact Registry, usa los siguientes comandos:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

Desplegar una aplicación

Crea un archivo llamado pod.yaml con el siguiente contenido y sustituye IMAGE_URI por el URI de tu imagen.

apiVersion: v1
kind: Pod
metadata:
  name: gke-training-pod
spec:
  containers:
  - name: my-custom-container
    image: IMAGE_URI
    resources:
      limits:
        nvidia.com/gpu: 1

Usa la herramienta de línea de comandos kubectl para ejecutar el siguiente comando e implementar tu aplicación:

kubectl apply -f ./pod.yaml

Para monitorizar el estado del pod, ejecuta el siguiente comando:

kubectl describe pod gke-training-pod