Exécuter un pipeline d'évaluation basé sur le calcul

Vous pouvez évaluer les performances des modèles de fondation et de vos modèles d'IA générative réglés sur Vertex AI. Les modèles sont évalués avec un ensemble de métriques sur un ensemble de données d'évaluation que vous fournissez. Cette page explique comment fonctionne l'évaluation des modèles basée sur le calcul via le service de pipeline d'évaluation, comment créer et formater l'ensemble de données d'évaluation, et comment effectuer l'évaluation à l'aide de la console Google Cloud, de l'API Vertex AI ou du SDK Vertex AI pour Python.

Fonctionnement de l'évaluation des modèles basée sur le calcul

Pour évaluer les performances d'un modèle, vous devez d'abord créer un ensemble de données d'évaluation contenant des paires constituées d'une requête et d'une vérité terrain. Pour chaque paire, la requête est l'entrée que vous souhaitez évaluer et la vérité terrain est la réponse idéale pour cette requête. Lors de l'évaluation, la requête de chaque paire de l'ensemble de données d'évaluation est transmise au modèle pour produire un résultat. Les résultats générés par le modèle et la vérité terrain de l'ensemble de données d'évaluation sont utilisés pour calculer les métriques d'évaluation.

Le type des métriques utilisées pour l'évaluation dépend de la tâche que vous évaluez. Le tableau suivant présente les tâches compatibles et les métriques utilisées pour évaluer chaque tâche :

Tâche Métrique
Classification Micro-F1, Macro-F1, F1 par classe
Synthèse ROUGE-L
Systèmes de questions-réponses Mot clé exact
Génération de texte BLEU, ROUGE-L

Modèles compatibles

L'évaluation des modèles est prise en charge pour les modèles suivants :

  • text-bison : versions de base et réglées.

  • Gemini : toutes les tâches, sauf la classification.

Préparer l'ensemble de données d'évaluation

L'ensemble de données d'évaluation utilisé pour l'évaluation du modèle inclut des paires d'invites et de vérités terrain qui s'alignent avec la tâche que vous souhaitez évaluer. Votre ensemble de données doit inclure au moins une paire d'invites et de vérité terrain, et au moins 10 paires pour les métriques pertinentes. Plus vous fournissez d'exemples, plus les résultats sont pertinents.

Format de l'ensemble de données

Votre ensemble de données d'évaluation doit être au format JSON Lines (JSONL), chaque ligne contenant une seule paire constituée d'une requête et d'une vérité terrain, respectivement spécifiées dans les champs input_text et output_text. Le champ input_text contient la requête que vous souhaitez évaluer et le champ output_text contient la réponse idéale pour cette requête.

La longueur maximale de jeton pour input_text est de 8 192, et la longueur maximale de jeton pour output_text est de 1 024.

Importer l'ensemble de données d'évaluation dans Cloud Storage

Vous pouvez créer un bucket Cloud Storage ou utiliser un bucket existant pour stocker votre fichier d'ensemble de données. Le bucket doit se trouver dans la même région que le modèle.

Une fois votre bucket prêt, importez-y le fichier d'ensemble de données.

Évaluer des modèles

Vous pouvez évaluer des modèles à l'aide de l'API REST ou de la console Google Cloud.

REST

Pour créer un job d'évaluation de modèle, envoyez une requête POST avec la méthode pipelineJobs.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : projet Google Cloud qui exécute les composants du pipeline.
  • PIPELINEJOB_DISPLAYNAME : nom à afficher pour le pipelineJob.
  • LOCATION : région d'exécution des composants de pipeline. Pour le moment, seule la région us-central1 est compatible.
  • DATASET_URI : URI Cloud Storage de votre ensemble de données de référence. Vous pouvez spécifier un ou plusieurs URI. Ce paramètre prend en charge les caractères génériques. Pour en savoir plus sur ce paramètre, consultez la page InputConfig.
  • OUTPUT_DIR : URI Cloud Storage où stocker le résultat de l'évaluation.
  • MODEL_NAME : spécifiez un modèle de diffuseur ou une ressource de modèle réglée comme suit :
    • Modèle de diffuseur : publishers/google/models/MODEL@MODEL_VERSION

      Exemple : publishers/google/models/text-bison@002

    • Modèle réglé : projects/PROJECT_NUMBER/locations/LOCATION/models/ENDPOINT_ID

      Exemple : projects/123456789012/locations/us-central1/models/1234567890123456789

    Le job d'évaluation n'a aucune incidence sur les déploiements existants du modèle ou des ressources associées.

  • EVALUATION_TASK : tâche sur laquelle vous souhaitez évaluer le modèle. Le job d'évaluation calcule un ensemble de métriques pertinentes pour cette tâche spécifique. Les valeurs acceptées incluent les suivantes :
    • summarization
    • question-answering
    • text-generation
    • classification
  • INSTANCES_FORMAT : format de votre ensemble de données. Pour le moment, seul le format jsonl est pris en charge. Pour en savoir plus sur ce paramètre, consultez la page InputConfig.
  • PREDICTIONS_FORMAT : format de sortie de l'évaluation. Pour le moment, seul le format jsonl est pris en charge. Pour en savoir plus sur ce paramètre, consultez la section InputConfig.
  • MACHINE_TYPE : (facultatif) Type de machine pour l'exécution du job d'évaluation. La valeur par défaut est e2-highmem-16. Pour obtenir la liste des types de machines compatibles, consultez la page Types de machines.
  • SERVICE_ACCOUNT : (facultatif) compte de service à utiliser pour exécuter le job d'évaluation. Pour savoir comment créer un compte de service personnalisé, consultez la page Configurer un compte de service avec des autorisations précises. Si le champ n'est pas spécifié, l'agent de service de code personnalisé Vertex AI est utilisé.
  • NETWORK : (facultatif) nom complet du réseau Compute Engine auquel appairer le job d'évaluation. Le format du nom du réseau est projects/PROJECT_NUMBER/global/networks/NETWORK_NAME. Si vous spécifiez ce champ, vous devez disposer d'un appairage de réseau VPC pour Vertex AI. Si le champ n'est pas spécifié, la tâche d'évaluation n'est appairée à aucun réseau.
  • KEY_NAME : (facultatif) Le nom de la clé de chiffrement gérée par le client (CMEK). Le cas échéant, les ressources créées par le job d'évaluation sont chiffrées à l'aide de la clé de chiffrement fournie. Le format à utiliser pour le nom de la clé est projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY. La clé doit se trouver dans la même région que le job d'évaluation.

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs

Corps JSON de la requête :

{
  "displayName": "PIPELINEJOB_DISPLAYNAME",
  "runtimeConfig": {
    "gcsOutputDirectory": "gs://OUTPUT_DIR",
    "parameterValues": {
      "project": "PROJECT_ID",
      "location": "LOCATION",
      "batch_predict_gcs_source_uris": ["gs://DATASET_URI"],
      "batch_predict_gcs_destination_output_uri": "gs://OUTPUT_DIR",
      "model_name": "MODEL_NAME",
      "evaluation_task": "EVALUATION_TASK",
      "batch_predict_instances_format": "INSTANCES_FORMAT",
      "batch_predict_predictions_format: "PREDICTIONS_FORMAT",
      "machine_type": "MACHINE_TYPE",
      "service_account": "SERVICE_ACCOUNT",
      "network": "NETWORK",
      "encryption_spec_key_name": "KEY_NAME"
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante. Notez que pipelineSpec a été tronqué pour économiser de l'espace.

Exemple de commande curl

PROJECT_ID=myproject
REGION=us-central1
MODEL_NAME=publishers/google/models/text-bison@002
TEST_DATASET_URI=gs://my-gcs-bucket-uri/dataset.jsonl
OUTPUT_DIR=gs://my-gcs-bucket-uri/output

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/pipelineJobs" -d \
$'{
  "displayName": "evaluation-llm-text-generation-pipeline",
  "runtimeConfig": {
    "gcsOutputDirectory": "'${OUTPUT_DIR}'",
    "parameterValues": {
      "project": "'${PROJECT_ID}'",
      "location": "'${REGION}'",
      "batch_predict_gcs_source_uris": ["'${TEST_DATASET_URI}'"],
      "batch_predict_gcs_destination_output_uri": "'${OUTPUT_DIR}'",
      "model_name": "'${MODEL_NAME}'",
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}'

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

import os

from google.auth import default

import vertexai
from vertexai.preview.language_models import (
    EvaluationTextClassificationSpec,
    TextGenerationModel,
)

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")


def evaluate_model() -> object:
    """Evaluate the performance of a generative AI model."""

    # Set credentials for the pipeline components used in the evaluation task
    credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])

    vertexai.init(project=PROJECT_ID, location="us-central1", credentials=credentials)

    # Create a reference to a generative AI model
    model = TextGenerationModel.from_pretrained("text-bison@002")

    # Define the evaluation specification for a text classification task
    task_spec = EvaluationTextClassificationSpec(
        ground_truth_data=[
            "gs://cloud-samples-data/ai-platform/generative_ai/llm_classification_bp_input_prompts_with_ground_truth.jsonl"
        ],
        class_names=["nature", "news", "sports", "health", "startups"],
        target_column_name="ground_truth",
    )

    # Evaluate the model
    eval_metrics = model.evaluate(task_spec=task_spec)
    print(eval_metrics)
    # Example response:
    # ...
    # PipelineJob run completed.
    # Resource name: projects/123456789/locations/us-central1/pipelineJobs/evaluation-llm-classification-...
    # EvaluationClassificationMetric(label_name=None, auPrc=0.53833705, auRoc=0.8...

    return eval_metrics

Console

Pour créer un job d'évaluation de modèle à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Registre de modèles de Vertex AI.

    Accéder à Vertex AI Model Registry

  2. Cliquez sur le nom du modèle que vous souhaitez évaluer.
  3. Dans l'onglet Évaluer, cliquez sur Créer une évaluation et configurez comme suit :
    • Objectif : Sélectionner la tâche à évaluer.
    • Colonne ou champ cible : (classification uniquement) saisissez la colonne cible pour la prédiction. Exemple : ground_truth.
    • Chemin d'accès source : saisissez ou sélectionnez l'URI de votre ensemble de données d'évaluation.
    • Format de sortie : saisissez le format de sortie de l'évaluation. Pour le moment, seul le format jsonl est pris en charge.
    • Chemin d'accès Cloud Storage : saisissez ou sélectionnez l'URI où stocker le résultat de l'évaluation.
    • Noms de classe : (classification uniquement) saisissez la liste des noms de classe possibles.
    • Nombre de nœuds de calcul : saisissez le nombre de nœuds de calcul pour exécuter le job d'évaluation.
    • Type de machine : sélectionnez un type de machine à utiliser pour exécuter le job d'évaluation.
  4. Cliquez sur Démarrer l'évaluation.

Afficher les résultats de l'évaluation

Vous pouvez trouver les résultats de l'évaluation dans le répertoire de sortie Cloud Storage que vous avez spécifié lors de la création de la tâche d'évaluation. Le fichier se nomme evaluation_metrics.json.

Pour les modèles ajustés, vous pouvez également afficher les résultats d'évaluation dans la console Google Cloud:

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Model Registry.

    Accéder à Vertex AI Model Registry

  2. Cliquez sur le nom du modèle pour afficher ses métriques d'évaluation.

  3. Dans l'onglet Évaluation, cliquez sur le nom de l'exécution d'évaluation que vous souhaitez afficher.

Étape suivante