Cómo ejecutar un trabajo de entrenamiento

AI Platform 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 mediante el comando gcloud ai-platform jobs submit training desde la línea de comandos o mediante 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 herramienta de 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

Para pasar tus parámetros al servicio de entrenamiento, configura los miembros del recurso Job, incluidos los elementos del recurso TrainingInput.

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

  • Especifica los parámetros de entrenamiento más comunes como marcas del comando gcloud ai-platform 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 duplica 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 ai-platform 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 AI Platform.
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 AI Platform para usar en el trabajo. Si no especificas una versión del entorno de ejecución, el servicio de entrenamiento usa la versión 1.0 predeterminada del entorno de ejecución de AI Platform.

Versión de Python (pythonVersion)

La versión de Python que se va a usar en el trabajo. Python 3.5 está disponible con la versión 1.4 o superior del entorno de ejecución de AI Platform. 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 ai-platform 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, debes proporcionar la marca --region o configurar una región predeterminada para tu cliente de 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
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
  runtimeVersion: '1.13'
  pythonVersion: '3.5'

El ejemplo anterior 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 AI Platform.

Python

Cuando envíes un trabajo de entrenamiento con la biblioteca cliente de las API de Google para Python, establece tu configuración en un diccionario con la misma estructura del recurso Job. Esto adopta la forma de un diccionario con dos claves: jobId y trainingInput, con sus respectivos datos que son el nombre del trabajo y un segundo diccionario con claves para los objetos del 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',
    '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.13',
    '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 del diccionario se deben nombrar exactamente como se muestra para que coincidan con los nombres en los recursos Job y TrainingInput.

El ejemplo anterior 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 AI Platform.

Cómo enviar el trabajo

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

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

Crea tu trabajo:

gcloud

Envía un trabajo de entrenamiento con el comando gcloud ai-platform 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.13"

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 mediante marcas de la línea de comandos. No es necesario un archivo config.yaml:

gcloud ai-platform 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 demás detalles a través de las marcas de línea de comandos:

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

Notas:

  • Si especificas una opción tanto en tu archivo de configuración (config.yaml) como en una marca de 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 de AI Platform, como --module-name, --runtime-version y --job-dir, deben aparecer antes de la marca vacía --. El servicio de AI Platform interpreta estas marcas.
  • La marca --job-dir, si se especifica, debe aparecer antes de la marca vacía --, debido a que AI Platform usa --job-dir para validar la ruta.
  • Tu aplicación también debe controlar la marca --job-dir, si se especifica. Aunque la marca aparezca antes de la -- vacía, el --job-dir también se pasa a tu aplicación como marca de línea de comandos.
  • Puedes definir tantos USER_ARGS como necesites. AI Platform pasa --user_first_arg, --user_second_arg, y así sucesivamente, a través de tu aplicación.

Python

Puedes usar la biblioteca cliente de las API de Google para Python a fin de llamar a la API de entrenamiento y predicción de AI Platform sin construir 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 AI Platform:

    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())
    

Pasos siguientes

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

Enviar comentarios sobre…

Cloud ML Engine para TensorFlow