Créer des études Vertex Vizier

Cette page explique comment envoyer des requêtes API à Vizier à l'aide de Python. Pour en savoir plus sur le fonctionnement de Vizier, consultez la page Présentation de Vertex 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. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Activez Vertex AI API.

    Activer l'API

  4. Créez un compte de service :

    1. Dans Cloud Console, accédez à la page Créer un compte de service.

      Accéder à la page "Créer un compte de service"
    2. Sélectionnez un projet.
    3. Dans le champ Nom du compte de service, saisissez un nom. Cloud Console remplit le champ ID du compte de service en fonction de ce nom.

      Dans le champ Description du compte de service, saisissez une description. Exemple : Service account for quickstart.

    4. Cliquez sur Créer et continuer.
    5. Cliquez sur le champ Sélectionner un rôle.

      Dans la section Accès rapide, cliquez sur Basique, puis sur Propriétaire.

    6. Cliquez sur Continuer.
    7. Cliquez sur OK pour terminer la création du compte de service.

      Ne fermez pas la fenêtre de votre navigateur. Vous en aurez besoin lors de la tâche suivante.

  5. Créez une clé de compte de service :

    1. Dans Cloud Console, cliquez sur l'adresse e-mail du compte de service que vous avez créé.
    2. Cliquez sur Clés.
    3. Cliquez sur Add key (Ajouter une clé), puis sur Create new key (Créer une clé).
    4. Cliquez sur Create (Créer). Un fichier de clé JSON est téléchargé sur votre ordinateur.
    5. Cliquez sur Close (Fermer).
  6. Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pour qu'elle pointe vers le chemin du fichier JSON contenant la clé de votre compte de service. Cette variable ne s'applique qu'à la session de shell actuelle. Par conséquent, si vous ouvrez une nouvelle session, vous devez de nouveau la définir.

  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Activez Vertex AI API.

    Activer l'API

  9. Créez un compte de service :

    1. Dans Cloud Console, accédez à la page Créer un compte de service.

      Accéder à la page "Créer un compte de service"
    2. Sélectionnez un projet.
    3. Dans le champ Nom du compte de service, saisissez un nom. Cloud Console remplit le champ ID du compte de service en fonction de ce nom.

      Dans le champ Description du compte de service, saisissez une description. Exemple : Service account for quickstart.

    4. Cliquez sur Créer et continuer.
    5. Cliquez sur le champ Sélectionner un rôle.

      Dans la section Accès rapide, cliquez sur Basique, puis sur Propriétaire.

    6. Cliquez sur Continuer.
    7. Cliquez sur OK pour terminer la création du compte de service.

      Ne fermez pas la fenêtre de votre navigateur. Vous en aurez besoin lors de la tâche suivante.

  10. Créez une clé de compte de service :

    1. Dans Cloud Console, cliquez sur l'adresse e-mail du compte de service que vous avez créé.
    2. Cliquez sur Clés.
    3. Cliquez sur Add key (Ajouter une clé), puis sur Create new key (Créer une clé).
    4. Cliquez sur Create (Créer). Un fichier de clé JSON est téléchargé sur votre ordinateur.
    5. Cliquez sur Close (Fermer).
  11. Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pour qu'elle pointe vers le chemin du fichier JSON contenant la clé de votre compte de service. Cette variable ne s'applique qu'à la session de shell actuelle. Par conséquent, si vous ouvrez une nouvelle session, vous devez de nouveau la définir.

  12. Installez le SDK Vertex 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 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 Google Cloud Console, 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 Vizier, créez une requête contenant un élément SUGGEST_COUNT et un élément CLIENT_ID. Transmettez ces informations à 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 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
})