Entrenamiento distribuido con contenedores

En esta página, se explica cómo los contenedores personalizados admiten la estructura de entrenamiento distribuido en AI Platform.

Con contenedores personalizados, puedes hacer un entrenamiento distribuido con cualquier marco de trabajo de AA que admita la distribución. Aunque la terminología usada aquí se basa en el modelo distribuido de TensorFlow, puedes usar cualquier otro marco de trabajo de AA que tenga una estructura de distribución similar. Por ejemplo, el entrenamiento distribuido en MXNet usa un programador, trabajadores y servidores. Esto se corresponde con la estructura de entrenamiento distribuido de los contenedores personalizados de AI Platform, que usa una instancia principal, trabajadores y servidores de parámetros.

Estructura del clúster de entrenamiento

Si ejecutas un trabajo de entrenamiento distribuido con AI Platform, especifica varias máquinas (nodos) en un clúster de entrenamiento. El servicio de entrenamiento asigna los recursos para los tipos de máquina que especifiques. Tu trabajo en ejecución en un nodo dado 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:

  • Instancia principal: se designa exactamente una réplica como instancia principal. Esta tarea administra las demás y también informa el estado del trabajo en su conjunto.

  • Trabajadores: se puede 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 almacenan los parámetros del modelo y coordinan el estado del modelo compartido entre los trabajadores.

Asignación API

Las tres funciones diferentes que les puedes asignar a las máquinas en tu clúster de entrenamiento corresponden a tres campos que puedes especificar en TrainingInput, que representa los parámetros de entrada para un trabajo de entrenamiento:

  • masterConfig.imageUri representa el URI de la imagen del contenedor que se ejecutará en la instancia principal.
  • workerConfig.imageUri y parameterServerConfig.imageUri representan el URI de la imagen del contenedor que se ejecutará en los trabajadores y en los servidores de parámetros, respectivamente. Si no se configura ningún valor para estos campos, AI Platform usa el valor de masterConfig.imageUri.

También puedes configurar los valores para cada uno de estos campos con sus marcas correspondientes en gcloud beta ai-platform jobs submit training:

  • Para la configuración de la instancia principal, usa --master-image-uri.
  • Para la configuración del trabajador, usa --worker-image-uri.
  • Para la configuración del servidor de parámetros, usa --parameter-server-image-uri.

Consulta un ejemplo de cómo enviar un trabajo de entrenamiento distribuido con contenedores personalizados.

Entiende CLUSTER_SPEC

AI Platform propaga una variable de entorno, CLUSTER_SPEC, en cada réplica para describir cómo se configura el clúster general. Al igual que TF_CONFIG de TensorFlow, CLUSTER_SPEC describe todas las réplicas del clúster, incluidos su índice y función (instancia principal, trabajador o servidor de parámetros).

Cuando ejecutas el entrenamiento distribuido con TensorFlow, se analiza TF_CONFIG para construir tf.train.ClusterSpec. Del mismo modo, cuando ejecutas el entrenamiento distribuido con otros marcos de trabajo de AA, debes analizar CLUSTER_SPEC para propagar cualquier variable de entorno o configuración que requiera el marco de trabajo.

El formato de CLUSTER_SPEC

La variable de entorno CLUSTER_SPEC es una string JSON con el siguiente formato:

Clave Descripción
"cluster" La descripción del clúster para su contenedor personalizado. Al igual que con `TF_CONFIG`, este objeto tiene el formato de una especificación de clúster de TensorFlow, y se puede pasar al constructor de tf.train.ClusterSpec.
"task" Describe la tarea del nodo particular en el que se está ejecutando tu código. Puedes usar esta información a fin de escribir código para trabajadores específicos en un trabajo distribuido. Esta entrada es un diccionario con las siguientes claves:
"type" El tipo de tarea que realiza este nodo. Los valores posibles son master, worker y ps.
"index" El índice basado en cero de la tarea. La mayoría de los trabajos de entrenamiento distribuido tienen una tarea principal única, uno o más servidores de parámetros y uno o más trabajadores.
"trial" El identificador de la prueba de ajuste de hiperparámetros que se está ejecutando actualmente. Cuando configuras el ajuste de hiperparámetros de tu trabajo, estableces una cantidad de pruebas para entrenar. Este valor te proporciona una forma de diferenciar en tu código las pruebas que se están ejecutando. El identificador es un valor de string que contiene el número de prueba, que comienza en 1.
"job" Los parámetros de trabajo que usaste al momento de iniciar el trabajo. En la mayoría de los casos, puedes ignorar esta entrada, dado que replica los datos que se pasaron a tu aplicación a través de los argumentos de su línea de comandos.

Compatibilidad con TensorFlow

El entrenamiento distribuido con TensorFlow funciona de la misma manera con los contenedores personalizados en AI Platform que con el código de entrenamiento activo en las versiones del entorno de ejecución de AI Platform. En ambos casos, AI Platform propaga TF_CONFIG para ti. Si usas contenedores personalizados para ejecutar el entrenamiento distribuido con TensorFlow, AI Platform propaga tanto TF_CONFIG como CLUSTER_SPEC para ti.

Si usas la API de Estimator de TensorFlow, TensorFlow analiza TF_CONFIG para crear la especificación de clúster automáticamente. Si usas la API principal, debes crear la especificación de clúster a partir de TF_CONFIG en tu aplicación de entrenamiento.

Consulta más detalles y ejemplos sobre cómo usar TF_CONFIG para el entrenamiento distribuido en AI Platform.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…