Entrena un modelo de AA con PyTorch

En este instructivo, se describe cómo ejecutar un trabajo de entrenamiento que usa el framework de aprendizaje automático de PyTorch y cómo la configuración de tu trabajo para usar PyTorch difiere un poco del uso de otros frameworks de AA compatibles con AI Platform Training. Luego, se muestra cómo ejecutar un trabajo de entrenamiento con un código de muestra de PyTorch que entrena un modelo en función de los datos del conjunto de datos de viajes en taxi de Chicago.

En el instructivo, también se muestra cómo usar PyTorch con GPU y el ajuste de hiperparámetros.

Contenedores de PyTorch

Las versiones del entorno de ejecución de AI Platform Training no incluyen PyTorch como una dependencia. En su lugar, a fin de ejecutar un trabajo de entrenamiento que usa PyTorch, especifica un contenedor de PyTorch compilado con anterioridad para que lo use AI Platform Training.

La configuración de un contenedor compilado con anterioridad para el entrenamiento usa parte de la misma sintaxis que la configuración de un contenedor personalizado. Sin embargo, no es necesario que crees tu propio contenedor de Docker. En su lugar, especifica el URI de una imagen de contenedor que ofrece AI Platform y proporciona un paquete de entrenamiento de Python que crees.

AI Platform proporciona los siguientes contenedores de PyTorch compilados con anterioridad:

URI de la imagen de contenedor Versión de PyTorch Procesadores compatibles
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 1.11 CPU y TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-11 1.11 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 1.10 CPU y TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 1.10 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 1.9 CPU y TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-9 1.9 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 1.7 CPU y TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-7 1.7 GPU
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 1.6 CPU y TPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-6 1.6 GPU
gcr.io/cloud-ml-public/training/pytorch-cpu.1-4 1.4 CPU
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 1.4 GPU

Estas imágenes de contenedor derivan de contenedores de aprendizaje profundo e incluyen las dependencias proporcionadas por contenedores de aprendizaje profundo.

Si deseas usar una versión de PyTorch que no esté disponible en uno de los contenedores compilados con anterioridad, sigue la guía para usar un contenedor personalizado.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Descarga el código de muestra

Ejecuta los siguientes comandos para descargar la aplicación de entrenamiento de PyTorch de muestra y navega al directorio con ella:

git clone --depth=1 \
  https://github.com/GoogleCloudPlatform/ai-platform-samples.git

cd ai-platform-samples/training/pytorch/structured/python_package

De forma opcional, inspecciona la estructura del código de entrenamiento:

ls -pR

El directorio trainer/ contiene la aplicación de entrenamiento de PyTorch y setup.py proporciona detalles de configuración para empaquetar la aplicación de entrenamiento.

Crea un bucket de Cloud Storage

Crea un bucket de Cloud Storage para almacenar tu código de entrenamiento empaquetado y los artefactos del modelo que crea tu trabajo de entrenamiento. Ejecuta el siguiente comando:

gcloud storage buckets create gs://BUCKET_NAME --location=us-central1

Reemplaza BUCKET_NAME con un nombre único que elijas para el depósito. Obtén más información sobre los requisitos para los nombres de los depósitos.

Como alternativa, puedes usar un bucket de Cloud Storage existente en tu proyecto de Google Cloud. Para este instructivo, asegúrate de usar un depósito en la región us-central1.

Entrena un modelo de PyTorch

En este instructivo, se muestran varias formas de entrenar un modelo de PyTorch en AI Platform Training:

  • En una instancia de máquina virtual (VM) con un procesador de CPU
  • En una VM con un procesador de GPU
  • Mediante el ajuste de hiperparámetros (en una VM con un procesador de CPU)

Elige una de estas formas y sigue las instrucciones en las pestañas correspondientes para el resto de este instructivo. Puedes repetir esta sección si deseas probar el entrenamiento con una de las otras opciones de configuración.

Prepárate para crear un trabajo de entrenamiento

Antes de crear un trabajo de entrenamiento, asegúrate de que tu código de entrenamiento esté listo y especifica algunas opciones de configuración en tu entorno local.

CPU

Configura diversas variables de Bash para usar cuando crees el trabajo de entrenamiento:

BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models

Reemplaza BUCKET_NAME por el nombre del depósito de Cloud Storage que creaste en la sección anterior.

GPU

  1. Asegúrate de que el código de entrenamiento de PyTorch reconozca la GPU en la VM que usa el trabajo de entrenamiento, de modo que PyTorch mueva los tensores y los módulos a la GPU de forma adecuada.

    Si usas el código de muestra proporcionado, no es necesario que hagas nada ya que el código de muestra contiene la lógica para detectar si la máquina que ejecuta el código tiene una GPU:

    cuda_availability = torch.cuda.is_available()
    if cuda_availability:
      device = torch.device('cuda:{}'.format(torch.cuda.current_device()))
    else:
      device = 'cpu'

    Si modificas el código de entrenamiento, lee la guía de PyTorch acerca de la semántica de CUDA para asegurarte de que se use la GPU.

  2. Configura diversas variables de Bash para usar cuando crees el trabajo de entrenamiento:

    BUCKET_NAME=BUCKET_NAME
    JOB_NAME=getting_started_pytorch_gpu
    JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
    

    Reemplaza BUCKET_NAME por el nombre del depósito de Cloud Storage que creaste en la sección anterior.

Ajuste de hiperparámetros

El código de muestra de este instructivo ajusta la tasa de aprendizaje y los parámetros del tamaño del lote para minimizar la pérdida de prueba.

  1. Asegúrate de que el código de entrenamiento esté listo para el ajuste de hiperparámetros en AI Platform Training:

  2. Ejecuta el siguiente comando para crear un archivo config.yaml que especifique las opciones de ajuste de hiperparámetros:

    cat > config.yaml <<END
    trainingInput:
      hyperparameters:
        goal: MINIMIZE
        hyperparameterMetricTag: test_loss
        maxTrials: 2
        maxParallelTrials: 2
        enableTrialEarlyStopping: True
        params:
        - parameterName: learning-rate
          type: DOUBLE
          minValue: 0.0001
          maxValue: 1
          scaleType: UNIT_LOG_SCALE
        - parameterName: batch-size
          type: INTEGER
          minValue: 1
          maxValue: 256
          scaleType: UNIT_LINEAR_SCALE
    END
    

    Estas opciones ajustan los hiperparámetros --learning-rate y --batch-size para minimizar la pérdida del modelo.

  3. Configura diversas variables de Bash para usar cuando crees el trabajo de entrenamiento:

    BUCKET_NAME=BUCKET_NAME
    JOB_NAME=getting_started_pytorch_hptuning
    JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
    

    Reemplaza BUCKET_NAME por el nombre del depósito de Cloud Storage que creaste en la sección anterior.

Estas variables de Bash tienen los siguientes fines:

  • JOB_NAME es un identificador del trabajo de AI Platform Training. Debe ser único entre los trabajos de AI Platform Training en el proyecto de Google Cloud.
  • AI Platform Training usa JOB_DIR a fin de determinar la ubicación exacta a la que subir la aplicación de entrenamiento. La aplicación de entrenamiento también usa JOB_DIR a fin de determinar la ubicación a la que exportar los artefactos del modelo cuando finaliza el entrenamiento.

Crea un trabajo de entrenamiento

Ejecuta el siguiente comando para crear un trabajo de entrenamiento:

CPU

gcloud ai-platform jobs submit training ${JOB_NAME} \
  --region=us-central1 \
  --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
  --scale-tier=BASIC \
  --job-dir=${JOB_DIR} \
  --package-path=./trainer \
  --module-name=trainer.task \
  -- \
  --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
  --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
  --num-epochs=10 \
  --batch-size=100 \
  --learning-rate=0.001

GPU

gcloud ai-platform jobs submit training ${JOB_NAME} \
  --region=us-central1 \
  --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \
  --scale-tier=CUSTOM \
  --master-machine-type=n1-standard-8 \
  --master-accelerator=type=nvidia-tesla-p100,count=1 \
  --job-dir=${JOB_DIR} \
  --package-path=./trainer \
  --module-name=trainer.task \
  -- \
  --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
  --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
  --num-epochs=10 \
  --batch-size=100 \
  --learning-rate=0.001

Ajuste de hiperparámetros

gcloud ai-platform jobs submit training ${JOB_NAME} \
  --region=us-central1 \
  --master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
  --scale-tier=BASIC \
  --job-dir=${JOB_DIR} \
  --package-path=./trainer \
  --module-name=trainer.task \
  --config=config.yaml \
  -- \
  --train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
  --eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
  --num-epochs=10

Lee la guía de trabajos de entrenamiento para obtener información sobre las marcas de configuración y cómo usarlas a fin de personalizar el entrenamiento.

El comando muestra un mensaje similar al siguiente:

Job [JOB_NAME] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe JOB_NAME

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs JOB_NAME
jobId: JOB_NAME
state: QUEUED

Puedes supervisar el estado del trabajo con el siguiente comando:

gcloud ai-platform jobs describe ${JOB_NAME}

Puedes transmitir los registros de entrenamiento del trabajo con el siguiente comando:

gcloud ai-platform jobs stream-logs ${JOB_NAME}

Cuando el trabajo de entrenamiento finaliza, guarda el modelo de AA entrenado en un archivo llamado model.pth en un directorio con marcas de tiempo dentro del directorio JOB_DIR de Cloud Storage que especificaste.

¿Qué sigue?