1. Introduction
Pourquoi l'affinage est-il important ?
Les modèles de fondation sont entraînés pour un usage général et n'effectuent parfois pas les tâches comme vous le souhaiteriez. Cela peut être dû au fait que les tâches que vous souhaitez que le modèle effectue soient des tâches spécialisées qu'il est difficile d'entraîner avec un modèle en utilisant uniquement la conception de requête. Dans ce cas, vous pouvez utiliser le réglage de modèle afin d'améliorer ses performances pour des tâches spécifiques. Le réglage du modèle peut également vous aider à respecter des exigences de sortie spécifiques lorsque les instructions ne sont pas suffisantes. Les grands modèles de langage (LLM) peuvent contenir une grande quantité d'informations et effectuer de nombreuses tâches, mais ils n'excellent qu'avec une formation spécialisée. L'affinage permet d'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 à affiner un modèle LLM à l'aide de l'approche du réglage supervisé.
Le réglage supervisé améliore les performances d'un modèle en enseignant une nouvelle compétence. Des données contenant des centaines d'exemples étiquetés sont utilisées pour apprendre au modèle à imiter un comportement ou une tâche souhaités. Nous allons fournir un ensemble de données étiqueté pour le texte d'entrée (requête) et le texte de sortie (réponse) afin d'enseigner au modèle comment 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 les articles d'actualité
Supposons que vous souhaitiez générer automatiquement des titres pour vos articles d'actualité. Avec Vertex AI, vous pouvez affiner un LLM qui génère un titre résumé adapté dans un style spécifique et le personnalise selon les 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 BigQuerybigquery-public-data.bbc_news.fulltext
). - Ajuster un LLM (
text-bison@002
) à un nouveau modèle affiné appelé "bbc-news-summary-tuned
" et comparer 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 effectuer les étapes d'ajustement suivantes: - Préparez vos données:commencez avec un ensemble de données composé d'articles de presse et de leurs titres correspondants, comme l'ensemble de données de BBC News utilisé dans l'exemple de code.
- Régler un modèle pré-entraîné:choisissez un modèle de base comme "
text-bison@002
" et l'affiner 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 constater l'amélioration de la qualité de la génération de titres.
- Déployer et utiliser 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 les 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 Colab Notebook 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 effectuer des réglages à l'aide d'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 faire référence au code complet dans le fichier llm_fine_tuning_supervised.ipynb qui se trouve dans le 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 et 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 via 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)
Cette étape devrait se traduire par:
6. Étape 3: Ajustez un grand modèle de langage
À ce stade, vous pouvez régler n'importe quel grand modèle de langage (en fonction de la disponibilité de l'assistance) . Dans cet extrait, cependant, nous ajustons le modèle pré-entraîné "text-bison@002" avec la trame de données qui contient 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 du job de pipeline dans le résultat.
7. Étape 4: Faire des prédictions avec le nouveau modèle affiné
Une fois le job d'affinage terminé, vous pourrez générer des prédictions avec votre nouveau modèle. Pour effectuer des prédictions 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 :
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 adapté 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 d'affiner. Mais n'oubliez pas qu'à l'étape 3, elle est appelée dans le champ d'application du code lui-même. Elle contient donc toujours le modèle réglé dans la variable "adjust_model". Mais que faire si vous voulez appeler un modèle qui a déjà été réglé ?
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 PROJECT_NUMBER et le MODEL_NUMBER au lieu de leurs identifiants 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 de l'évaluation de la qualité et de la pertinence de la réponse générée. Elle implique d'examiner les résultats d'un modèle de langage génératif pour déterminer sa cohérence, sa justesse et son alignement avec la requête fournie. L'évaluation du modèle permet d'identifier les points à améliorer, d'optimiser ses performances, et de s'assurer que le texte généré répond aux normes souhaitées en termes de qualité et d'utilité. 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 au modèle de base.
- Chargez l'ensemble de données "EVALUATION":
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- Définir la spécification d'évaluation d'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 prend quelques minutes. Vous pouvez suivre la progression à l'aide du lien du job de pipeline dans le résultat. Une fois l'opération terminée, le résultat d'évaluation suivant doit s'afficher:
La métrique rougeLSum
du 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. Elle est calculée en divisant la sous-séquence commune la plus longue entre les deux résumés 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 observerez que le score résumé est relativement plus élevé pour le modèle affiné.
Les résultats de l'évaluation se trouvent dans le répertoire de sortie Cloud Storage que vous avez spécifié lors de la création du job d'évaluation. Le fichier est nommé evaluation_metrics.json
. Pour les modèles réglés, vous pouvez également afficher les résultats de l'évaluation dans la console Google Cloud sur la page Registre de modèles de Vertex AI.
9. Remarques importantes
- Prise en charge des modèles:consultez toujours la documentation du modèle pour connaître sa compatibilité la plus récente.
- Développement rapide:le domaine des LLM progresse rapidement. Un modèle plus récent et plus puissant pourrait potentiellement être plus performant qu'un modèle affiné basé sur une base plus ancienne. La bonne nouvelle, c'est que vous pourrez appliquer ces techniques d'affinage aux nouveaux modèles lorsque la fonctionnalité sera disponible.
- LoRA:la technique LoRA permet d'affiner efficacement les LLM. Pour ce faire, elle introduit des matrices de décomposition de faible rang pouvant être entraînées 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 grand LLM, 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 de l'affinage.
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 au registre de modèles, puis à l'onglet "Déployer et tester le 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. L'affinage est une technique efficace pour 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 vous familiariser avec les paramètres et l'évaluation. Réfléchissez à la façon 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 correspondant à des nuances culturelles. Utilisez la suite complète d'outils et de services proposée par Vertex AI pour créer, entraîner, évaluer et déployer facilement vos modèles affinés.