Affiner les grands modèles de langage: comment Vertex AI fait passer les LLM à la vitesse supérieure

Affiner les grands modèles de langage:
comment Vertex AI fait passer les LLM au niveau supérieur

À propos de cet atelier de programmation

subjectDernière mise à jour : mai 2, 2024
account_circleRédigé par Author: Abirami Sukumaran, Editor: Muthu Ganesh

1. Introduction

Les modèles de fondation sont entraînés à des fins générales et n'effectuent parfois pas les tâches comme vous le souhaitez. Cela peut être dû au fait que les tâches que vous souhaitez que le modèle exécute sont des tâches spécialisées difficiles à enseigner au modèle avec une conception de requête. Dans ce cas, vous pouvez utiliser les réglages de modèles afin d'améliorer les performances d'un modèle pour des tâches spécifiques. Le réglage du modèle peut également l'aider à respecter des exigences spécifiques de sortie lorsque les instructions sont insuffisantes. Les grands modèles de langage (LLM) peuvent contenir une vaste quantité d'informations et effectuer de nombreuses tâches, mais ils n'excellent que lorsqu'ils sont entraînés de manière spécialisée. Le réglage fin peut entraîner un LLM, ce qui vous permet d'adapter un LLM pré-entraîné à vos besoins spécifiques.

Dans cet atelier de programmation, vous allez apprendre à effectuer un ajustement fin à l'aide de l'approche d'ajustement supervisé pour un modèle LLM.

Le réglage supervisé améliore les performances d'un modèle en lui apprenant une nouvelle compétence. Des données contenant des centaines d'exemples étiquetés sont utilisées pour apprendre au modèle à simuler un comportement ou une tâche souhaité. Nous allons fournir un ensemble de données libellé pour le texte d'entrée (requête) et le texte de sortie (réponse) afin d'apprendre au modèle à personnaliser les réponses pour notre cas d'utilisation spécifique.

Pour en savoir plus sur la personnalisation des modèles, cliquez ici.

Objectifs de l'atelier

Cas d'utilisation: Générer des titres pour des articles d'actualité

Supposons que vous souhaitiez générer automatiquement des titres pour des articles d'actualité. Avec Vertex AI, vous pouvez affiner un LLM qui génère un titre récapitulatif approprié dans un style spécifique et le personnalise conformément aux consignes de la chaîne d'actualités.

Dans cet atelier de programmation, vous allez effectuer les opérations suivantes:

  • Utilisez BBC FULLTEXT DATA (mis à disposition par l'ensemble de données public BigQuery bigquery-public-data.bbc_news.fulltext).
  • Affinez un LLM (text-bison@002) pour obtenir un nouveau modèle affiné appelé "bbc-news-summary-tuned", puis comparez le résultat à la réponse du modèle de base. Un exemple de fichier JSONL est disponible pour cet atelier de programmation dans le dépôt. Vous pouvez importer le fichier dans votre bucket Cloud Storage et suivre les étapes de paramétrage suivantes:
  • Préparez vos données:commencez par un ensemble de données d'articles d'actualité et de leurs titres correspondants, comme l'ensemble de données BBC News utilisé dans l'exemple de code.
  • Affiner un modèle pré-entraîné:choisissez un modèle de base comme "text-bison@002" et affinez-le avec vos données d'actualités à l'aide du SDK Vertex AI pour Python.
  • Évaluez les résultats:comparez les performances de votre modèle affiné à celles du modèle de base pour voir l'amélioration de la qualité de génération des titres.
  • Déployez et utilisez votre modèle:mettez votre modèle affiné à disposition via un point de terminaison d'API et commencez à générer automatiquement des titres pour les nouveaux articles.

2. Avant de commencer

  1. Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
  2. Assurez-vous que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
  3. Ouvrez Colab Notebook et connectez-vous au même compte que votre compte Google Cloud actif actuel.

3. Affiner un grand modèle de langage

Cet atelier de programmation utilise le SDK Vertex AI pour Python pour affiner le modèle. Vous pouvez également effectuer un ajustement fin à l'aide des autres options : HTTP, commande CURL, SDK Java, console.

Vous pouvez affiner et évaluer votre modèle pour obtenir des réponses personnalisées en cinq étapes. Vous pouvez consulter le code complet dans le fichier llm_fine_tuning_supervised.ipynb du dépôt.

4. Étape 1: Installez et importez les dépendances

!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components

Suivez les autres étapes indiquées dans le fichier .ipynb du dépôt. Veillez à remplacer PROJECT_ID et BUCKET_NAME par vos identifiants.

import os
os
.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings
.filterwarnings('ignore')
import vertexai
vertexai
.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec

5. Étape 2: Préparer et charger les données d'entraînement

Remplacez YOUR_BUCKET par votre bucket, puis importez-y l'exemple de fichier de données d'entraînement TRAIN.jsonl. Les exemples de données ont été provisionnés pour ce cas d'utilisation dans le lien mentionné ci-dessus.

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df
= pd.read_json(json_url, lines=True)
print (df)

Vous devriez obtenir le résultat suivant:

17274866af36a47c.png

6. Étape 3: Affiner un grand modèle de langage

Vous pouvez ajuster n'importe quel grand modèle de langage à ce stade (selon la disponibilité de l'assistance) . Dans cet extrait, nous allons toutefois ajuster le modèle pré-entraîné "text-bison@002" avec le frame de données contenant les données d'entraînement que nous avons chargées à l'étape précédente :

model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model
= TextGenerationModel.from_pretrained("text-bison@002")
tuned_model
.tune_model(
training_data
=df,
train_steps
=100,
tuning_job_location
="europe-west4",
tuned_model_location
="europe-west4",
)

Cette étape prendra quelques heures. Vous pouvez suivre la progression de l'ajustement à l'aide du lien de la tâche de pipeline dans le résultat.

7. Étape 4: Effectuer des prédictions avec le nouveau modèle affiné

Une fois le travail de réglage fin terminé, vous pourrez effectuer des prédictions avec votre nouveau modèle. Pour effectuer une prédiction avec votre nouveau modèle affiné:

response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

Vous devriez obtenir le résultat suivant :

67061c36b7ba39b7.png

Pour effectuer des prédictions avec le modèle de base (text-bison@002) à des fins de comparaison, exécutez les commandes suivantes:

base_model = TextGenerationModel.from_pretrained("text-bison@002")
response
= base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

Vous devriez obtenir le résultat suivant :

22ec58e4261405d6.png

Même si les deux titres générés semblent appropriés, le premier (généré avec le modèle affiné) est plus en phase avec le style des titres utilisés dans l'ensemble de données en question.

Charger le modèle affiné

Il peut être plus simple de charger un modèle que vous venez d'ajuster. Toutefois, n'oubliez pas qu'à l'étape 3, il est appelé dans le champ d'application du code lui-même. Il contient donc toujours le modèle optimisé dans la variable tuned_model. Mais que faire si vous souhaitez appeler un modèle qui a été réglé par le passé ?

Pour ce faire, vous pouvez appeler la méthode get_tuned_model() sur le LLM avec l'URL ENDPOINT complète du modèle affiné déployé à partir de Vertex AI Model Registry. Notez que dans ce cas, vous saisissez le PROJECT_NUMBER et le MODEL_NUMBER au lieu de leurs ID respectifs.

tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))

8. Étape 5: Évaluer le nouveau modèle affiné

L'évaluation est un aspect essentiel pour évaluer la qualité et la pertinence de la réponse générée. Il consiste à examiner la sortie d'un modèle de langage génératif pour déterminer sa cohérence, sa précision et son alignement avec la requête fournie. L'évaluation du modèle permet d'identifier les points à améliorer, d'optimiser les performances du modèle et de s'assurer que le texte généré répond aux normes de qualité et d'utilité souhaitées. Pour en savoir plus, consultez la documentation. Pour l'instant, nous allons voir comment obtenir des métriques d'évaluation du modèle affiné et le comparer au modèle de base.

  1. Chargez l'ensemble de données d'évaluation:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df
= pd.read_json(json_url, lines=True)
print (df)
  1. Définissez les spécifications d'évaluation pour une tâche de résumé de texte sur le modèle affiné.
task_spec = EvaluationTextSummarizationSpec(
 task_name
= "summarization",
 ground_truth_data
=df
)

Cette étape prend quelques minutes. Vous pouvez suivre la progression à l'aide du lien de la tâche de pipeline dans le résultat. Une fois l'évaluation terminée, le résultat suivant devrait s'afficher:

387843d6c970e02.png

La métrique rougeLSum dans le résultat de l'évaluation spécifie le score ROUGE-L du résumé. ROUGE-L est une métrique basée sur le rappel qui mesure le chevauchement entre un résumé et un résumé de référence. Il est calculé en prenant la sous-séquence commune la plus longue (LCS) entre les deux résumés et en la divisant par la longueur du résumé de référence.

Le score rougeLSum de l'expression fournie est de 0,36600753600753694, ce qui signifie que le résumé présente un chevauchement de 36,6% avec le résumé de référence.

Si vous exécutez l'étape d'évaluation sur le modèle de référence, vous constaterez que le score récapitulatif est relativement plus élevé pour le modèle affiné.

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, sur la page Registre de modèles de Vertex AI.

9. Remarques importantes

  • Compatibilité des modèles:consultez toujours la documentation du modèle pour connaître la dernière compatibilité.
  • Développement rapide:le domaine des LLM évolue rapidement. Un modèle plus récent et plus puissant peut potentiellement surpasser un modèle affiné basé sur une base plus ancienne. La bonne nouvelle est que vous pourrez appliquer ces techniques d'ajustement aux modèles plus récents lorsque cette fonctionnalité sera disponible.
  • LoRA:technique permettant d'ajuster efficacement les LLM. Pour ce faire, il introduit des matrices de décomposition à faible rang entraînables dans les couches du modèle pré-entraîné existant. En savoir plus Au lieu de mettre à jour tous les paramètres d'un LLM massif, LoRA apprend des matrices plus petites qui sont ajoutées ou multipliées par les matrices de pondération du modèle d'origine. Cela réduit considérablement le nombre de paramètres supplémentaires introduits lors du réglage fin.

10. Effectuer un nettoyage

Pour éviter que les ressources utilisées dans cet atelier de programmation ne soient facturées sur votre compte Google Cloud, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.
  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
  4. Vous pouvez également accéder à Model Registry, puis à l'onglet "Déployer et tester le modèle". Déployez ensuite le point de terminaison et supprimez le modèle affiné déployé.

11. Félicitations

Félicitations ! Vous avez utilisé Vertex AI pour affiner un modèle LLM. Le réglage fin est une technique puissante qui vous permet de personnaliser les LLM en fonction de votre domaine et de vos tâches. Avec Vertex AI, vous disposez des outils et des ressources dont vous avez besoin pour affiner vos modèles de manière efficace.

Explorez les dépôts GitHub et testez l'exemple de code pour découvrir par vous-même le réglage fin et l'évaluation. Réfléchissez à la façon dont les LLM affinés peuvent répondre à vos besoins spécifiques, de la génération de contenu marketing ciblé à la synthèse de documents complexes ou à la traduction de langues avec des nuances culturelles. Utilisez la suite complète d'outils et de services proposés par Vertex AI pour créer, entraîner, évaluer et déployer facilement vos modèles affinés.