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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Habilita Vertex AI API.

    Habilita la API

  3. Create local authentication credentials for your user account:

    gcloud auth application-default login
  4. 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.