Crea estudios de Vertex AI Vizier

En esta página, se describe cómo realizar solicitudes a la API de Vertex AI Vizier mediante Python. Para obtener información sobre cómo funciona Vertex AI Vizier, consulta Descripción general de Vertex AI Vizier.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Habilita Vertex AI API.

    Habilita la API

  4. Crear una cuenta de servicio:

    1. En la consola de Google Cloud, ve a la página Crear cuenta de servicio.

      Ve a Crear cuenta de servicio
    2. Elige tu proyecto.
    3. Ingresa un nombre en el campo Nombre de cuenta de servicio. La consola de Google Cloud completa el campo ID de cuenta de servicio en función de este nombre.

      Opcional: en el campo Descripción de la cuenta de servicio, ingresa una descripción. Por ejemplo, Service account for quickstart.

    4. Haz clic en Crear y continuar.
    5. Otorga el rol Project > Owner a la cuenta de servicio.

      Para otorgar el rol, busca la lista Seleccionar un rol y, luego, selecciona Project > Owner.

    6. Haga clic en Continuar.
    7. Haz clic en Listo para terminar de crear la cuenta de servicio.

      No cierres la ventana del navegador. La usarás en la próxima tarea.

  5. Haz lo siguiente para crear una clave de cuenta de servicio:

    1. En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
    2. Haga clic en Claves.
    3. Haz clic en Agregar clave y, luego, en Crear clave nueva.
    4. Haga clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
    5. Haga clic en Cerrar.
  6. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta del archivo JSON que contiene tus credenciales. Esta variable solo se aplica a la sesión actual de Cloud Shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.

  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Habilita Vertex AI API.

    Habilita la API

  9. Crear una cuenta de servicio:

    1. En la consola de Google Cloud, ve a la página Crear cuenta de servicio.

      Ve a Crear cuenta de servicio
    2. Elige tu proyecto.
    3. Ingresa un nombre en el campo Nombre de cuenta de servicio. La consola de Google Cloud completa el campo ID de cuenta de servicio en función de este nombre.

      Opcional: en el campo Descripción de la cuenta de servicio, ingresa una descripción. Por ejemplo, Service account for quickstart.

    4. Haz clic en Crear y continuar.
    5. Otorga el rol Project > Owner a la cuenta de servicio.

      Para otorgar el rol, busca la lista Seleccionar un rol y, luego, selecciona Project > Owner.

    6. Haga clic en Continuar.
    7. Haz clic en Listo para terminar de crear la cuenta de servicio.

      No cierres la ventana del navegador. La usarás en la próxima tarea.

  10. Haz lo siguiente para crear una clave de cuenta de servicio:

    1. En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
    2. Haga clic en Claves.
    3. Haz clic en Agregar clave y, luego, en Crear clave nueva.
    4. Haga clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
    5. Haga clic en Cerrar.
  11. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta del archivo JSON que contiene tus credenciales. Esta variable solo se aplica a la sesión actual de Cloud Shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.

  12. Instala el SDK de Vertex para Python

Define constantes

Para definir constantes, ejecuta los siguientes comandos y reemplaza REGION y PROJECT_ID por la región y el ID del proyecto. Crea tu propio nombre de estudio o usa los valores sugeridos.

import json
import datetime
from google.cloud import aiplatform

REGION = "REGION"
PROJECT_ID = "PROJECT_ID"

# The following placeholder variables are automatically filled in.
STUDY_DISPLAY_NAME = '{}_study_{}'.format(PROJECT_ID.replace('-', ''), datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) #@param {type: 'string'}
ENDPOINT = REGION + '-aiplatform.googleapis.com'
PARENT = 'projects/{}/locations/{}'.format(PROJECT_ID, REGION)

Construye solicitudes a la API

Las siguientes solicitudes a la API de línea de comandos se escriben en Python.

Crear un estudio

Un estudio es una serie de experimentos o pruebas que te ayudan a optimizar los hiperparámetros o parámetros.

En el siguiente ejemplo, el objetivo es maximizar y = x^2 con x en el rango [-10. 10]. En este ejemplo, solo hay un parámetro, y se usa una función fácil de calcular para demostrar cómo usar Vertex AI Vizier.

param_x = {
    'parameter_id': 'x',
    'double_value_spec': {
        'min_value': -10.0,
        'max_value': 10.0
    }
}

metric_y = {
    'metric_id': 'y',
    'goal': 'MAXIMIZE'
}

study = {
    'display_name': STUDY_DISPLAY_NAME,
    'study_spec': {
      'algorithm': 'RANDOM_SEARCH',
      'parameters': [param_x],
      'metrics': [metric_y],
    }
}

Para crear el estudio mediante la configuración del estudio, envía la siguiente solicitud a través de VizierServiceClient. Usa el STUDY_NAME que se muestra para consultar el estudio.

vizier_client = aiplatform.gapic.VizierServiceClient(client_options=dict(api_endpoint=ENDPOINT))
study = vizier_client.create_study(parent=PARENT, study=study)
STUDY_NAME = study.name

Visualiza tu estudio

Luego de crear el estudio, puedes encontrarlo en la consola de Cloud, en la sección Vertex AI, en la página Experimentos.

Ir a la página Experimentos

Obtén un estudio

Para obtener un estudio, envía la siguiente solicitud.

vizier_client.get_study({'name': STUDY_NAME})

Enumera estudios

Para generar una lista de los estudios en un proyecto y una región específicos, envía la siguiente solicitud:

vizier_client.list_studies({'parent': PARENT})

Obtén pruebas sugeridas

Para obtener una sugerencia de prueba de Vertex AI Vizier, crea una solicitud que contenga un SUGGEST_COUNT y un CLIENT_ID. Envía esta información a Vertex AI Vizier mediante el envío de la solicitud.

Crea la solicitud mediante los siguientes comandos. Cambia el valor de SUGGEST_COUNT por la cantidad de sugerencias que deseas obtener de cada solicitud.

suggest_response = vizier_client.suggest_trials({
    'parent': STUDY_NAME,
    'suggestion_count': SUGGEST_COUNT,
    'client_id': CLIENT_ID
    })

suggest_trials inicia una operación de larga duración para generar la prueba. La respuesta te informa que Vertex AI Vizier está trabajando en las sugerencias de prueba.

Para esperar el resultado que se muestra, usa la función result().

suggest_response.result().trials

En el siguiente formato, se muestra una prueba de ejemplo. En esta prueba, se sugiere usar el valor 0.1 para el parámetro x.

name: "TRIAL_ID"
state: ACTIVE
parameters {
  parameter_id: "x"
  value {
    number_value: 0.1
  }
}
start_time {
  seconds: 1618011215
}

Usa el TRIAL_ID de la respuesta anterior para obtener la prueba:

vizier_client.get_trial({
        'name': TRIAL_ID
      })

Evalúa los resultados

Después de recibir las sugerencias de pruebas, evalúa cada prueba y registra cada resultado como una medida.

Por ejemplo, si la función que intentas optimizar es y = x^2, evalúa la función con el valor x que sugirió la prueba. Con el valor sugerido 0.1, la función se evalúa como y = 0.1 * 0.1, lo que da como resultado 0.01.

Agrega una medida

Después de evaluar la prueba sugerida para obtener una medida, agrega esta medida a la prueba.

Usa los siguientes comandos para almacenar tu medición y enviar la solicitud. En este ejemplo, reemplaza RESULT por la medida. Si la función que optimizas es y = x^2, y el valor sugerido de x es 0.1, el resultado es 0.01.

vizier_client.add_trial_measurement({
        'trial_name': TRIAL_ID,
        'measurement': {
            'metrics': [{'metric_id': 'y', 'value':RESULT }]
        }
    })

Completa una prueba

Una vez que hayas agregado todas las medidas de una prueba, debes completarla mediante el envío de un comando.

Cuando completas la prueba, puedes enviar un comando a fin de completarla solo o puedes enviar un comando para agregar una medida final y completar la prueba.

Sin una medida final

Para completar una prueba sin agregar una medida final, envía la siguiente solicitud:

vizier_client.complete_trial({
      'name': TRIAL_ID
  })

Con una medida final

Para completar una prueba e incluir una medida final, usa los siguientes comandos y reemplaza RESULT por la medida final.

vizier_client.complete_trial({
      'name': TRIAL_ID
      'final_measurement': {
        'metrics': [{'metric_id': 'y', 'value': RESULT}]
      }
  })

Enumera pruebas

Para generar una lista de las pruebas en un estudio específico, envía la siguiente solicitud:

vizier_client.list_trials({
    'parent': STUDY_NAME
})

Una vez que hayas completado todas las pruebas pendientes, puede llamar a suggestTrials para obtener más sugerencias y repetir el proceso de evaluación de pruebas.

Enumerar pruebas óptimas

En el siguiente ejemplo, se muestra list_optimal_trials, que muestra las pruebas óptimas para un estudio de varios objetivos o las pruebas óptimas para un estudio de un solo objetivo:

vizier_client.list_optimal_trials({
    'parent': STUDY_NAME
})

¿Qué sigue?

  • Verifica la referencia de REST para los estudios.