Ejecuta un trabajo de entrenamiento

Cloud Machine Learning Engine proporciona entrenamiento de modelos como un servicio asíncrono (por lotes). En esta página, se describe cómo configurar y enviar un trabajo de entrenamiento cuando ejecutas gcloud ml-engine jobs submit training de la línea de comandos o cuando envías una solicitud a la API en projects.jobs.create.

Antes de comenzar

Antes de que puedas enviar un trabajo de entrenamiento, debes empaquetar tu aplicación y subirla, así como las dependencias inusuales a un depósito de Cloud Storage. Nota: Si usas la línea de comandos de gcloud para enviar tu trabajo, puedes empaquetar la aplicación y enviar el trabajo en el mismo paso.

Configura el trabajo

Pasa tus parámetros al servicio de entrenamiento cuando configures los miembros del recurso Job, que incluye los artículos en el recurso TrainingInput.

Si usas la herramienta de línea de comandos de gcloud para enviar tus trabajos de capacitación, puedes seguir las siguientes acciones:

  • Especifica los parámetros de entrenamiento más comunes como marcas del comando gcloud ml-engine jobs submit training.
  • Pasa los parámetros restantes a un archivo de configuración YAML, denominados config.yaml por regla general. El archivo de configuración refleja la estructura de la representación JSON del recurso Job. Pasa la ruta de tu archivo de configuración en la marca --config del comando gcloud ml-engine jobs submit training. Entonces, si la ruta a tu archivo de configuración es config.yaml, debes configurar --config=config.yaml.

Recopila los datos de configuración del trabajo

Las siguientes propiedades se usan para definir tu trabajo.

Nombre del trabajo (jobId)
Un nombre que se use para el trabajo (combinaciones de mayúsculas y minúsculas, números y guiones bajos, que comience con una letra).
Configuración del clúster (scaleTier)
Un nivel de escala que especifique el tipo de clúster de procesamiento para ejecutar tu trabajo. Esto puede ser a nivel de escala CUSTOM, en cuyo caso también especificas explícitamente la cantidad y el tipo de máquinas que quieres usar.
Paquete de aplicación de entrenamiento (packageUris)
Una aplicación de entrenamiento empaquetada que está habilitada a etapa en una ubicación de Cloud Storage. Si usas la herramienta de línea de comandos de gcloud, el paso de empaquetado de la aplicación está automatizado en gran medida. Consulta los detalles en la guía empaqueta tu aplicación.
Nombre del módulo (pythonModule)
El nombre del módulo principal en tu paquete. El módulo principal es el archivo Python que llamas para iniciar la aplicación. Si usas el comando de gcloud para enviar tu trabajo, especifica el nombre del módulo principal en la marca --module-name. Consulta la guía para empaquetar tu aplicación.
Región (region)
La región de Compute Engine en donde quieres que tu trabajo se ejecute. Debes ejecutar tu trabajo de entrenamiento en la misma región que el depósito de Cloud Storage que almacena tus datos de entrenamiento. Consulta las regiones disponibles para los servicios de Cloud ML Engine.
Directorio de trabajo (jobDir)
La ruta a una ubicación de Cloud Storage para usarla en la salida del trabajo. La mayoría de las aplicaciones de entrenamiento guardan puntos de control durante el entrenamiento y el modelo entrenado en un archivo al final del trabajo. Necesitas una ubicación de Cloud Storage para guardarlos. Tu proyecto de Google Cloud Platform debe tener acceso de escritura a este depósito. El servicio de entrenamiento pasa automáticamente la ruta que estableciste para el directorio de trabajo a tu aplicación de entrenamiento como un argumento de línea de comandos denominado job_dir. Puedes analizarlo junto con los otros argumentos de tu aplicación y usarlo en tu código. La ventaja de usar el directorio de trabajo es que el servicio de entrenamiento valida el directorio antes de iniciar tu aplicación.
Versión del entorno de ejecución (runtimeVersion)

La versión de Cloud ML Engine que se usará para el trabajo.

Versión de Python (pythonVersion)

La versión de Python que se va a usar en el trabajo. Python 3.5 está disponible para la versión 1.4 o superior del entorno de ejecución de Cloud ML Engine. Si no especificas una versión de Python, el servicio de entrenamiento usa Python 2.7.

Dales formato a tus parámetros de configuración

La forma en que especificas los detalles de tu configuración depende de cómo comienzas tu trabajo de entrenamiento:

gcloud

Proporciona los detalles de configuración del trabajo al comando gcloud ml-engine jobs submit training. Puedes hacerlo de dos maneras:

  • Con marcas de línea de comandos.
  • En un archivo YAML que represente el recurso Job. Puedes nombrar este archivo como desees. Por regla general, el nombre es config.yaml.

Incluso si usas un archivo YAML, ciertos detalles se deben proporcionar como indicadores de línea de comandos. Por ejemplo, debes proporcionar la marca --module-name y al menos una de --package-path o --packages. Si usas --package-path, también debes incluir --job-dir o --staging-bucket. Además, también debes proporcionar la marca --region o configurar una región predeterminada para tu cliente gcloud. Estas opciones, y cualquier otra que proporciones como marcas de línea de comandos, anularán los valores de esas opciones en tu archivo de configuración.

Ejemplo 1: En este ejemplo, eliges un clúster de máquinas preconfiguradas y suministras todos los detalles requeridos como marcas de línea de comandos cuando envías el trabajo No se requiere ningún archivo de configuración. Consulta la guía envía el trabajo en la siguiente sección.

Ejemplo 2: En el siguiente ejemplo, se muestra el contenido del archivo de configuración para un trabajo con un clúster de procesamiento personalizado. El archivo de configuración incluye algunos, pero no todos los detalles de configuración y supone que proporcionas los otros detalles requeridos como las marcas de línea de comandos cuando envías el trabajo.

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  runtimeVersion: '1.12'
  pythonVersion: '3.5'

En el ejemplo anterior, se especifica la versión 3.5 de Python, que está disponible cuando se usa la versión 1.4 o superior del entorno de ejecución de Cloud ML Engine.

Python

Cuando envías un trabajo con la API de Google de la biblioteca cliente para Python, establece tu configuración en un diccionario con la misma estructura del recurso Job. Esto toma la forma de un diccionario con dos claves: jobId y trainingInput, con sus respectivos datos como nombre del trabajo y un segundo diccionario con claves para los objetos en el recurso TrainingInput.

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',
    '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 desees. Sin embargo, las claves de diccionario se deben nombrar exactamente como se muestra para que los nombres coincidan en los recursos Job y TrainingInput.

En el ejemplo anterior, se especifica la versión 3.5 de Python, que está disponible cuando se usa la versión 1.4 o superior del entorno de ejecución de Cloud ML Engine.

Envía el trabajo

Cuando envíes un trabajo de entrenamiento, especifica dos conjuntos de marcas:

  • Parámetros de configuración del trabajo. Cloud ML Engine necesita estos valores para configurar los recursos en la nube, así como implementar tu aplicación en cada nodo del clúster de procesamiento.
  • Argumentos del usuario o parámetros de aplicación. Cloud ML Engine pasa el valor de estas marcas a tu aplicación.

Crea tu trabajo:

gcloud

Envía un trabajo de entrenamiento con el comando gcloud ml-engine jobs submit training.

Primero, es útil definir algunas variables de entorno que contienen tus detalles de configuración. Para crear un nombre de trabajo, el siguiente código agrega la fecha y la hora al nombre del modelo:

TRAINER_PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MAIN_TRAINER_MODULE="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
PACKAGE_STAGING_PATH="gs://your/chosen/staging/path"
REGION="us-east1"
RUNTIME_VERSION="1.12"

El siguiente envío de trabajos corresponde al ejemplo 1 de configuración anterior, en el que eliges un nivel de escala preconfigurado (basic) y decides proporcionar todos los detalles de configuración a través de las marcas de la línea de comandos. No es necesario un archivo config.yaml:

gcloud ml-engine jobs submit training $JOB_NAME \
        --scale-tier basic \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

El siguiente envío de trabajos corresponde al ejemplo 2 de configuración anterior, en el que parte de la configuración está en el archivo y en el que proporcionas los otros detalles a través de las marcas de la línea de comandos:

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

Notas:

  • Si especificas una opción tanto en tu archivo de configuración (config.yaml) como en una marca de la línea de comandos, el valor en la línea de comandos anula el valor en el archivo de configuración.
  • La marca vacía -- indica el final de las marcas específicas de gcloud y el inicio de los USER_ARGS que deseas pasar a tu aplicación.
  • Las marcas específicas para Cloud ML Engine, como --module-name, --runtime-version y --job-dir deben aparecer antes de la marca vacía --. El servicio de Cloud ML Engine interpreta estas marcas.
  • La marca --job-dir, si se especifica, debe aparecer antes de la marca vacía --, debido a que Cloud ML Engine usa --job-dir para validar la ruta.
  • Tu aplicación también debe controlar la marca --job-dir, si se especifica. Aunque la marca aparece antes del -- vacío, el --job-dir también se pasa a tu aplicación como marca de la línea de comandos.
  • Puedes definir tantos USER_ARGS como necesites. Cloud ML Engine pasa --user_first_arg, --user_second_arg, y así sucesivamente, mediante tu aplicación

Python

Puedes usar la biblioteca cliente de las API de Google para Python a fin de llamar a la API de Cloud Machine Learning Engine sin crear solicitudes HTTP de forma manual. Antes de ejecutar la siguiente muestra de código, debes configurar la autenticación.

  1. Guarda tu ID del proyecto en el formato que necesitan las API ('projects/_projectname'):

    project_name = 'my_project_name'
    project_id = 'projects/{}'.format(project_name)
    
  2. Obtén una representación de Python de los servicios de Cloud ML Engine:

    cloudml = discovery.build('ml', 'v1')
    
  3. Crea tu solicitud y envíala:

    request = cloudml.projects().jobs().create(body=job_spec,
                  parent=project_id)
    response = request.execute()
    
  4. Detecta cualquier error HTTP. La manera más sencilla es colocar el comando anterior en un bloque try:

    try:
        response = request.execute()
        # You can put your code for handling success (if any) here.
    
    except errors.HttpError, err:
        # Do whatever error response is appropriate for your application.
        # For this example, just send some text to the logs.
        # You need to import logging for this to work.
        logging.error('There was an error creating the training job.'
                      ' Check the details:')
        logging.error(err._get_reason())
    

¿Qué sigue?

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

Enviar comentarios sobre…

Cloud ML Engine para XGBoost y scikit-learn