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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Vertex AI API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Vertex AI API.
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- 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.
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.