Entrena un modelo de AA con contenedores personalizados
AI Platform Training admite el entrenamiento en contenedores personalizados, lo que permite a los usuarios proporcionar sus propios contenedores de Docker con cualquier algoritmo o framework de AA preinstalado para ejecutarse en AI Platform Training. En este instructivo, se proporciona una explicación introductoria sobre cómo entrenar un modelo de PyTorch en AI Platform Training con un contenedor personalizado.
Descripción general
En esta guía de introducción, se demuestra el proceso de entrenamiento con contenedores personalizados en AI Platform Training mediante un modelo básico que clasifica los dígitos escritos a mano según el conjunto de datos MNIST.
En esta guía, se incluyen los siguientes pasos:
- Configurar el proyecto y el entorno local
- Crea un contenedor personalizado
- Escribe un Dockerfile
- Compila y prueba la imagen de Docker de forma local
- Envía la imagen a Container Registry
- Envía un trabajo de entrenamiento de contenedor personalizado
- Envía un trabajo de ajuste de hiperparámetros
- Uso de GPU con un contenedor personalizado
Antes de comenzar
Para esta guía de introducción, usa cualquier entorno en el que esté instalada Google Cloud CLI.Opcional: Revisa la información conceptual sobre el entrenamiento con contenedores personalizados.
Completa los siguientes pasos para configurar una cuenta de GCP, habilitar las API necesarias, e instalar y activar el SDK de Cloud.
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Enable the AI Platform Training & Prediction, Compute Engine and Container Registry APIs.
- 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.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Enable the AI Platform Training & Prediction, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Instala Docker.
Si usas un sistema operativo basado en Linux, como Ubuntu o Debian, agrega tu nombre de usuario al grupo
docker
para que puedas ejecutar Docker sin usarsudo
:sudo usermod -a -G docker ${USER}
Es posible que debas reiniciar tu sistema después de agregarte al grupo
docker
. - Abre Docker. Para garantizar que Docker esté en funcionamiento, ejecuta el siguiente comando de Docker, que muestra la hora y la fecha actuales:
docker run busybox date
- Usa
gcloud
como auxiliar de credenciales para Docker:gcloud auth configure-docker
- Opcional: Si deseas ejecutar el contenedor con GPU de forma local, instala
nvidia-docker
.
Configura tu bucket de Cloud Storage
En esta sección se muestra cómo crear un bucket nuevo. Puedes usar un bucket existente, pero debe estar en la misma región en la que planeas ejecutar los trabajos de AI Platform. Además, si no es parte del proyecto que usas para ejecutar AI Platform Training, debes otorgar acceso a las cuentas de servicio de AI Platform Training de forma explícita.
-
Especifica un nombre para el bucket nuevo. El nombre debe ser único en todos los depósitos en Cloud Storage.
BUCKET_NAME="YOUR_BUCKET_NAME"
Por ejemplo, usa el nombre de tu proyecto con
-aiplatform
agregado:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
Comprueba el nombre del bucket que creaste.
echo $BUCKET_NAME
-
Selecciona una región para tu depósito y establece una variable de entorno
REGION
.Usa la misma región en la que planeas ejecutar los trabajos de AI Platform Training. Consulta las regiones disponibles para los servicios de AI Platform Training.
Por ejemplo, con el código siguiente, se crea una
REGION
y se la configura comous-central1
:REGION=us-central1
-
Crea el bucket nuevo:
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
Descarga el código para este instructivo
Ingresa el siguiente comando para descargar el archivo ZIP de muestra de AI Platform Training:
wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
Descomprime el archivo para extraer el directorio
cloudml-samples-master
.unzip master.zip
Navega al directorio
cloudml-samples-master > pytorch > containers > quickstart > mnist
. Los comandos que aparecen en esta guía deben ejecutarse desde el directoriomnist
.cd cloudml-samples-master/pytorch/containers/quickstart/mnist
Crea un contenedor personalizado
A fin de crear un contenedor personalizado, el primer paso es definir un Dockerfile para instalar las dependencias necesarias para el trabajo de entrenamiento. Luego, compila y prueba la imagen de Docker de forma local para verificarla antes de usarla con AI Platform Training.
Escribe un Dockerfile
El Dockerfile de muestra que se proporciona en este instructivo cumple los siguientes pasos:
- Usa una imagen base de Python 2.7 que tiene dependencias de Python integradas.
- Instala dependencias adicionales, incluidos PyTorch, la CLI de gcloud y
cloudml-hypertune
para ajustar los hiperparámetros. - Copia el código para tu aplicación de entrenamiento en el contenedor.
- Configura el punto de entrada para que AI Platform Training ejecute el código de entrenamiento cuando se inicia el contenedor.
Tu Dockerfile podría incluir lógica adicional, según tus necesidades. Obtén más información sobre cómo escribir los Dockerfile.
Compila y prueba la imagen de Docker de forma local
Crea el URI de imagen correcto; para ello, usa las variables de entorno y compila la imagen de Docker. La marca
-t
nombra y etiqueta la imagen con tus opciones paraIMAGE_REPO_NAME
yIMAGE_TAG
. Puedes elegir un nombre y una etiqueta diferentes para tu imagen.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_custom_container export IMAGE_TAG=mnist_pytorch_cpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile -t $IMAGE_URI ./
Si quieres verificar la imagen, ejecútala de forma local en un contenedor nuevo. Ten en cuenta que la marca
--epochs
se pasa a la secuencia de comandos del entrenador.docker run $IMAGE_URI --epochs 1
Envía la imagen a Container Registry
Si la ejecución local funciona, puedes enviar la imagen de Docker a Container Registry en tu proyecto.
Primero, ejecuta gcloud auth configure-docker
si aún no lo has hecho.
docker push $IMAGE_URI
Envía y supervisa el trabajo
Define las variables de entorno para la solicitud de trabajo.
MODEL_DIR
nombra un nuevo directorio con marca de tiempo dentro de tu depósito de Cloud Storage donde se almacena el archivo del modelo guardado una vez que se completa el entrenamiento.REGION
especifica una región válida para el entrenamiento de AI Platform Training.
export MODEL_DIR=pytorch_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_$(date +%Y%m%d_%H%M%S)
Envía el trabajo de entrenamiento a AI Platform Training con la CLI de gcloud. Pasa el URI a tu imagen de Docker mediante la marca
--master-image-uri
:gcloud ai-platform jobs submit training $JOB_NAME \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \ --epochs=10
Después de enviar tu trabajo, puedes supervisar el estado del trabajo y transmitir los registros:
gcloud ai-platform jobs describe $JOB_NAME gcloud ai-platform jobs stream-logs $JOB_NAME
Envía un trabajo de ajuste de hiperparámetros
Debes hacer algunos ajustes antes de enviar un trabajo de ajuste de hiperparámetros. Toma nota de estas áreas en el código de muestra:
- El Dockerfile de muestra incluye el paquete
cloudml-hypertune
para instalarlo en el contenedor personalizado. - El código de muestra (
mnist.py
):- Usa
cloudml-hypertune
para informar los resultados de cada prueba, mediante llamadas a su función auxiliar,report_hyperparameter_tuning_metric
. El código de muestra informa sobre los resultados del ajuste de hiperparámetros después de la evaluación, a menos que el trabajo no se envíe como un trabajo de ajuste de hiperparámetros. - Agrega argumentos de línea de comandos para cada hiperparámetro y controla el análisis de los argumentos con
argparse
.
- Usa
- La solicitud de trabajo incluye
HyperparameterSpec
en el objetoTrainingInput
. En este caso, ajustamos--lr
y--momentum
para minimizar la pérdida del modelo.
Crea un archivo
config.yaml
para definir la especificación de hiperparámetros. Vuelve a definirMODEL_DIR
yJOB_NAME
. DefineREGION
si aún no lo hiciste:export MODEL_DIR=pytorch_hptuning_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_hptuning_$(date +%Y%m%d_%H%M%S) # Creates a YAML file with job request. cat > config.yaml <<EOF trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: "my_loss" maxTrials: 20 maxParallelTrials: 5 enableTrialEarlyStopping: True params: - parameterName: lr type: DOUBLE minValue: 0.0001 maxValue: 0.1 - parameterName: momentum type: DOUBLE minValue: 0.2 maxValue: 0.8 EOF
Envía el trabajo de ajuste de hiperparámetros a AI Platform Training:
gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC \ --region $REGION \ --master-image-uri $IMAGE_URI \ --config config.yaml \ -- \ --epochs=5 \ --model-dir="gs://$BUCKET_NAME/$MODEL_DIR"
Usa GPU con contenedores personalizados
Para enviar un trabajo de contenedor personalizado mediante GPU, debes compilar una imagen de Docker diferente a la que utilizaste anteriormente. Te proporcionamos un Dockerfile de ejemplo para su uso con GPU que cumple los siguientes requisitos:
- Instala previamente el kit de herramientas CUDA y cuDNN en tu contenedor. El uso de la imagen nvidia/cuda como tu imagen base es la forma recomendada de manejar esto, ya que tiene el kit de herramientas CUDA y cuDNN preinstalados, y te ayuda a configurar las variables de entorno relacionadas de manera correcta.
- Instala dependencias adicionales, como
wget
,curl
,pip
, y cualquier otra que necesite tu aplicación de entrenamiento.
Compila y prueba la imagen de Docker de GPU de manera local
Compila una imagen nueva para el trabajo de entrenamiento de GPU con el Dockerfile de GPU. Para evitar anular la imagen de la CPU, debes volver a definir
IMAGE_REPO_NAME
y, además,IMAGE_TAG
con nombres diferentes a los que utilizaste anteriormente en el instructivo.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_gpu_container export IMAGE_TAG=mnist_pytorch_gpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile-gpu -t $IMAGE_URI ./
Si tienes GPU disponibles en tu máquina y ya instalaste
nvidia-docker
, puedes verificar la imagen mediante su ejecución local:docker run --runtime=nvidia $IMAGE_URI --epochs 1
Envía la imagen de Docker a Container Registry. Primero, ejecuta
gcloud auth configure-docker
si aún no lo hiciste.docker push $IMAGE_URI
Envía el trabajo
En este ejemplo, se usa el nivel de escala básico de GPU para enviar la solicitud de trabajo de entrenamiento. Consulta otras opciones de máquinas para realizar el entrenamiento con GPU.
Vuelve a definir
MODEL_DIR
yJOB_NAME
. DefineREGION
si aún no lo has hecho:export MODEL_DIR=pytorch_model_gpu_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_gpu_$(date +%Y%m%d_%H%M%S)
Envía el trabajo de entrenamiento a AI Platform Training con la CLI de gcloud. Pasa el URI a tu imagen de Docker mediante la marca
--master-image-uri
.gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC_GPU \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --epochs=5 \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR
¿Qué sigue?
- Obtén más información sobre los conceptos involucrados en el uso de los contenedores.
- Aprende acerca del entrenamiento distribuido con contenedores personalizados.