Entrenar en un contenedor con Google Kubernetes Engine

En esta página, se muestra cómo ejecutar un trabajo de entrenamiento en una instancia de contenedores de aprendizaje profundo y cómo ejecutar esa imagen de contenedor en un clúster de Google Kubernetes Engine.

Antes de comenzar

Antes de comenzar, asegúrate de haber completado los siguientes pasos.

  1. Completa los pasos de configuración en la sección Antes de comenzar de Comienza a usar un contenedor de aprendizaje profundo local.

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

    Aprende a habilitar la facturación

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

    Habilitar las API

Abre la herramienta de línea de comandos

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

Cloud Shell

Para usar Cloud Shell, completa los siguientes pasos.

  1. Ve a la consola de Google Cloud.

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

    Google Cloud Platform Console

    Se abrirá una sesión de Cloud Shell en un marco nuevo en la parte inferior de la consola, que mostrará una ventana emergente con una línea de comandos.

    Sesión de Cloud Shell

Línea de comandos local

Para usar la línea de comandos local, completa los siguientes pasos.

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

    gcloud components install kubectl
    

    Cuando completaste los pasos de introducción, instalaste Google Cloud CLI y Docker.

Cree 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"

Si quieres obtener más información sobre esta configuración, consulta la documentación sobre cómo crear clústeres para ejecutar contenedores.

La creación del clúster puede demorar varios minutos.

Como alternativa, en lugar de crear un clúster, puedes usar un clúster existente en tu proyecto de Google Cloud. Si haces esto, es posible que debas ejecutar el siguiente comando a fin de asegurarte de que la herramienta de línea de comandos de kubectl tenga las credenciales adecuadas para acceder al clúster:

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

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

Crea el Dockerfile

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

Para ver una lista de imágenes de contenedor disponibles, sigue estos pasos:

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

Se recomienda ir a Elige un contenedor para ayudarte a seleccionar el contenedor que deseas.

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 específico de PyTorch.

Para crear el Dockerfile, escribe los siguientes comandos en un archivo llamado Dockerfile. En este paso, se supone 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 en ese directorio se llama trainer.py. En este caso, el contenedor se quitará una vez que se complete el trabajo, por lo que la secuencia de comandos de entrenamiento debe configurarse para que envíe su resultado a Cloud Storage (consulta un ejemplo de una secuencia de comandos cuyo resultado se envía a Cloud Storage) o a un almacenamiento persistente.

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

Compila y sube la imagen del contenedor

Para compilar y subir la imagen del 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

Implementa tu aplicación

Crea un archivo llamado pod.yaml con el siguiente contenido y reemplaza 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 de kubectl para ejecutar el siguiente comando y, luego, implementa tu aplicación:

kubectl apply -f ./pod.yaml

Para realizar un seguimiento del estado del pod, ejecuta el siguiente comando:

kubectl describe pod gke-training-pod