1. Introduction
Pourquoi le réglage précis est-il important ?
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 grande quantité d'informations et effectuer de nombreuses tâches, mais ils n'excellent que lorsqu'ils reçoivent un entraînement spécialisé. L'affinage 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 apprendrez à effectuer un réglage fin à l'aide de l'approche de réglage 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 l'exécution d'une tâche ou un comportement souhaité. Nous allons fournir un ensemble de données étiquetées 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és
Supposons que vous souhaitiez générer automatiquement des titres pour des articles d'actualité. Vertex AI vous permet d'affiner un LLM qui génère un titre résumé adapté dans un style spécifique et le personnalise en fonction des consignes de la chaîne d'information.
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 BigQuerybigquery-public-data.bbc_news.fulltext). - Ajustez un LLM (
text-bison@002) à un nouveau modèle ajusté appelé "bbc-news-summary-tuned" et 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 exécuter les étapes de réglage fin 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.
- Ajuster un modèle pré-entraîné : choisissez un modèle de base tel que "
text-bison@002" et ajustez-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é avec celles du modèle de base pour évaluer l'amélioration de la qualité de la génération de titres.
- Déployez et utilisez votre modèle : rendez votre modèle affiné disponible via un point de terminaison d'API et commencez à générer automatiquement des titres pour de nouveaux articles.
2. Avant de commencer
- Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
- 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.
- Ouvrez un notebook Colab et connectez-vous au même compte que votre compte Google Cloud actif actuel.
3. Ajuster un grand modèle de langage
Cet atelier de programmation utilise le SDK Vertex AI pour Python afin d'affiner le modèle. Vous pouvez également affiner le modèle à l'aide des autres options : HTTP, commande CURL, SDK Java et console.
Vous pouvez affiner et évaluer votre modèle pour obtenir des réponses personnalisées en cinq étapes. Vous pouvez vous référer au 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 étapes restantes comme indiqué 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 :

6. Étape 3 : Affiner un grand modèle de langage
Vous pouvez ajuster n'importe quel grand modèle de langage à ce stade (en fonction de la disponibilité de l'assistance) . Dans cet extrait, nous ajustons le modèle préentraîné "text-bison@002" avec le DataFrame 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 du réglage fin à l'aide du lien vers le job de pipeline dans le résultat.
7. Étape 4 : Prédire avec le nouveau modèle affiné
Une fois le job d'affinage terminé, vous pourrez effectuer des prédictions avec votre nouveau modèle. Pour effectuer une prédiction avec votre nouveau modèle réglé :
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 :

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 :

Bien que les deux titres générés semblent appropriés, le premier (généré avec le modèle affiné) correspond davantage au style des titres utilisés dans l'ensemble de données en question.
Charger le modèle affiné
Il peut être plus facile de charger un modèle que vous venez de peaufiner. Mais 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 ajusté dans la variable "tuned_model". Mais que faire si vous souhaitez appeler un modèle qui a été réglé dans le passé ?
Pour ce faire, vous pouvez appeler la méthode get_tuned_model() sur le LLM avec l'URL complète du point de terminaison du modèle affiné déployé à partir de Vertex AI Model Registry. Notez que, dans ce cas, vous saisissez le numéro de projet et le numéro de modèle 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 s'agit d'examiner la sortie d'un modèle de langage génératif pour déterminer sa cohérence, sa précision et son adéquation avec la requête fournie. L'évaluation des modèles permet d'identifier les points à améliorer, d'optimiser les performances des modèles 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 sur le modèle affiné et les comparer à celles du modèle de base.
- 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)
- Définissez la spécification d'évaluation pour une tâche de synthèse de texte sur le modèle affiné.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
Cette étape prendra quelques minutes. Vous pouvez suivre la progression à l'aide du lien vers le job de pipeline dans le résultat. Une fois l'évaluation terminée, le résultat suivant devrait s'afficher :

La métrique rougeLSum dans le résultat de l'évaluation spécifie le score ROUGE-L pour le 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 plus longue sous-séquence commune (LCS) entre les deux résumés et en la divisant par la longueur du résumé de référence.
Le score rougeLSum dans 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 trouverez les résultats de l'évaluation dans le répertoire de sortie Cloud Storage que vous avez spécifié lors de la création du job 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 les dernières informations sur la compatibilité.
- Développement rapide : le domaine des LLM progresse rapidement. Un modèle plus récent et plus puissant pourrait potentiellement surpasser un modèle affiné basé sur un modèle de base plus ancien. La bonne nouvelle, c'est que vous pourrez appliquer ces techniques d'affinage aux modèles plus récents lorsque cette fonctionnalité sera disponible.
- LoRA : LoRA est une technique permettant d'affiner efficacement les LLM. Pour ce faire, elle introduit des matrices de décomposition de rang faible entraînables dans les couches du modèle pré-entraîné existant. Pour en savoir plus, cliquez ici. Au lieu de mettre à jour tous les paramètres d'un LLM massif, LoRA apprend des matrices plus petites qui sont ajoutées aux matrices de pondération du modèle d'origine ou multipliées par celles-ci. 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 soient facturées sur votre compte Google Cloud, procédez comme suit :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
- Vous pouvez également accéder à Model Registry, puis à l'onglet "Déployer et tester" du modèle, annuler le déploiement du point de terminaison et supprimer le modèle réglé 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 pour votre domaine et vos tâches. Vertex AI vous fournit les outils et les 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 le fine-tuning et l'évaluation par vous-même. Réfléchissez à la manière dont les LLM affinés peuvent répondre à vos besoins spécifiques, qu'il s'agisse de générer des textes marketing ciblés, de résumer des documents complexes ou de traduire des langues en tenant compte 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.