Descripción general del entrenamiento

Usa AI Platform Training para ejecutar tus aplicaciones de entrenamiento de TensorFlow, scikit-learn y XGBoost en la nube. AI Platform Training proporciona las dependencias necesarias para entrenar modelos de aprendizaje automático con estos frameworks alojados en sus versiones del entorno de ejecución. Además, puedes usar contenedores personalizados para ejecutar trabajos de entrenamiento con otros frameworks de aprendizaje automático. En esta página, se describen los conceptos clave del entrenamiento de AI Platform. Si prefieres comenzar de inmediato con el proceso de entrenamiento, consulta cómo iniciar un trabajo de entrenamiento.

Cómo funciona el entrenamiento

AI Platform Training ejecuta tu trabajo de entrenamiento en recursos de procesamiento en la nube. Puedes entrenar un algoritmo incorporado (Beta) con tu conjunto de datos sin tener que escribir una aplicación de entrenamiento. Si los algoritmos integrados no se ajustan a tu caso práctico, puedes crear una aplicación de entrenamiento para que se ejecute en AI Platform Training.

A continuación, presentamos una descripción general del proceso para usar tu aplicación de entrenamiento:

  1. Crea una aplicación de Python que entrene el modelo y compílala como si se ejecutara de manera local en tu entorno de desarrollo.
  2. Coloca los datos de entrenamiento y verificación en una fuente a la que AI Platform Training pueda acceder. Por lo general, esto significa ponerlos en Cloud Storage, Bigtable o cualquier otro servicio de almacenamiento de Google Cloud asociado con el mismo proyecto de Google Cloud que usas para AI Platform Training.
  3. Cuando tu aplicación esté lista para ejecutarse, debes empaquetarla y transferirla a un bucket de Cloud Storage al que pueda acceder tu proyecto. Esto se automatiza cuando usas Google Cloud CLI para ejecutar un trabajo de entrenamiento.
  4. El servicio de entrenamiento de AI Platform Training configura recursos para tu trabajo. Asigna una o más máquinas virtuales (llamadas instancias de entrenamiento) en función de la configuración de tu trabajo. Cada instancia de entrenamiento se configura mediante las acciones siguientes:
    • La aplicación de la imagen de máquina estándar para la versión de AI Platform Training que usa tu trabajo
    • La carga de tu paquete de aplicación y su instalación con pip
    • La instalación de cualquier paquete adicional que especifiques como dependencia
  5. El servicio de entrenamiento ejecuta tu aplicación y pasa cualquier argumento de la línea de comandos que especifiques cuando crees el trabajo de entrenamiento.
  6. Puedes obtener información sobre tu trabajo en ejecución de las siguientes maneras:
    • En Cloud Logging
    • Cuando solicitas detalles del trabajo o ejecutas la transmisión de registros con la herramienta de línea de comandos de gcloud
    • Cuando haces solicitudes de estado de manera programática al servicio de entrenamiento
  7. Cuando tu trabajo de entrenamiento es correcto o encuentra un error irrecuperable, AI Platform Training detiene todos los procesos de trabajo y limpia los recursos.

Una aplicación típica de aprendizaje automático

El servicio de entrenamiento de AI Platform Training está diseñado para ejercer el menor impacto posible en tu aplicación. Esto te permite enfocarte en el código del modelo.

La mayoría de las aplicaciones de aprendizaje automático:

  • Proporcionan una manera de obtener datos de entrenamiento y datos de evaluación.
  • Procesan instancias de datos.
  • Usan los datos de evaluación para probar la exactitud del modelo (con qué frecuencia predice el valor correcto).
  • Proporcionan una manera de generar puntos de control a intervalos en el proceso para obtener una instantánea del progreso del modelo (para aplicaciones de entrenamiento de TensorFlow).
  • Proporcionan una forma de exportar el modelo entrenado cuando finaliza la aplicación.

Estructura del entrenamiento distribuido

Si ejecutas un trabajo de TensorFlow distribuido con AI Platform Training, debes especificar varias máquinas (nodos) en un clúster de entrenamiento. El servicio de capacitación asigna los recursos para los tipos de máquina que especifiques. Tu trabajo en ejecución en un nodo determinado se llama réplica. De acuerdo con el modelo distribuido de TensorFlow, a cada réplica del clúster de entrenamiento se le asigna una función o tarea única en el entrenamiento distribuido:

  • Principal: Se designa una réplica con exactitud como el trabajador principal. Esta tarea administra las demás y también informa el estado del trabajo en su conjunto. El servicio de entrenamiento se ejecuta hasta que tu trabajo se complete correctamente o encuentre un error irrecuperable. En el entrenamiento distribuido, el estado de la réplica principal señala el estado general del trabajo.

    Si estás ejecutando un trabajo de un solo proceso, la única réplica es la instancia principal para el trabajo.

  • Trabajadores: se pueden designar una o más réplicas como trabajadores. Estas réplicas hacen su parte del trabajo según lo designes en tu configuración del trabajo.

  • Servidores de parámetros: se puede designar una o más réplicas como servidores de parámetros. Estas réplicas coordinan el estado del modelo compartido entre los trabajadores.

Estrategias de entrenamiento distribuido

Existen tres estrategias básicas para entrenar un modelo con varios nodos:

  • Entrenamiento de datos paralelos con actualizaciones síncronas
  • Entrenamiento de datos paralelos con actualizaciones asíncronas
  • Entrenamiento de modelo paralelo

Teniendo en cuenta que puedes usar la estrategia de datos paralelos sin importar la estructura del modelo, es un buen punto de partida para aplicar el método de entrenamiento distribuido a tu modelo personalizado. En el entrenamiento de datos paralelos, el modelo completo se comparte con todos los nodos trabajadores. Cada nodo calcula los vectores gradientes de manera independiente desde alguna parte del conjunto de datos de entrenamiento de la misma manera que el procesamiento de los minilotes. Los vectores gradientes que se calcularon se recopilan en el nodo del servidor de parámetro, y los parámetros modelo se actualizan con la suma total de los vectores gradientes. Si distribuyes 10,000 lotes entre 10 nodos trabajadores, cada nodo trabaja en aproximadamente 1,000 lotes.

El entrenamiento de datos paralelos se puede realizar tanto con actualizaciones síncronas como asíncronas. Cuando se usan las actualizaciones asíncronas, el servidor de parámetros aplica cada vector gradiente por separado, justo luego de recibirlo de uno de los nodos trabajadores, como se muestra en el diagrama siguiente.

diagrama de entrenamiento de datos paralelos con actualizaciones asíncronas

Si quieres aprender a realizar un entrenamiento distribuido de datos paralelos, consulta MultiWorkerMirroredStrategy y ParameterServerStrategy de TensorFlow. Luego, consulta cómo configurar el entrenamiento distribuido en Entrenamiento de AI Platform.

Para obtener más información sobre el entrenamiento de modelo paralelo, lee sobre Mesh TensorFlow.

Empaqueta tu aplicación

Antes de que puedas ejecutar tu aplicación de entrenamiento en AI Platform Training, debes empaquetar tu aplicación y sus dependencias. Luego, debes subir este paquete en un bucket de Cloud Storage al que pueda acceder tu proyecto de Google Cloud.

Google Cloud CLI automatiza gran parte del proceso. En particular, puedes usar gcloud ai-platform jobs submit training para subir el paquete de aplicación y enviar el trabajo de entrenamiento.

Consulta las instrucciones detalladas sobre cómo empaquetar una aplicación de entrenamiento.

Envía tu trabajo de entrenamiento

AI Platform Training proporciona entrenamiento de modelos como un servicio asíncrono (por lotes). Puedes enviar un trabajo de entrenamiento si ejecutas gcloud ai-platform jobs submit training desde la línea de comandos o si envías una solicitud a la API en projects.jobs.create.

Consulta las instrucciones detalladas sobre cómo iniciar un trabajo de entrenamiento.

ID de tarea

Tu trabajo de entrenamiento debe tener un nombre que cumpla con estas reglas:

  • Debe ser único dentro de tu proyecto de Google Cloud.
  • Solo puede contener combinaciones de mayúsculas y minúsculas, dígitos y guiones bajos.
  • Debe comenzar con una letra.
  • No debe tener más de 128 caracteres.

Puedes usar la convención de nombres de trabajo que desees. Si no ejecutas muchos trabajos, el nombre que elijas puede no ser muy importante. Si ejecutas muchos trabajos, puede que debas encontrar tu ID de trabajo en listas grandes. Es recomendable que hagas que tus ID de trabajo sean fáciles de distinguir.

Una técnica común es definir un nombre base para todos los trabajos asociados a un modelo determinado y, luego, agregar una string de fecha/hora. Esta convención facilita la clasificación de las listas de trabajos por nombre, ya que todos los trabajos para un modelo se agrupan en orden ascendente.

Niveles de escala

Cuando ejecutas un trabajo de entrenamiento en AI Platform Training, debes especificar la cantidad y los tipos de máquinas que necesitas. Para facilitar el proceso, puedes elegir entre un conjunto de especificaciones de clúster predefinidas llamadas niveles de escala. Como alternativa, puedes elegir un nivel personalizado y especificar los tipos de máquina tú mismo.

Para especificar un nivel de escala, agréguelo al objeto TrainingInput en la configuración de tu trabajo. Si usas el comando de gcloud para enviar el trabajo de entrenamiento, puedes usar los mismos identificadores.

Consulta las definiciones detalladas en niveles de escala y tipos de máquinas.

Ajuste de hiperparámetros

Si deseas usar el ajuste de hiperparámetro, debes incluir los detalles de configuración cuando crees tu trabajo de entrenamiento. Consulta una guía conceptual sobre el ajuste de hiperparámetro y cómo usar el ajuste del hiperparámetro.

Regiones y zonas

Google Cloud usa regiones, subdivididas en zonas, para definir la ubicación geográfica de los recursos de procesamiento físicos. Cuando ejecutas un trabajo de entrenamiento en AI Platform Training, debes especificar la región en la que deseas que se ejecute.

Si almacenas el conjunto de datos de entrenamiento en Cloud Storage, debes ejecutar el trabajo de entrenamiento en la misma región que el bucket de Cloud Storage que estás usando para los datos de entrenamiento. Si debes ejecutar tu trabajo en una región diferente de tu bucket de datos, tu trabajo puede tardar más.

Para ver las regiones disponibles de los servicios de AI Platform Training, incluido el entrenamiento de modelos y la predicción en línea o por lotes, lee la guía de regiones.

Usa job-dir como un directorio de salida común

Puedes especificar el directorio de salida para tu trabajo mediante la configuración de un directorio de trabajo cuando configuras el trabajo. Cuando envías el trabajo, AI Platform Training realiza las acciones siguientes:

  • Valida el directorio para que puedas solucionar cualquier problema antes de que se ejecute el trabajo.
  • Pasa la ruta a tu aplicación como un argumento de línea de comandos llamado --job-dir.

Debes justificar el argumento --job-dir en tu aplicación. Captura el valor del argumento cuando analices tus otros parámetros y úsalo cuando guardes el resultado de tu aplicación. Consulta la guía para iniciar un trabajo de entrenamiento.

Versión de entorno de ejecución

Si quieres entrenar con uno de los frameworks de aprendizaje automático alojados de AI Platform Training, debes especificar una versión del entorno de ejecución de AI Platform Training compatible para que se use en tu trabajo de entrenamiento. La versión del entorno de ejecución dicta las versiones de TensorFlow, scikit-learn, XGBoost y otros paquetes de Python que se instalan en tus instancias de entrenamiento asignadas. Especifica una versión que te brinde la funcionalidad que necesitas. Si ejecutas el trabajo de entrenamiento tanto localmente como en la nube, asegúrate de que los trabajos locales y en la nube usen la misma versión del entorno de ejecución.

Datos de entrada

Los datos que puedes usar en el trabajo de entrenamiento deben obedecer las reglas siguientes para ejecutarse en AI Platform Training:

  • Los datos deben estar en un formato que puedas leer y alimentar al código de entrenamiento.
  • Los datos deben estar en una ubicación a la que pueda acceder tu código. Por lo general, esto significa que se debe almacenar con uno de los servicios de almacenamiento de Google Cloud o de macrodatos.

Datos de salida

Es común que las aplicaciones generen datos, incluidos los puntos de control durante el entrenamiento y un modelo guardado cuando se completa el entrenamiento. Puedes generar otros datos según lo requiera tu aplicación. Es más fácil guardar los archivos de salida en un bucket de Cloud Storage en el mismo proyecto de Google Cloud que tu trabajo de entrenamiento.

Compila trabajos de entrenamiento que sean resistentes a los reinicios de VM

En ocasiones, las VM de Google Cloud se reinician. Para garantizar que tu trabajo de entrenamiento sea resistente a estos reinicios, guarda los puntos de control del modelo con frecuencia y configura tu trabajo para restablecer el punto de control más reciente.

Por lo general, debes guardar los puntos de control del modelo en la ruta de Cloud Storage que especifiques con el argumento --job-dir en el comando gcloud ai-platform jobs submit training.

La API de Estimator de TensorFlow implementa la funcionalidad de punto de control para ti. Si tu modelo está unido a un Estimator, no tienes que preocuparte por los eventos de reinicio de tus VM.

Si no puedes unir tu modelo a un Estimator de TensorFlow, escribe la funcionalidad a fin de guardar y restablecer los puntos de control en tu código de entrenamiento. TensorFlow proporciona los recursos útiles siguientes en el módulo tf.train:

Entrenamiento con GPU

Puedes ejecutar tus trabajos de entrenamiento en AI Platform Training con unidades de procesamiento de gráficos (GPU). Las GPU están diseñadas para realizar operaciones matemáticamente intensivas a alta velocidad. Pueden ser más efectivas para ejecutar ciertas operaciones en datos del tensor que agregar otra máquina con uno o más núcleos de CPU.

El servicio de entrenamiento de AI Platform Training no proporciona ninguna interfaz especial para trabajar con GPU. Puedes especificar máquinas habilitadas para GPU a fin de que ejecuten el trabajo, y el servicio las asigna por ti. Por ejemplo, en un trabajo de entrenamiento de TensorFlow, puedes asignar operaciones de TensorFlow a las GPU en tu código. Cuando especificas un tipo de máquina con acceso GPU para un tipo de tarea, cada instancia asignada a ese tipo de tarea se configura de manera idéntica (como siempre): el servicio ejecuta una única réplica de tu código en cada máquina.

Si estás entrenando con un marco de trabajo de aprendizaje automático diferente y usas un contenedor personalizado, ese marco puede proporcionar una interfaz diferente para trabajar con GPU.

Algunos modelos no se benefician de ejecutarse en GPU. Recomendamos GPU para modelos grandes y complejos que tienen muchas operaciones matemáticas. Incluso en ese caso, deberías probar el beneficio de la asistencia de GPU si ejecutas una pequeña muestra de tus datos a través del entrenamiento.

Consulta cómo usar GPU para tu trabajo de entrenamiento.

Cómo entrenar con TPU

Puedes ejecutar tus trabajos de entrenamiento en AI Platform Training con Cloud TPU.

Consulta usa TPU para tu trabajo de entrenamiento.

¿Qué sigue?