Especifica tipos de máquinas o 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.

Cómo especificar tu configuración

La forma en la que especificas la configuración de tu clúster depende de cómo planeas ejecutar tu trabajo de entrenamiento:

gcloud

Crea un archivo de configuración YAML que represente el objeto TrainingInput y especifica el identificador de nivel de escala y los tipos de máquina en el archivo de configuración. Puedes nombrar este archivo como desees. Por regla general, el nombre es config.yaml.

En el ejemplo siguiente, se muestra el contenido del archivo de configuración, config.yaml, para un trabajo con un clúster de procesamiento personalizado.

trainingInput:
  scaleTier: CUSTOM
  masterType: n1-highcpu-16
  workerType: n1-highcpu-16
  parameterServerType: n1-highmem-8
  evaluatorType: n1-highcpu-16
  workerCount: 9
  parameterServerCount: 3
  evaluatorCount: 1

Proporciona la ruta al archivo YAML en la marca --config cuando ejecutes el comando gcloud ai-platform jobs submit training:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \ 
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Como alternativa, puedes especificar los detalles de la configuración del clúster con marcas de la línea de comandos, en lugar de un archivo de configuración. Obtén más información sobre cómo usar estas marcas.

En el siguiente ejemplo, se muestra cómo enviar un trabajo de entrenamiento con una configuración similar a la del ejemplo anterior, pero sin usar un archivo de configuración:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --worker-machine-type n1-highcpu-16 \
        --parameter-server-machine-type n1-highmem-8 \
        --worker-count 9 \
        --parameter-server-count 3 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Consulta más detalles sobre cómo ejecutar un trabajo de entrenamiento.

Python

Especifica el identificador del nivel de escala y los tipos de máquina en el objeto TrainingInput en la configuración de tu trabajo.

El siguiente ejemplo muestra cómo compilar una representación de trabajo para un trabajo con un clúster de procesamiento personalizado.

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'n1-highcpu-16',
    'workerType': 'n1-highcpu-16',
    'parameterServerType': 'n1-highmem-8',
    'evaluatorType': 'n1-highcpu-16',
    'workerCount': 9,
    'parameterServerCount': 3,
    'evaluatorCount': 1,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.6',
    'pythonVersion': '3.7'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

Ten en cuenta que training_inputs y job_spec son identificadores arbitrarios: puedes nombrar estos diccionarios como desees. Sin embargo, las claves del diccionario se deben nombrar tal como se muestra para que coincidan los nombres de los recursos Job y TrainingInput.

Niveles de escala

Google puede optimizar la configuración de los niveles de escala para diferentes trabajos en el tiempo, en función de los comentarios del cliente y de la disponibilidad de los recursos de la nube. Cada nivel de escala se define en términos de su idoneidad para ciertos tipos de trabajos. Generalmente, cuanto más avanzado es el nivel, más máquinas se asignan al clúster y más poderosas son las especificaciones de cada máquina virtual. A medida que aumentas la complejidad del nivel de escala, también aumenta el costo por hora de los trabajos de entrenamiento, que se mide en unidades de entrenamiento. Consulta la página de precios para calcular el costo de tu trabajo.

AI Platform Training no es compatible con el entrenamiento distribuido ni con el entrenamiento con aceleradores para el código de scikit-learn o XGBoost. Si tu trabajo de entrenamiento ejecuta código de scikit-learn o XGBoost, debes configurar el nivel de escala como BASIC o CUSTOM.

A continuación, se describen los identificadores de nivel de escala:

Nivel de escala de AI Platform Training
BASIC

Una sola instancia de trabajador Este nivel es adecuado para aprender a usar AI Platform Training y experimentar con modelos nuevos mediante conjuntos de datos pequeños.

Nombre de la máquina de Compute Engine: n1-standard-4

STANDARD_1

Una instancia principal, más cuatro trabajadores y tres servidores de parámetros. Usa este nivel de escala solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine, principal: n1-highcpu-8 trabajadores: n1-highcpu-8, servidores de parámetros: n1-standard-4

PREMIUM_1

Una instancia principal, más 19 trabajadores y 11 servidores de parámetros. Usa este nivel de escala solo si estás entrenando con TensorFlow o si usas contenedores personalizados.

Nombre de la máquina de Compute Engine principal: n1-highcpu-16, trabajadores: n1-highcpu-16, servidores de parámetros: n1-highmem-8

BASIC_GPU

Una sola instancia de trabajador con una sola GPU NVIDIA Tesla K80. Para obtener más información sobre las unidades de procesamiento de gráficos (GPU), consulta la sección sobre entrenamiento con GPU. Usa este nivel de escala solo si estás entrenando con TensorFlow o si usas un contenedor personalizado.

Nombre de la máquina de Compute Engine: n1-standard-8 con una GPU k80

BASIC_TPU

Una VM principal y un Cloud TPU con ocho núcleos de TPU v2. Consulta cómo usar TPU para tu trabajo de entrenamiento. Usa este nivel de escala solo si estás entrenando con TensorFlow o si usas contenedores personalizados.

Nombre de la máquina de Compute Engine principal: n1-standard-4, trabajadores: Cloud TPU (8 núcleos de TPU v2)

CUSTOM

El nivel CUSTOM no es un nivel establecido, sino que te permite usar tu propia especificación de clúster. Cuando usas este nivel, establece valores para configurar tu clúster de procesamiento según estos lineamientos:

  • Debe configurar TrainingInput.masterType a fin de especificar el tipo de máquina que usarás para tu nodo principal. Esta es la única configuración obligatoria. Consulta los tipos de máquinas que se describen a continuación.
  • Puedes configurar TrainingInput.workerCount para especificar la cantidad de trabajadores que usarás. Si especificas uno o más trabajadores, también debes configurar TrainingInput.workerType a fin de especificar el tipo de máquina que usarás para tus nodos trabajadores. Especifica trabajadores solo si entrenas con TensorFlow o si usas contenedores personalizados.
  • Puedes configurar TrainingInput.parameterServerCount a fin de especificar la cantidad de servidores de parámetros que usarás. Si especificas uno o más servidores de parámetros, también debes configurar TrainingInput.parameterServerType a fin de especificar el tipo de máquina que usarás para tus servidores de parámetros. Especifica servidores de parámetros solo si entrenas con TensorFlow o si usas contenedores personalizados.
  • Puedes configurar TrainingInput.evaluatorCount para especificar la cantidad de evaluadores que se usarán. Si especificas uno o más evaluadores, también deberás configurar TrainingInput.evaluatorType a fin de especificar el tipo de máquina que se usará para los evaluadores. Especifica evaluadores solo si entrenas con TensorFlow o si usas contenedores personalizados.

Tipos de máquina para el nivel de escala personalizado

Usa un nivel de escala personalizado para tener un control más preciso sobre el clúster de procesamiento que usas para entrenar tu modelo. Especifica la configuración en el objeto TrainingInput en la configuración de tu trabajo. Si usas el comando gcloud ai-platform jobs submit training para enviar el trabajo de entrenamiento, puedes usar los mismos identificadores:

  • Establece el nivel de escala (scaleTier) en CUSTOM.

  • Establece valores para la cantidad de trabajadores (workerCount), servidores de parámetros (parameterServerCount) y evaluadores (evaluatorCount) que necesitas.

    AI Platform Training solo admite entrenamiento distribuido cuando entrenas con TensorFlow o usas un contenedor personalizado. Si tu trabajo de entrenamiento ejecuta código de scikit-learn o XGBoost, no debes especificar trabajadores, servidores de parámetros ni evaluadores.

  • Establece el tipo de máquina del trabajador principal (masterType). Si elegiste usar trabajadores, servidores de parámetros o evaluadores, configura los tipos de máquinas para ellos en los campos workerType, parameterServerType y evaluatorType, respectivamente.

    Puedes especificar diferentes tipos de máquinas para masterType, workerType, parameterServerType y evaluatorType, pero no puedes usar diferentes tipos de máquinas con instancias individuales. Por ejemplo, puedes usar un tipo de máquina n1-highmem-8 para tus servidores de parámetros, pero no puedes configurar algunos servidores de parámetros a fin de usar n1-highmem-8 y otros a fin de usar n1-highcpu-16.

  • Si solo necesitas un trabajador con una configuración personalizada (no un clúster completo), debes especificar un nivel de escala personalizado con un tipo de máquina solo para el principal. Eso te da solo un trabajador. Este es un archivo config.yaml de ejemplo:

    trainingInput:
      scaleTier: CUSTOM
      masterType: n1-highcpu-16
    

Tipos de máquina de Compute Engine

Puedes usar los nombres de determinados tipos predefinidos de máquinas de Compute Engine para masterType, workerType, parameterServerType y evaluatorType de tu trabajo. Si entrenas con TensorFlow o usas contenedores personalizados, puedes usar varios tipos de GPU con estos tipos de máquinas de forma opcional.

A continuación, la lista siguiente contiene los identificadores de tipo de máquina de Compute Engine que puedes usar para tu trabajo de entrenamiento:

  • e2-standard-4
  • e2-standard-8
  • e2-standard-16
  • e2-standard-32
  • e2-highmem-2
  • e2-highmem-4
  • e2-highmem-8
  • e2-highmem-16
  • e2-highcpu-16
  • e2-highcpu-32
  • n2-standard-4
  • n2-standard-8
  • n2-standard-16
  • n2-standard-32
  • n2-standard-48
  • n2-standard-64
  • n2-standard-80
  • n2-highmem-2
  • n2-highmem-4
  • n2-highmem-8
  • n2-highmem-16
  • n2-highmem-32
  • n2-highmem-48
  • n2-highmem-64
  • n2-highmem-80
  • n2-highcpu-16
  • n2-highcpu-32
  • n2-highcpu-48
  • n2-highcpu-64
  • n2-highcpu-80
  • n1-standard-4
  • n1-standard-8
  • n1-standard-16
  • n1-standard-32
  • n1-standard-64
  • n1-standard-96
  • n1-highmem-2
  • n1-highmem-4
  • n1-highmem-8
  • n1-highmem-16
  • n1-highmem-32
  • n1-highmem-64
  • n1-highmem-96
  • n1-highcpu-16
  • n1-highcpu-32
  • n1-highcpu-64
  • n1-highcpu-96
  • c2-standard-4
  • c2-standard-8
  • c2-standard-16
  • c2-standard-30
  • c2-standard-60
  • a2-highgpu-1g* (vista previa)
  • a2-highgpu-2g* (vista previa)
  • a2-highgpu-4g* (vista previa)
  • a2-highgpu-8g* (vista previa)
  • a2-megagpu-16g* (vista previa)

Para obtener más información sobre las especificaciones técnicas de cada tipo de máquina, consulta la documentación de Compute Engine sobre tipos de máquinas.

Tipos de máquina heredada

En lugar de usar los tipos de máquina de Compute Engine para tu trabajo, puedes especificar nombres de los tipos de máquina heredados. Estos tipos de máquinas proporcionan la misma CPU virtual y los recursos de memoria equivalentes a los tipos de máquinas de Compute Engine, pero tienen limitaciones de configuración adicionales:

  • No puedes personalizar el uso de GPU con una acceleratorConfig. Sin embargo, algunos tipos de máquinas heredadas incluyen GPU. Consulta la tabla siguiente:

  • Si la configuración de tu trabajo de entrenamiento usa varias máquinas, no puedes combinar los tipos de máquinas de Compute Engine con los tipos de máquinas heredados. El trabajador principal, los trabajadores, los servidores de parámetros y los evaluadores deben usar tipos de máquinas de un grupo o de otro.

    Por ejemplo, si configuras masterType para que sea n1-highcpu-32 (un tipo de máquina de Compute Engine), no puedes establecer workerType en complex_model_m (un tipo de máquina heredado), pero puedes configurarlo como n1-highcpu-16 (otro tipo de máquina de Compute Engine).

En la siguiente tabla, se describen los tipos de máquinas heredadas:

Tipos de máquinas heredadas
standard

Una configuración de máquina básica adecuada para el entrenamiento de modelos simples con conjuntos de datos de pequeños a moderados.

Nombre de la máquina de Compute Engine: n1-standard-4

large_model

Una máquina con mucha memoria, especialmente adecuada para servidores de parámetros cuando tu modelo es grande (tiene muchas capas ocultas o capas con un gran número de nodos).

Nombre de la máquina de Compute Engine: n1-highmem-8

complex_model_s

Una máquina adecuada para el principal y los trabajadores del clúster cuando tu modelo requiere más procesamiento de lo que la máquina estándar puede controlar de manera satisfactoria.

Nombre de la máquina de Compute Engine: n1-highcpu-8

complex_model_m

Una máquina con aproximadamente el doble de núcleos y el doble de memoria de complex_model_s.

Nombre de la máquina de Compute Engine: n1-highcpu-16

complex_model_l

Una máquina con aproximadamente el doble de núcleos y el doble de memoria de complex_model_m.

Nombre de la máquina de Compute Engine: n1-highcpu-32

standard_gpu

Una máquina equivalente a la estándar que también incluye una sola GPU NVIDIA Tesla K80. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-8 con una GPU k80

complex_model_m_gpu

Una máquina equivalente a complex_model_m que también incluye cuatro GPU NVIDIA Tesla K80. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si usas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-16-k80x4

complex_model_l_gpu

Una máquina equivalente a complex_model_l que también incluye ocho GPU NVIDIA Tesla K80. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si usas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-32-k80x8

standard_p100

Una máquina equivalente a la estándar que también incluye una sola GPU NVIDIA Tesla P100. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-8-p100x1

complex_model_m_p100

Una máquina equivalente a complex_model_m que también incluye cuatro GPU NVIDIA Tesla P100. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-16-p100x4

standard_v100

Una máquina equivalente a la estándar que también incluye una sola GPU NVIDIA Tesla V100. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-8-v100x1

large_model_v100

Una máquina equivalente a large_model que también incluye una sola GPU NVIDIA Tesla V100. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-highmem-8-v100x1

complex_model_m_v100

Una máquina equivalente a complex_model_m que también incluye cuatro GPU NVIDIA Tesla V100. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si usas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-16-v100x4

complex_model_l_v100

Una máquina equivalente a complex_model_l que también incluye ocho GPU NVIDIA Tesla V100. Usa este tipo de máquina solo si estás entrenando con TensorFlow o si utilizas contenedores personalizados.

Nombre de la máquina de Compute Engine: n1-standard-32-v100x8

Entrena con GPU y TPU

Algunos niveles de escala y tipos de máquinas heredadas incluyen unidades de procesamiento de gráficos (GPU). También puedes conectar tu selección de varias GPU si usas un tipo de máquina de Compute Engine. Para obtener más información, lee sobre el entrenamiento con GPU.

Si quieres realizar el entrenamiento con unidades de procesamiento tensorial (TPU), debes usar el nivel de escala BASIC_TPU o el tipo de máquina cloud_tpu. El tipo de máquina cloud_tpu cuenta con opciones de configuración especiales: puedes usarlo con tipos de máquinas de Compute Engine o heredados. También puedes configurar 8 núcleos TPU v2 o, también, 8 núcleos TPU v3. Lee sobre cómo usar TPU para tu trabajo de entrenamiento.

¿Qué sigue?