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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
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
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:
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.
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.
Asegúrate de que el código de entrenamiento esté listo para el ajuste de hiperparámetros en AI Platform Training:
El código debe analizar las marcas de hiperparámetros que AI Platform Training le pasa.
El código de muestra controla esto en
task.py
, por lo que no es necesario que hagas nada, a menos que modifiques el código.El código debe usar la biblioteca
cloudml-hypertune
para informar su métrica de ajuste de hiperparámetros a AI Platform Training.El código de muestra controla esto en
experiment.py
, por lo que no es necesario que hagas nada a menos que modifiques el código.
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.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 usaJOB_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?
- Aprende cómo realizar un entrenamiento de PyTorch distribuido en un clúster de varios nodos.
- Aprende cómo usar una TPU para el entrenamiento con PyTorch en AI Platform Training.
- Aprende a personalizar la configuración del trabajo de entrenamiento.
- Si deseas usar una versión de PyTorch que no está disponible en un contenedor compilado con anterioridad, obtén información sobre cómo usar un contenedor personalizado.
- Obtén más información sobre cómo usar PyTorch en la documentación de PyTorch.