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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. 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.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  7. Installez le SDK Vertex AI pour Python.
  8. 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 calculée 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 consoleGoogle 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.