Créer des études Vertex AI Vizier

Cette page explique comment envoyer des requêtes API à Vertex AI Vizier à l'aide de Python. Pour en savoir plus sur le fonctionnement de Vertex AI Vizier, consultez la présentation de Vertex AI Vizier.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Enable the Vertex AI API.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Enable the Vertex AI API.

    Enable the API

  6. Create local authentication credentials for your user account:

    gcloud auth application-default login
  7. Installez le SDK Vertex AI pour Python.

Définir des constantes

Pour définir des constantes, exécutez les commandes suivantes en remplaçant REGION et PROJECT_ID par votre région et votre ID de projet. Saisissez le nom de votre étude ou utilisez les valeurs suggérées.

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)

Créer des requêtes API

Les requêtes API de ligne de commande suivantes sont écrites en Python.

Créer une étude

Une étude est une série de tests, ou d'essais, visant à optimiser vos hyperparamètres ou paramètres.

Dans l'exemple suivant, l'objectif est d'optimiser y = x^2 avec x dans la plage [-10. 10]. Cet exemple ne comporte qu'un seul paramètre et exécute une fonction simple à calculer pour vous montrer comment utiliser 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],
    }
}

Pour créer l'étude à l'aide de votre configuration d'étude, envoyez la requête suivante via VizierServiceClient. Utilisez l'élément STUDY_NAME renvoyé pour interroger l'étude.

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

Afficher une étude

Une fois l'étude créée, vous pouvez la rechercher dans la console Google Cloud, dans la section "Vertex AI" de la page Tests.

Accéder à la page "Tests"

Obtenir une étude

Pour obtenir une étude, envoyez la requête suivante.

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

Répertorier les études

Pour répertorier les études d'un projet et d'une région spécifiques, envoyez la requête suivante :

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

Obtenir des suggestions d'essais

Pour obtenir une suggestion d'essai de Vertex AI Vizier, créez une requête contenant un élément SUGGEST_COUNT et un élément CLIENT_ID. Transmettez ces informations à Vertex AI Vizier en envoyant la requête.

Créez la requête à l'aide des commandes suivantes. Remplacez SUGGEST_COUNT par le nombre de suggestions que vous souhaitez obtenir pour chaque requête.

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

suggest_trials lance une opération de longue durée pour générer l'essai. La réponse vous indique que Vertex AI Vizier travaille sur les suggestions d'essais.

Pour attendre le résultat renvoyé, utilisez la fonction result().

suggest_response.result().trials

Le format suivant illustre un exemple d'essai. Cet essai suggère d'utiliser la valeur 0.1 pour le paramètre x.

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

Utilisez la valeur TRIAL_ID de la réponse précédente pour obtenir l'essai :

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

Évaluer les résultats

Après avoir reçu les suggestions d'essais, évaluez chaque essai et enregistrez chaque résultat en tant que mesure.

Par exemple, si la fonction que vous essayez d'optimiser est y = x^2, vous l'évaluez à l'aide de la valeur suggérée de x de l'essai. En utilisant une valeur suggérée de 0.1, la fonction renvoie y = 0.1 * 0.1 et génère la valeur 0.01.

Ajouter une mesure

Après avoir évalué la suggestion d'essai pour obtenir une mesure, vous devez ajouter celle-ci à votre essai.

Exécutez les commandes suivantes pour stocker votre mesure et envoyer la requête. Dans cet exemple, remplacez RESULT par la mesure. Si la fonction que vous optimisez est y = x^2 et que la valeur suggérée de x est 0.1, le résultat est 0.01.

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

Effectuer un essai

Après avoir ajouté toutes les mesures à un essai, vous devez effectuer l'essai en envoyant une commande.

Une fois l'essai terminé, vous pouvez soit envoyer une commande pour ne finaliser que l'essai, soit envoyer une commande pour ajouter une mesure finale et terminer l'essai.

Sans mesure finale

Pour terminer l'essai sans ajouter de mesure finale, envoyez la requête suivante :

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

Avec une mesure finale

Pour terminer un essai et inclure une mesure finale, utilisez les commandes suivantes, en remplaçant RESULT par la mesure finale.

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

Répertorier les essais

Pour répertorier les essais d'une étude spécifique, envoyez la requête suivante :

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

Une fois tous les essais en attente terminés, vous pouvez appeler la requête suggestTrials pour obtenir d'autres suggestions et répéter le processus d'évaluation de l'essai.

Répertorier les essais optimaux

L'exemple suivant montre list_optimal_trials, qui renvoie les essais optimaux pour pareto pour une étude à plusieurs objectifs ou les essais optimaux pour une étude à objectif unique :

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

Étapes suivantes

  • Consultez des études dans la documentation de référence sur REST.