Entrenamiento distribuido con contenedores

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

Con contenedores personalizados, puedes hacer un entrenamiento distribuido con cualquier framework 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 framework de AA que tenga una estructura de distribución similar. Por ejemplo, el entrenamiento distribuido en MXNet usa un programador, trabajadores y servidores. Esto es similar a la estructura del entrenamiento distribuido de los contenedores personalizados de AI Platform Training, 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 Training, debes especificar varias máquinas (nodos) en un clúster de entrenamiento. El servicio de entrenamiento asigna los recursos para los tipos de máquinas que especifiques. El 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:

  • Trabajador principal: Se designa solo una réplica como trabajador principal (también conocido como trabajador principal [chief]). Esta tarea administra las demás y también informa el estado del trabajo en su conjunto.

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

  • Evaluadores: Se puede designar una o más réplicas como evaluadores. Estas réplicas se pueden usar para evaluar el modelo. Si usas TensorFlow, ten en cuenta que, por lo general, TensorFlow espera que no uses más de un evaluador.

Asignación API

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

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

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

  • Para la configuración del trabajador 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.
  • En la actualidad, no existe una marca que se use a fin de especificar el URI de la imagen de contenedor para los evaluadores. Puedes especificar evaluatorConfig.imageUri en un archivo de configuración config.yaml.

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

Conoce CLUSTER_SPEC

AI Platform Training 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 cada réplica del clúster, incluidos el índice y la función (trabajador principal, trabajador, servidor de parámetros o evaluador).

Cuando ejecutas un entrenamiento distribuido con TensorFlow, se analiza TF_CONFIG para compilar tf.train.ClusterSpec. De manera similar, cuando ejecutas el entrenamiento distribuido con otros marcos de trabajo de AA, debes analizar CLUSTER_SPEC para propagar las variables de entorno o la configuración requerida por el marco.

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 de tu 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 el 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, ps y evaluator.
"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 la aplicación a través de los argumentos de su línea de comandos.

Comparación con TF_CONFIG

Ten en cuenta que AI Platform Training también establece la variable de entorno TF_CONFIG en cada réplica de todos los trabajos de entrenamiento. AI Platform Training solo establece la variable de entorno CLUSTER_SPEC en réplicas de trabajos de entrenamiento de contenedores personalizados. Las dos variables de entorno comparten algunos valores, pero tienen diferentes formatos.

Cuando entrenas con contenedores personalizados, la réplica principal se etiqueta en la variable de entorno TF_CONFIG con el nombre de tarea master de forma predeterminada. Puedes configurarla para que se etiquete con el nombre de tarea chief en su lugar si configuras el campo trainingInput.useChiefInTfConfig en true cuando creas el trabajo de entrenamiento; o si usas una o más réplicas de evaluador en el trabajo. Esto es muy útil si el contenedor personalizado usa TensorFlow 2.

Además de esta opción de configuración, el entrenamiento distribuido con TensorFlow funciona de la misma manera cuando usas contenedores personalizados que cuando usas una versión de entorno de ejecución de AI Platform Training. Obtén más información y ejemplos sobre cómo usar TF_CONFIG para el entrenamiento distribuido en AI Platform Training.

¿Qué sigue?