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
- 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.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Habilita Vertex AI API.
-
Crear una cuenta de servicio:
-
En la consola de Google Cloud, ve a la página Crear cuenta de servicio.
Ve a Crear cuenta de servicio - Elige tu proyecto.
-
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
. - Haz clic en Crear y continuar.
-
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.
- Haga clic en Continuar.
-
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.
-
-
Haz lo siguiente para crear una clave de cuenta de servicio:
- En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
- Haga clic en Claves.
- Haz clic en Agregar clave y, luego, en Crear clave nueva.
- Haga clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
- Haga clic en Cerrar.
-
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. -
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Habilita Vertex AI API.
-
Crear una cuenta de servicio:
-
En la consola de Google Cloud, ve a la página Crear cuenta de servicio.
Ve a Crear cuenta de servicio - Elige tu proyecto.
-
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
. - Haz clic en Crear y continuar.
-
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.
- Haga clic en Continuar.
-
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.
-
-
Haz lo siguiente para crear una clave de cuenta de servicio:
- En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
- Haga clic en Claves.
- Haz clic en Agregar clave y, luego, en Crear clave nueva.
- Haga clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
- Haga clic en Cerrar.
-
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. - 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.