Cómo especificar tipos de máquina o niveles de escala

Cuando ejecutes un trabajo de entrenamiento en Cloud ML Engine, debes especificar el número y los tipos de máquina que necesitas. Para facilitar el proceso, puedes elegir entre un conjunto de especificaciones de clúster predefinidas llamadas niveles de escala. Alternativamente, 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 del nivel de escala y los tipos de máquina en el archivo de configuración. Este archivo puede llamarse como quieras. Por regla general, el nombre es config.yaml.

El siguiente ejemplo muestra los contenidos del archivo de configuración, config.yaml, para un trabajo con un clúster de procesamiento personalizado.

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3

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

gcloud ml-engine 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

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': 'complex_model_m',
    'workerType': 'complex_model_m',
    'parameterServerType': 'large_model',
    'workerCount': 9,
    'parameterServerCount': 3,
    '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': '1.12',
    'pythonVersion': '3.5'}

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 quieras. Sin embargo, las claves de diccionario deben nombrarse exactamente como se muestra, para que los nombres coincidan en 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.

Aquí tienes los identificadores del nivel de escala:

Nivel de escala de Cloud ML Engine
BASIC

Una sola instancia de trabajador. Este nivel es adecuado para aprender cómo usar Cloud ML Engine y para experimentar con nuevos modelos usando 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.

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.

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.

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

BASIC_TPU (Beta)

Una VM principal y una Cloud TPU. Consulta cómo usar TPU para tu trabajo de entrenamiento.

Nombre de la máquina de Compute Engine, principal: n1-standard-4, trabajadores: Cloud TPU

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:
  • Debes configurar TrainingInput.masterType para 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 el número de trabajadores que usarás. Si especificas uno o más trabajadores, también debes configurar TrainingInput.workerType para especificar el tipo de máquina que usarás para tus nodos trabajadores.
  • Puedes configurar TrainingInput.parameterServerCount para especificar el número de servidores de parámetros que usarás. Si especificas uno o más servidores de parámetros, también debes configurar TrainingInput.parameterServerType para especificar el tipo de máquina que usarás para tus servidores de parámetros.

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 ml-engine jobs submit training para enviar tu trabajo de entrenamiento, puedes usar los mismos identificadores:

  • Configura el nivel de escala (scaleTier) en CUSTOM.
  • Configura los valores para el número de servidores de parámetros (parameterServerCount) y trabajadores (workerCount) que necesitas.
  • Configura el tipo de máquina para tu trabajador principal (masterType), los servidores de parámetros (parameterServerType) y los trabajadores (workerType). Puedes especificar diferentes tipos de máquinas para masterType, parameterServerType y workerType, pero no puedes usar diferentes tipos de máquinas para instancias individuales. Por ejemplo, puedes usar un tipo de máquina large_model para tus servidores de parámetros, pero no puedes configurar algunos servidores de parámetros para que usen large_model y otros complex_model_m.
  • 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: complex_model_m
    

Aquí tienes los identificadores del tipo de máquina:

Nombre de la máquina de Cloud ML Engine
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.

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.

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.

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.

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.

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.

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.

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.

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.

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

cloud_tpu

Una VM TPU que incluye una Cloud TPU. La disponibilidad de Cloud TPU está en la etapa de lanzamiento Beta.

Para obtener más información sobre las unidades de procesamiento de gráficos (GPU), lee sobre el entrenamiento con GPU. Para obtener más información sobre Unidades de procesamiento tensorial (TPU), consulta cómo usar TPU para tu trabajo de entrenamiento.

Cómo comparar tipos de máquina

Las especificaciones exactas de los tipos de máquina están sujetas a cambios en cualquier momento. La tabla a continuación proporciona información que puedes usar para comparar los tipos de máquinas en términos de capacidad relativa.

Tipo de máquina Nombre de la máquina de Compute Engine CPU virtuales GPU / TPU Memoria (GB)
estándar n1-standard-4 4 - 15
large_model n1-highmem-8 8 - 52
complex_model_s n1-highcpu-8 8 - 7.20
complex_model_m n1-highcpu-16 16 - 14.4
complex_model_l n1-highcpu-32 32 - 28.8
standard_gpu n1-standard-8 8 1 (GPU K80) 30
complex_model_m_gpu n1-standard-16 16 4 (GPU K80) 60
complex_model_l_gpu n1-standard-32 32 8 (GPU K80) 120
standard_p100 n1-standard-8 8 1 (GPU P100) 30
complex_model_m_p100 n1-standard-16 16 4 (GPU P100) 60
standard_v100 n1-standard-8 8 1 (GPU V100) 30
large_model_v100 n1-highmem-8 16 1 (GPU V100) 52
complex_model_m_v100 n1-standard-16 16 4 (GPU V100) 60
complex_model_l_v100 n1-standard-32 32 8 (GPU V100) 120
cloud_tpu (Beta) personalizado 8 (núcleos de TPU)

Pasos siguientes

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

Enviar comentarios sobre…

Cloud ML Engine para TensorFlow