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 Google Cloud Console, 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, ve a la página Crear cuenta de servicio.

      Ve a Crear cuenta de servicio
    2. Selecciona tu proyecto.
    3. Ingresa un nombre en el campo Nombre de cuenta de servicio. La consola completa el campo ID de cuenta de servicio según 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. Para proporcionar acceso a tu proyecto, otorga los siguientes roles a tu cuenta de servicio: Proyecto > Propietario .

      En la lista Seleccionar un rol, elige un rol.

      Para obtener roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.

    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. Para crear una clave de cuenta de servicio, haz lo siguiente:

    1. En la consola, 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 la clave de tu cuenta de servicio. Esta variable solo se aplica a la sesión actual de 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 Google Cloud Console, 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, ve a la página Crear cuenta de servicio.

      Ve a Crear cuenta de servicio
    2. Selecciona tu proyecto.
    3. Ingresa un nombre en el campo Nombre de cuenta de servicio. La consola completa el campo ID de cuenta de servicio según 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. Para proporcionar acceso a tu proyecto, otorga los siguientes roles a tu cuenta de servicio: Proyecto > Propietario .

      En la lista Seleccionar un rol, elige un rol.

      Para obtener roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.

    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. Para crear una clave de cuenta de servicio, haz lo siguiente:

    1. En la consola, 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 la clave de tu cuenta de servicio. Esta variable solo se aplica a la sesión actual de 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 Cloud Console, 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
})