Créer des modèles de texte distillés pour PaLM

La distillation étape par étape utilise un grand modèle enseignant pour entraîner un modèle élève plus petit afin de mieux exécuter certaines tâches grâce à des capacités de raisonnement améliorées. Le modèle distillé et entraîné peut effectuer les mêmes tâches que le modèle enseignant plus volumineux, pour un coût et une latence moindres.

Lorsque vous distillez un modèle de fondation, vous utilisez un modèle enseignant et un modèle de type élève :

  • Le modèle enseignant est le grand modèle qui peut faire ce que vous voulez. Cependant, en raison de sa taille, le modèle enseignant peut coûter plus cher et présenter une latence plus élevée qu'un modèle plus petit.

  • Le modèle "élève" est plus petit que le modèle "enseignant". Le processus d'entraînement et de distillation utilise des exemples étiquetés et des logiques générées par le modèle enseignant pour ajuster le modèle élève. Les performances et les fonctionnalités de raisonnement du modèle distillé sont meilleures que celles du modèle élève d'origine.

Vous spécifiez un modèle enseignant et un modèle élève lorsque vous créez une tâche de distillation.

Workflow de réglage et de distillation d'un modèle

Le workflow de distillation sur Vertex AI comprend les étapes suivantes :

  1. Préparer l'ensemble de données de réglage du modèle
  2. Spécifiez le modèle enseignant.
  3. Spécifiez le modèle élève.
  4. Importer l'ensemble de données de réglage du modèle dans un bucket Cloud Storage
  5. Créez un job de distillation de modèle.

Une fois la distillation du modèle terminée, le modèle distillé est déployé sur un point de terminaison Vertex AI. Le nom du point de terminaison est identique au nom du modèle distillé. Les modèles distillés peuvent être sélectionnés dans Vertex AI Studio lorsque vous souhaitez créer une requête.

Modèles compatibles

Vous pouvez spécifier les éléments suivants pour le modèle "enseignant" :

  • text-unicorn@001

Vous pouvez spécifier les éléments suivants pour le modèle élève :

  • text-bison@002

Format de l'ensemble de données

La distillation fonctionne sur un ensemble de données étiqueté ou non. Si vous disposez d'un ensemble de données étiqueté de haute qualité avec des centaines d'exemples, nous vous recommandons de l'utiliser. Sinon, vous pouvez utiliser un ensemble de données de questions non étiquetées. Si vous utilisez un ensemble de données non étiqueté, le modèle enseignant génère les étiquettes et la logique de distillation. Il est recommandé d'utiliser plus de 1 000 exemples si vous utilisez un ensemble de données sans étiquette.

L'ensemble de données de distillation étiqueté ou non doit être au format JSON Lines (JSONL), où chaque ligne contient un seul exemple de réglage. Avant de distiller le modèle, vous importez l'ensemble de données dans un bucket Cloud Storage.

Chaque exemple d'ensemble de données contient un champ input_text avec la requête du modèle et un champ output_text facultatif contenant un exemple de réponse que le modèle distillé doit produire.

La longueur maximale de jeton pour input_text est de 7168, et la longueur maximale de jeton pour output_text est de 1024. Si l'un des champs dépasse la longueur maximale du jeton, les jetons excédentaires sont tronqués.

Un ensemble de données peut contenir 10 000 exemples au maximum pour un modèle de génération de texte.

Exemple d'ensemble de données

{"input_text": "question: How many people live in Beijing? context:
With over 21 million residents, Beijing is the world's most populous national
capital city and is China's second largest city after Shanghai. It is
located in Northern China, and is governed as a municipality under the direct
administration of the State Council with 16 urban, suburban, and rural
districts.[14] Beijing is mostly surrounded by Hebei Province with the exception
of neighboring Tianjin to the southeast; together, the three divisions form the
Jingjinji megalopolis and the national capital region of China.",
"output_text": "over 21 million people"}

{"input_text": "question: How many parishes are there in Louisiana? context: The U.S. state of Louisiana is divided into 64 parishes (French: paroisses) in the same manner that 48 other states of the United States are divided into counties, and Alaska is divided into boroughs.", "output_text": "64"}

Inclure des instructions dans les exemples

Pour les tâches telles que la classification, il est possible de créer un ensemble de données d'exemples ne contenant pas d'instructions. Toutefois, exclure les instructions des exemples dans l'ensemble de données entraîne de mauvaises performances après la distillation, en particulier pour les ensembles de données plus petits.

Instructions relatives à l'exclusion :

{"input_text": "5 stocks to buy now",
"output_text": "business"}

Instructions incluses :

{"input_text": "Classify the following text into one of the following classes:
[business, entertainment] Text: 5 stocks to buy now",
"output_text": "business"}

Exemples d'ensembles de données

Vous pouvez utiliser un exemple d'ensemble de données pour commencer à distiller. Voici un ensemble de données de tâches de classification qui contient des exemples de transcriptions médicales pour diverses spécialités médicales. Les données proviennent de la ressource mtsamples.com, telle qu'elle figure sur la plateforme Kaggle.

  • Exemple d'URI d'ensemble de données de distillation :

    gs://cloud-samples-data/vertex-ai/model-evaluation/peft_train_sample.jsonl

  • Exemple d'URI d'ensemble de données d'évaluation :

    gs://cloud-samples-data/vertex-ai/model-evaluation/peft_eval_sample.jsonl

Pour utiliser ces ensembles de données, spécifiez les URI dans les paramètres applicables lors de la création d'un job de distillation de modèle de texte.

Exemple :

...
"dataset_uri": "gs://cloud-samples-data/vertex-ai/model-evaluation/peft_train_sample.jsonl",
...
"evaluation_data_uri": "gs://cloud-samples-data/vertex-ai/model-evaluation/peft_eval_sample.jsonl",
...

Assurer la cohérence des données de production

Les exemples de vos ensembles de données doivent correspondre au trafic de production attendu. Si votre ensemble de données contient une mise en forme, des mots clés, des instructions ou des informations spécifiques, les données de production doivent utiliser le même format et les mêmes instructions.

Par exemple, si les exemples de votre ensemble de données incluent "question:" et "context:", le trafic de production doit également être mis en forme de manière à inclure "question:" et "context:" dans le même ordre que les exemples de l'ensembles de données. Si vous excluez le contexte, le modèle ne reconnaît pas le modèle, même si la question exacte figurait dans un exemple de l'ensemble de données.

Importer des ensembles de données de distillation dans Cloud Storage

Pour exécuter un job de réglage, vous devez importer un ou plusieurs ensembles de données dans un bucket Cloud Storage. Vous pouvez créer un bucket Cloud Storage ou utiliser un bucket existant pour stocker les fichiers des ensembles de données. La région du bucket n'a pas d'importance, mais nous vous recommandons d'utiliser un bucket situé dans le même projet Google Cloud que celui où vous prévoyez de régler votre modèle.

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

Paramètres de région pour la distillation

Vous pouvez spécifier trois paramètres de région Google Cloud lorsque vous configurez un job de distillation. Une région est l'emplacement du pipeline qui règle le modèle. L'autre région sert à exécuter la partie réglage du modèle de processus de distillation et à importer le modèle distillé.

Région du job de pipeline

La région du job de pipeline est celle dans laquelle le job de pipeline est exécuté. Si la région d'importation du modèle n'est pas spécifiée, le modèle est importé et déployé dans la région du job de pipeline. Les données intermédiaires, telles que l'ensemble de données transformé, sont stockées dans la région du job de pipeline. Pour connaître les régions que vous pouvez utiliser pour les jobs de pipeline, consultez la page Régions de job et d'importation de modèles compatibles.

Vous devez spécifier la région du job de pipeline à l'aide de l'une des méthodes suivantes :

  • Si vous créez un job de distillation supervisé en envoyant une requête POST à l'aide de la méthode pipelineJobs.create, vous utilisez l'URL pour spécifier la région dans laquelle le job de pipeline est exécuté. Dans l'URL suivante, remplacez les deux instances de PIPELINE_JOB_REGION par la région où le pipeline est exécuté :

     https://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/pipelineJobs
    
  • Si vous utilisez la console Google Cloud pour créer une tâche de distillation, vous devez spécifier la région de la tâche de pipeline dans le contrôle Région lorsque vous créez votre tâche de distillation. Dans la console Google Cloud, le contrôle Région spécifie à la fois la région du job de pipeline et la région d'importation du modèle. Lorsque vous utilisez la console Google Cloud pour créer une tâche de distillation, les deux régions sont toujours identiques.

Région d'importation du modèle

Vous utilisez le paramètre facultatif tuned_model_location pour spécifier l'emplacement d'importation du modèle distillé. Si la région d'importation du modèle n'est pas spécifiée, le modèle distillé est importé dans la région du job de pipeline.Vous pouvez utiliser l'une des régions de jobs de pipeline et d'importation de modèles compatibles. Vous pouvez spécifier la région d'importation du modèle à l'aide de l'une des méthodes suivantes :

  • Si vous créez un job de distillation en envoyant une requête POST à l'aide de la méthode pipelineJobs, vous pouvez utiliser le paramètre location pour spécifier la région d'importation du modèle.

  • Si vous utilisez la console Google Cloud pour créer une tâche de distillation, vous devez spécifier la région d'importation du modèle dans le contrôle Région lorsque vous créez votre tâche de distillation. Dans la console Google Cloud, le contrôle Région spécifie à la fois la région d'importation du modèle et la région du job de pipeline. Lorsque vous utilisez la console Google Cloud pour créer une tâche de distillation, les deux régions sont toujours identiques.

Paramètres de région pour la distillation

La région que vous choisissez correspond à l'endroit où Vertex AI distille le modèle, puis l'importe.

La région de réglage est l'emplacement où s'effectue le calcul de la partie réglage du job de distillation. Cette région est déterminée par le type d'accélérateur que vous choisissez.

  • us-central1 : si vous choisissez cette région, 8 GPU Nvidia A100 de 80 Go sont utilisés.
  • europe-west4 : si vous choisissez cette région, 64 cœurs du pod TPU v3 sont utilisés.

Régions compatibles avec les jobs de pipeline et l'importation de modèles

Vous pouvez utiliser l'une des régions suivantes pour spécifier la région d'importation du modèle et la région du job de pipeline :

  • us-central1
  • europe-west4
  • asia-southeast1
  • us-west1
  • europe-west3
  • europe-west2
  • asia-northeast1
  • us-east4
  • us-west4
  • northamerica-northeast1
  • europe-west9
  • europe-west1
  • asia-northeast3

Créer un job de distillation de modèle de texte

Vous pouvez créer une tâche de distillation de modèle texte à l'aide de la console Google Cloud ou de l'API. Pour obtenir des conseils sur les configurations de distillation de modèle, consultez la page Configurations recommandées.

REST

Pour créer un job de distillation de modèle, envoyez une requête POST à l'aide de la méthode pipelineJobs. Notez que certains paramètres ne sont pas compatibles avec tous les modèles. Veillez à n'inclure que les paramètres applicables au modèle que vous distillez.

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

  • PIPELINEJOB_DISPLAYNAME : nom à afficher pour la tâche pipelineJob.
  • OUTPUT_DIR : URI du bucket dans lequel générer les artefacts de pipeline.
  • PROJECT_ID : l'ID de votre projet.
  • MODEL_DISPLAYNAME : nom à afficher pour le modèle distillé importé par pipelineJob.
  • DATASET_URI : URI du fichier de votre ensemble de données.
  • PIPELINE_JOB_REGION : région dans laquelle le job de réglage de pipeline est exécuté. Il s'agit également de la région par défaut dans laquelle le modèle réglé est importé. Si vous souhaitez importer votre modèle dans une autre région, utilisez le paramètre location pour spécifier la région d'importation du modèle réglé. Pour en savoir plus, consultez la section Région d'importation du modèle.
  • MODEL_UPLOAD_REGION : (facultatif) région dans laquelle le modèle réglé est importé. Si vous ne spécifiez pas de région d'importation du modèle, le modèle réglé est importé dans la même région que la tâche de pipeline. Pour en savoir plus, consultez la section Région d'importation du modèle.
  • ACCELERATOR_TYPE : (facultatif, valeur par défaut GPU) type d'accélérateur à utiliser pour le réglage du modèle. Les options valides sont les suivantes :
    • GPU : utilise 8 GPU A100 de 80 Go pour le réglage. Assurez-vous de disposer d'un quota suffisant. Si vous choisissez GPU, VPC-SC est compatible. CMEK est compatible si l'emplacement de réglage et d'importation du modèle est us-centra1. Pour en savoir plus, consultez la section Paramètres de région des réglages supervisés. Si vous choisissez GPU, les calculs de réglage du modèle s'effectuent dans la région us-central1.
    • TPU : utilise 64 cœurs du pod TPU v3 pour le réglage. Assurez-vous de disposer d'un quota suffisant. Les clés CMEK ne sont pas acceptées, mais VPC-SC l'est. Si vous choisissez TPU, les calculs de réglage de votre modèle s'effectuent dans la région europe-west4.
  • TEACHER_MODEL_REFERENCE : nom du modèle enseignant à utiliser pour la distillation. Le modèle compatible est text-unicorn@001.
  • STUDENT_MODEL_REFERENCE : nom du modèle étudiant à utiliser pour la distillation. Le modèle compatible est text-bison@002.
  • STEPS : Nombre d'étapes à exécuter pour le réglage du modèle. La valeur par défaut est 300. La taille de lot varie en fonction de l'emplacement de réglage et de la taille du modèle. Pour les modèles à 8 000, tels que text-bison@002, chat-bison@002, code-bison@002 et codechat-bison@002 :
    • us-central1 a une taille de lot de 8.
    • europe-west4 a une taille de lot de 24.
    Pour les modèles à 32 000, tels que text-bison-32k, chat-bison-32k, code-bison-32k et codechat-bison-32k :
    • us-central1 a une taille de lot de 8.
    • europe-west4 a une taille de lot de 8.

    Par exemple, si vous entraînez le modèle text-bison@002 dans la région europe-west4, vous allez disposer de 240 exemples dans un ensemble de données d'entraînement, et si vous définissez le paramètre steps sur 20, alors le nombre d'exemples d'entraînement va correspondre au produit du nombre d'étapes par la taille de lot, soit 20 x 24 = 480 étapes d'entraînement. Dans ce cas, le processus d'entraînement comporte deux époques, car il parcourt les exemples deux fois. Dans la région us-central1, si un ensemble de données d'entraînement contient 240 exemples et si vous définissez le paramètre steps sur 15, alors le nombre d'exemples d'entraînement va correspondre au produit du nombre d'étapes par la taille de lot, soit 15 x8 = 120 étapes d'entraînement. Dans ce cas, le processus d'entraînement ne va comporter que 0,5 époque, car le nombre d'étapes d'entraînement est inférieur de moitié au nombre d'exemples.

  • LEARNING_RATE_MULTIPLIER : multiplicateur à appliquer au taux d'apprentissage recommandé. Pour utiliser le taux d'apprentissage recommandé, utilisez 1.0.
  • EVAL_DATASET_URI : (facultatif) URI du fichier JSONL contenant l'ensemble de données d'évaluation pour la prédiction par lot et l'évaluation. L'évaluation n'est pas compatible avec chat-bison. Pour plus d'informations, consultez la page Format d'ensemble de données pour le réglage d'un modèle de code. L'ensemble de données d'évaluation nécessite entre 10 et 250 exemples.
  • EVAL_INTERVAL : (facultatif, valeur par défaut 20) nombre d'étapes de réglage entre chaque évaluation. Un intervalle d'évaluation n'est pas disponible pour les modèles de chat. Étant donné que l'évaluation s'exécute sur l'ensemble de données d'évaluation complet, un intervalle d'évaluation plus petit entraîne un temps de réglage plus long. Par exemple, si steps est égal à 200 et la valeur de EVAL_INTERVAL égale à 100, vous n'obtenez que deux points de données pour les métriques d'évaluation. Ce paramètre nécessite que evaluation_data_uri soit défini.
  • ENABLE_EARLY_STOPPING : (facultatif, valeur par défaut true) boolean qui, si la valeur est définie sur true, arrête le réglage avant d'effectuer toutes les étapes de réglage en cas de performances du modèle comme mesuré par la précision des jetons prévus, ne s'améliore pas suffisamment entre les exécutions d'évaluations. Si elle est définie sur false, le réglage se poursuit jusqu'à ce que toutes les étapes de réglage soient terminées. Ce paramètre nécessite que evaluation_data_uri soit défini. L'arrêt prématuré n'est pas disponible pour les modèles de chat.
  • TENSORBOARD_RESOURCE_ID : (facultatif) ID d'une instance Vertex AI TensorBoard. L'instance Vertex AI TensorBoard est utilisée pour créer un test une fois la tâche de réglage terminée. L'instance Vertex AI TensorBoard doit se trouver dans la même région que le pipeline de réglage.
  • ENCRYPTION_KEY_NAME : (facultatif) nom complet d'une clé de chiffrement gérée par le client (CMEK) que vous souhaitez utiliser pour le chiffrement des données. Une clé CMEK n'est disponible que dans us-central1. Si vous utilisez us-central1 et ne spécifiez pas de CMEK, une clé appartenant à Google et gérée par Google est utilisée. Une clé appartenant à Google et gérée par Google est utilisée par défaut dans toutes les autres régions disponibles. Pour en savoir plus, consultez la page Présentation du chiffrement CMEK.
  • TEMPLATE_URI : URI du modèle distillé, https://us-kfp.pkg.dev/ml-pipeline/distillation/distillation/v1.0.0.
  • SERVICE_ACCOUNT (facultatif) : compte de service utilisé par Vertex AI pour exécuter la tâche de pipeline. Par défaut, le compte de service Compute Engine par défaut de votre projet (PROJECT_NUMBER‑compute@developer.gserviceaccount.com) est utilisé. Apprenez-en plus sur l'association d'un compte de service personnalisé.

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "displayName": "PIPELINEJOB_DISPLAYNAME",
  "runtimeConfig": {
    "gcsOutputDirectory": "gs://OUTPUT_DIR",
    "parameterValues": {
      "project": "PROJECT_ID",
      "model_display_name": "MODEL_DISPLAYNAME",
      "dataset_uri": "gs://DATASET_URI",
      "location": "MODEL_UPLOAD_REGION",
      "accelerator_type": "ACCELERATOR_TYPE",
      "teacher_model_reference": TEACHER_MODEL_REFERENCE,
      "student_model_reference": STUDENT_MODEL_REFERENCE,
      "train_steps": STEPS,
      "learning_rate_multiplier": LEARNING_RATE_MULTIPLIER,
      "evaluation_data_uri": "gs://EVAL_DATASET_URI",
      "evaluation_interval": EVAL_INTERVAL,
      "enable_early_stopping": ENABLE_EARLY_STOPPING,
      "enable_checkpoint_selection": "ENABLE_CHECKPOINT_SELECTION",
      "tensorboard_resource_id": "TENSORBOARD_ID",
      "encryption_spec_key_name": "ENCRYPTION_KEY_NAME"
    }
  },
  "encryptionSpec": {
    "kmsKeyName": "ENCRYPTION_KEY_NAME"
  },
  "serviceAccount": "SERVICE_ACCOUNT",
  "templateUri": "TEMPLATE_URI"
}

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://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/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://PIPELINE_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/PIPELINE_JOB_REGION/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.

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.

from __future__ import annotations

import os

from typing import Optional

import vertexai
from vertexai.preview.language_models import TextGenerationModel, TuningEvaluationSpec


PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")


def distill_model(
    dataset: str,
    source_model: str,
    evaluation_dataset: Optional[str] = None,
) -> None:
    """Distill a new model using a teacher model and a dataset.
    Args:
        dataset (str): GCS URI of the JSONL file containing the training data.
            E.g., "gs://[BUCKET]/[FILENAME].jsonl".
        source_model (str): Name of the teacher model to distill from.
            E.g., "text-unicorn@001".
        evaluation_dataset (Optional[str]): GCS URI of the JSONL file containing the evaluation data.
    """
    # TODO developer - override these parameters as needed:
    vertexai.init(project=PROJECT_ID, location="us-central1")

    # Create a tuning evaluation specification with the evaluation dataset
    eval_spec = TuningEvaluationSpec(evaluation_data=evaluation_dataset)

    # Load the student model from a pre-trained model
    student_model = TextGenerationModel.from_pretrained("text-bison@002")

    # Start the distillation job using the teacher model and dataset
    distillation_job = student_model.distill_from(
        teacher_model=source_model,
        dataset=dataset,
        # Optional:
        train_steps=300,  # Number of training steps to use when tuning the model.
        evaluation_spec=eval_spec,
    )

    return distillation_job

Console

Pour distiller un modèle de texte à l'aide de la console Google Cloud, procédez comme suit :

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

    Accéder à Vertex AI Studio

  2. Cliquez sur l'onglet Régler et distiller.
  3. Cliquez sur Créer un modèle distillé.
  4. Configurez les détails du modèle :
    • Nom du modèle : saisissez un nom pour votre modèle réglé.
    • Modèle enseignant : sélectionnez le modèle que vous souhaitez utiliser pour le modèle enseignant.
    • Modèle étudiant : sélectionnez le modèle que vous souhaitez utiliser pour le modèle étudiant.
    • Région : sélectionnez la région où le job de réglage de pipeline s'exécute et où le modèle réglé est déployé.
    • Répertoire de travail : saisissez l'emplacement Cloud Storage où sont stockés les artefacts lorsque votre modèle est réglé.
  5. Développez la section Options avancées pour configurer les paramètres avancés.
    • Étapes d'entraînement : saisissez le nombre d'étapes à exécuter pour le réglage du modèle. La valeur par défaut est 300. La taille de lot varie en fonction de l'emplacement de réglage et de la taille du modèle. Pour les modèles à 8 000, tels que text-bison@002, chat-bison@002, code-bison@002 et codechat-bison@002 :
      • us-central1 a une taille de lot de 8.
      • europe-west4 a une taille de lot de 24.
      Pour les modèles à 32 000, tels que text-bison-32k, chat-bison-32k, code-bison-32k et codechat-bison-32k :
      • us-central1 a une taille de lot de 8.
      • europe-west4 a une taille de lot de 8.

      Par exemple, si vous entraînez le modèle text-bison@002 dans la région europe-west4, vous allez disposer de 240 exemples dans un ensemble de données d'entraînement, et si vous définissez le paramètre steps sur 20, alors le nombre d'exemples d'entraînement va correspondre au produit du nombre d'étapes par la taille de lot, soit 20 x 24 = 480 étapes d'entraînement. Dans ce cas, le processus d'entraînement comporte deux époques, car il parcourt les exemples deux fois. Dans la région us-central1, si un ensemble de données d'entraînement contient 240 exemples et si vous définissez le paramètre steps sur 15, alors le nombre d'exemples d'entraînement va correspondre au produit du nombre d'étapes par la taille de lot, soit 15 x8 = 120 étapes d'entraînement. Dans ce cas, le processus d'entraînement ne va comporter que 0,5 époque, car le nombre d'étapes d'entraînement est inférieur de moitié au nombre d'exemples.

    • Multiplicateur du taux d'apprentissage : saisissez la taille de pas à chaque itération. La valeur par défaut est de 1.
    • Type d'accélérateur : (facultatif) saisissez le type d'accélérateur à utiliser pour le réglage du modèle. Les options valides sont les suivantes :
      • GPU : utilise 8 GPU A100 de 80 Go pour le réglage. Assurez-vous de disposer d'un quota suffisant. Si vous choisissez GPU, VPC-SC est compatible. CMEK est compatible si l'emplacement de réglage et d'importation du modèle est us-centra1. Pour en savoir plus, consultez la section Paramètres de région des réglages supervisés. Si vous choisissez GPU, les calculs de réglage du modèle s'effectuent dans la région us-central1.
      • TPU : utilise 64 cœurs du pod TPU v3 pour le réglage. Assurez-vous de disposer d'un quota suffisant. Les clés CMEK ne sont pas acceptées, mais VPC-SC l'est. Si vous choisissez TPU, les calculs de réglage de votre modèle s'effectuent dans la région europe-west4.
    • Ajouter une instance TensorBoard : (facultatif) ID d'une instance Vertex AI TensorBoard. L'instance Vertex AI TensorBoard est utilisée pour créer un test une fois le job de réglage terminé. L'instance Vertex AI TensorBoard doit se trouver dans la même région que le pipeline de réglage.
    • Chiffrement (facultatif) : choisissez d'utiliser une clé appartenant à Google et gérée par Google, ou une clé de chiffrement gérée par le client (CMEK). Les clés CMEK ne sont disponibles que pour le chiffrement dans la région us-central1. Dans toutes les autres régions disponibles, une clé appartenant à Google et gérée par Google est utilisée. Pour en savoir plus, consultez la page Présentation du chiffrement CMEK.
    • Compte de service (facultatif) Choisissez un compte de service géré par l'utilisateur. Un compte de service détermine les ressources Google Cloud auxquelles votre code de service peut accéder. Si vous ne choisissez pas de compte de service, un agent de service doté des autorisations appropriées pour la plupart des modèles est utilisé.
  6. Cliquez sur Continuer.
  7. Si vous souhaitez importer le fichier de votre ensemble de données de distillation, sélectionnez  Importer le fichier JSONL dans Cloud Storage. Si le fichier de votre ensemble de données se trouve déjà dans un bucket Cloud Storage, sélectionnez  Fichier JSONL existant dans Cloud Storage.

    Importer un fichier JSONL

    • Dans le champ Sélectionner un fichier JSONL, cliquez sur Parcourir et sélectionnez le fichier de votre ensemble de données.
    • Dans le champ Emplacement de l'ensemble de données, cliquez sur Parcourir et sélectionnez le bucket Cloud Storage dans lequel vous souhaitez stocker le fichier de votre ensemble de données.

    Utiliser un fichier JSONL existant

    Dans Chemin d'accès du fichier Cloud Storage, cliquez sur Parcourir et sélectionnez le bucket Cloud Storage où se trouve le fichier de votre ensemble de données.

  8. (Facultatif) Pour évaluer votre modèle distillé, sélectionnez Activer l'évaluation du modèle et configurez votre évaluation du modèle :
    • Ensemble de données d'évaluation : (facultatif) URI du fichier JSONL contenant l'ensemble de données d'évaluation pour la prédiction par lot et l'évaluation. L'évaluation n'est pas compatible avec codechat-bison. Pour plus d'informations, consultez la page Format d'ensemble de données pour le réglage d'un modèle de code. L'ensemble de données d'évaluation nécessite entre 10 et 250 exemples.
    • Intervalle d'évaluation : (facultatif, valeur par défaut 20) nombre d'étapes de réglage entre chaque évaluation. Un intervalle d'évaluation n'est pas disponible pour les modèles de chat. Étant donné que l'évaluation s'exécute sur l'ensemble de données d'évaluation complet, un intervalle d'évaluation plus petit entraîne un temps de réglage plus long. Par exemple, si steps est égal à 200 et la valeur de EVAL_INTERVAL égale à 100, vous n'obtenez que deux points de données pour les métriques d'évaluation. Ce paramètre nécessite que evaluation_data_uri soit défini.
    • Activer l'arrêt prématuré : (facultatif, valeur par défaut true) Une valeur boolean qui, si elle est définie sur true, arrête le réglage avant d'effectuer toutes les étapes de réglage en cas de performances du modèle comme mesuré par la précision des jetons prévus, ne s'améliore pas suffisamment entre les exécutions d'évaluations. Si elle est définie sur false, le réglage se poursuit jusqu'à ce que toutes les étapes de réglage soient terminées. Ce paramètre nécessite que evaluation_data_uri soit défini. L'arrêt prématuré n'est pas disponible pour les modèles de chat.
    • Activer la sélection de points de contrôle : Lorsque cette option est activée, Vertex AI sélectionne et renvoie le point de contrôle avec les meilleures performances d'évaluation de modèle de tous les points de contrôle créés lors de la tâche de réglage. Lorsqu'elle est désactivée, le point de contrôle final créé lors de la tâche de réglage est renvoyé. Chaque point de contrôle fait référence à un instantané du modèle lors d'une tâche de réglage.
    • Instance TensorBoard : (facultatif) ID d'une instance Vertex AI TensorBoard. L'instance Vertex AI TensorBoard est utilisée pour créer un test une fois la tâche de réglage terminée. L'instance Vertex AI TensorBoard doit se trouver dans la même région que le pipeline de réglage.
  9. Cliquez sur Démarrer la distillation.

Le tableau suivant présente les configurations recommandées pour le réglage d'un modèle de fondation par tâche :

Tâche Nombre d'exemples dans l'ensemble de données Étapes d'entraînement
Classification Plus de 100 200-1000
Synthèse 100-500+ 1000-1500
Questions-réponses extractives Plus de 100 200 à 800

Pour les étapes d'entraînement, vous pouvez essayer plusieurs valeurs pour obtenir les meilleures performances sur un ensemble de données particulier (par exemple, 100, 200, 500).

Afficher la liste des modèles distillés

Vous pouvez afficher la liste des modèles de votre projet actuel, y compris de vos modèles distillés, à l'aide de la console Google Cloud ou du SDK Vertex AI pour Python.

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Python.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import vertexai

from vertexai.language_models import TextGenerationModel

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"

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

model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model_names = model.list_tuned_model_names()
print(tuned_model_names)
# Example response:
# ['projects/1234567890/locations/us-central1/models/1234567889012345',
# ...]

Console

Pour afficher vos modèles distillés dans la console Google Cloud, accédez à la page Vertex AI Model Registry.

Accéder à Vertex AI Model Registry

Charger un modèle de texte distillé

L'exemple de code suivant utilise le SDK Vertex AI pour Python pour charger un modèle de génération de texte distillé :

import vertexai
from vertexai.preview.language_models import TextGenerationModel

model = TextGenerationModel.get_tuned_model(TUNED_MODEL_NAME)

Remplacez TUNED_MODEL_NAME par le nom de ressource qualifié de votre modèle réglé. Ce nom est au format projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID. Vous pouvez trouver l'ID de votre modèle distillé dans Vertex AI Model Registry.

Métriques de réglage et d'évaluation

Vous pouvez configurer une tâche de réglage de modèle pour collecter et signaler les métriques de réglage de modèle et d'évaluation du modèle, qui peuvent ensuite être visualisées à l'aide de Vertex AI TensorBoard.

Métriques de réglage du modèle

Vous pouvez configurer une tâche de réglage de modèle afin de collecter les métriques de réglage suivantes pour chat-bison, code-bison, codechat-bison et text-bison :
  • /train_total_loss : perte de l'ensemble de données de réglage à une étape d'entraînement.
  • /train_fraction_of_correct_next_step_preds : justesse du jeton à un pas d'entraînement. Une prédiction unique consiste en une séquence de jetons. Cette métrique mesure la précision des jetons prévus par rapport à la vérité terrain dans l'ensemble de données de réglage.
  • /train_num_predictions: Nombre de jetons prévus à une étape d'évaluation.

Métriques d'évaluation du modèle

Vous pouvez configurer une tâche de réglage de modèle pour collecter les métriques d'évaluation suivantes pour code-bison et text-bison :

  • /eval_total_loss : perte de l'ensemble de données d'évaluation à une étape d'évaluation.
  • /eval_fraction_of_correct_next_step_preds : justesse du jeton à une étape d'évaluation. Une prédiction unique consiste en une séquence de jetons. Cette métrique mesure la précision des jetons prévus par rapport à la vérité terrain dans l'ensemble de données d'évaluation.
  • /eval_num_predictions : nombre de jetons prédits à une étape d'évaluation.

Les visualisations des métriques sont disponibles une fois le job de réglage du modèle terminé. Si vous ne spécifiez qu'un ID d'instance Vertex AI TensorBoard et non un ensemble de données d'évaluation lorsque vous créez la tâche de réglage, seules les visualisations des métriques de réglage sont disponibles.