Ejecuta 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 la ejecución de gcloud ai-platform jobs submit training desde la línea de comandos o mediante el envío de 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 a fin de 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 acciones siguientes:

  • 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, denominado 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 de acceso al archivo de configuración es config.yaml, debes configurar --config=config.yaml.

Recopila los datos de configuración del trabajo

Las propiedades siguientes 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 de forma explícita 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 de 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 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 donde quieres que se ejecute tu trabajo. 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 servicios de AI Platform.
Directorio de trabajos (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 de forma automática la ruta que configuraste 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 de entorno de ejecución (runtimeVersion)
La versión del entorno de ejecució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 del entorno de ejecución. Para entrenar con scikit-learn o XGBoost, debes usar la versión 1.4 o posterior del entorno de ejecución.
Versión de Python (pythonVersion)
La versión de Python que se usa para el trabajo. Python 3.5 está disponible con la versión 1.4 o posterior 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 inicias tu trabajo de entrenamiento:

gcloud

Proporciona los detalles de la configuración del trabajo al comando gcloud ai-platform jobs submit training. Puedes hacerlo de las dos maneras siguientes:

  • 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 marcas de línea de comandos. Por ejemplo, debes proporcionar la marca --module-name y, al menos, uno 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, se elige 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 para enviar el trabajo en la sección siguiente.

Ejemplo 2: en el ejemplo siguiente, 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 se 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.14'
  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 posterior del entorno de ejecución de AI Platform. En el ejemplo anterior, también se configuran máquinas virtuales de servidores de parámetros y trabajadores; solo debes configurar estas máquinas si realizas un entrenamiento distribuido con TensorFlow o contenedores personalizados. Obtén más información acerca de los tipos de máquinas.

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 que el recurso Job. Así se 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 en el recurso TrainingInput.

En el ejemplo siguiente, se 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.14',
    '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 del diccionario se deben nombrar tal como se muestra para que coincidan los nombres de 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 posterior del entorno de ejecución de AI Platform. En el ejemplo anterior, también se configuran máquinas virtuales de servidores de parámetros y trabajadores; solo debes configurar estas máquinas si realizas un entrenamiento distribuido con TensorFlow o contenedores personalizados. Obtén más información acerca de los tipos de máquinas.

Envía el trabajo

Cuando envías un trabajo de entrenamiento, debes especificar 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 contengan tus detalles de configuración. Para crear un nombre de trabajo, el código siguiente 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.14"

El envío de trabajos siguiente 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 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 envío de trabajos siguiente 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 la 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 en tu archivo de configuración (config.yaml) y como 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 gcloud y el inicio de los USER_ARGS que quieres 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.
  • Si se especifica la marca --job-dir, debe aparecer antes de la marca vacía --, ya que AI Platform usa 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, --job-dir también se pasa a tu aplicación como una marca de línea de comandos.
  • Puedes definir tantos USER_ARGS como necesites. AI Platform pasa --user_first_arg, --user_second_arg y así de forma sucesiva 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 muestra de código siguiente, 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())
    

Qué sigue

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

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.