Débogage rapide des LLM avec Learning Interpretability Tool (LIT) sur GCP

1. Présentation

Cet atelier fournit un guide détaillé sur le déploiement d'un serveur d'application LIT sur Google Cloud Platform (GCP) pour interagir avec les modèles de fondation Gemini de Vertex AI et les grands modèles de langage (LLM) tiers auto-hébergés. Elle comprend également des conseils sur l'utilisation de l'interface utilisateur LIT pour un débogage et une interprétation du modèle rapides.

En suivant cet atelier, les utilisateurs apprendront à:

  • Configurez un serveur LIT sur GCP.
  • Connectez le serveur LIT aux modèles Gemini Vertex AI ou à d'autres LLM auto-hébergés.
  • Utilisez l'interface utilisateur de LIT pour analyser, déboguer et interpréter les invites afin d'améliorer les performances et les insights du modèle.

Qu'est-ce que LIT ?

LIT est un outil visuel et interactif de compréhension des modèles qui prend en charge le texte, les images et les données tabulaires. Il peut être exécuté en tant que serveur autonome ou dans des environnements de notebook tels que Google Colab, Jupyter et Google Cloud Vertex AI. LIT est disponible sur PyPI et GitHub.

Initialement conçus pour comprendre les modèles de classification et de régression, les mises à jour récentes ont ajouté des outils de débogage des requêtes LLM, qui vous permettent d'explorer l'impact du contenu utilisateur, du modèle et du système sur le comportement de génération.

Qu'est-ce que Vertex AI et Model Garden ?

Vertex AI est une plate-forme de machine learning (ML) qui vous permet d'entraîner et de déployer des modèles de ML et des applications d'IA, ainsi que de personnaliser des grands modèles de langage (LLM) pour les utiliser dans vos applications optimisées par l'IA. Vertex AI combine les workflows d'ingénierie des données, de data science et d'ingénierie de ML, ce qui permet à vos équipes de collaborer à l'aide d'un ensemble d'outils commun et de faire évoluer vos applications en tirant parti des avantages de Google Cloud.

Vertex Model Garden est une bibliothèque de modèles de ML qui vous aide à découvrir, tester, personnaliser et déployer des modèles et des éléments propriétaires de Google, puis de sélectionner des modèles et des éléments tiers.

Objectifs de l'atelier

Vous allez utiliser Cloud Shell et Cloud Run de Google pour déployer un conteneur Docker à partir de l'image prédéfinie de LIT.

Cloud Run est une plate-forme de calcul gérée qui vous permet d'exécuter des conteneurs directement sur l'infrastructure évolutive de Google, y compris sur des GPU.

Ensemble de données

La démonstration utilise l'exemple d'ensemble de données de débogage de l'invite LIT par défaut. Vous pouvez également charger le vôtre via l'UI.

Avant de commencer

Pour ce guide de référence, vous avez besoin d'un projet Google Cloud. Vous pouvez en créer un ou sélectionner un projet existant.

2. Lancer la console Google Cloud et Cloud Shell

Dans cette étape, vous allez lancer Google Cloud Console et utiliser Google Cloud Shell.

2-a: Lancez la console Google Cloud.

Ouvrez un navigateur et accédez à la console Google Cloud.

La console Google Cloud est une interface d'administration Web puissante et sécurisée qui vous permet de gérer rapidement vos ressources Google Cloud. Il s'agit d'un outil DevOps mobile.

2-b: Lancer Google Cloud Shell

Cloud Shell est un environnement de développement et d'opérations en ligne, accessible depuis votre navigateur, où que vous soyez. Vous pouvez y gérer vos ressources grâce à un terminal en ligne comportant des utilitaires préchargés tels que l'outil de ligne de commande gcloud, kubectl et bien plus encore. Vous pouvez également développer, compiler, déboguer et déployer vos applications cloud à l'aide de l'éditeur Cloud Shell en ligne. Cloud Shell fournit un environnement en ligne prêt à l'emploi pour les développeurs, avec un ensemble d'outils favoris préinstallés et 5 Go d'espace de stockage persistant. Vous utiliserez l'invite de commande dans les étapes suivantes.

Lancez Google Cloud Shell à l'aide de l'icône en haut à droite de la barre de menu, entourée en bleu dans la capture d'écran suivante.

Lancement de la console Google Cloud

Un terminal avec un shell Bash doit s'afficher en bas de la page.

Console Google Cloud

2-c: Définir le projet Google Cloud

Vous devez définir l'ID et la région du projet à l'aide de la commande gcloud.

# Set your GCP Project ID.
gcloud config set project your-project-id

# Set your GCP Project Region.
gcloud config set run/region your-project-region

3. Déployer l'image Docker du serveur d'application LIT avec Cloud Run

3-a: Déployer l'application LIT sur Cloud Run

Vous devez d'abord définir la dernière version de LIT-App comme version à déployer.

# Set latest version as your LIT_SERVICE_TAG.
export LIT_SERVICE_TAG=latest
# List all the public LIT GCP App server docker images.
gcloud container images  list-tags  us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app

Après avoir défini la balise de version, vous devez nommer le service.

# Set your lit service name. While 'lit-app-service' is provided as a placeholder, you can customize the service name based on your preferences.
export LIT_SERVICE_NAME=lit-app-service

Vous pouvez ensuite exécuter la commande suivante pour déployer le conteneur dans Cloud Run.

# Use below cmd to deploy the LIT App to Cloud Run.
gcloud run deploy $LIT_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app:$LIT_SERVICE_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--no-allow-unauthenticated

LIT vous permet également d'ajouter l'ensemble de données au démarrage du serveur. Pour ce faire, définissez la variable DATASETS pour qu'elle inclue les données que vous souhaitez charger, en utilisant le format name:path, par exemple data_foo:/bar/data_2024.jsonl. Le format de l'ensemble de données doit être .jsonl, chaque enregistrement contenant prompt, ainsi que les champs target et source facultatifs. Pour charger plusieurs ensembles de données, séparez-les par une virgule. Si cette valeur n'est pas définie, l'exemple d'ensemble de données de débogage de l'invite LIT sera chargé.

# Set the dataset.
export DATASETS=[DATASETS]

En définissant MAX_EXAMPLES, vous pouvez définir le nombre maximal d'exemples à charger à partir de chaque ensemble d'évaluation.

# Set the max examples.
export MAX_EXAMPLES=[MAX_EXAMPLES]

Ensuite, dans la commande de déploiement, vous pouvez ajouter

--set-env-vars "DATASETS=$DATASETS" \
--set-env-vars "MAX_EXAMPLES=$MAX_EXAMPLES" \

3-b: Afficher le service d'application LIT

Une fois le serveur d'application LIT créé, vous pouvez le trouver dans la section Cloud Run de Cloud Console.

Sélectionnez le service d'application LIT que vous venez de créer. Assurez-vous que le nom du service est identique à LIT_SERVICE_NAME.

Liste Cloud Run de la console Google Cloud

Pour trouver l'URL du service, cliquez sur celui que vous venez de déployer.

URL du service de recherche Google Cloud

Vous devriez alors pouvoir afficher l'interface utilisateur de LIT. Si vous rencontrez une erreur, consultez la section "Dépannage".

Page d'accueil de la démonstration LIT

Vous pouvez consulter la section "LOGS" pour surveiller l'activité, afficher les messages d'erreur et suivre la progression du déploiement.

Journal Cloud Run de la console Google Cloud

Vous pouvez consulter la section "MÉTRIQUES" pour afficher les métriques du service.

Métriques Cloud Run de la console Google Cloud

3-c: Charger des ensembles de données

Cliquez sur l'option Configure dans l'interface utilisateur de LIT, puis sélectionnez Dataset. Chargez l'ensemble de données en spécifiant un nom et en fournissant son URL. Le format de l'ensemble de données doit être .jsonl, chaque enregistrement contenant prompt, ainsi que les champs target et source facultatifs.

Ensemble de données sur la charge LIT

4. Préparer des modèles Gemini dans Vertex AI Model Garden

Les modèles de fondation Gemini de Google sont disponibles dans l'API Vertex AI. LIT fournit le wrapper de modèle VertexAIModelGarden pour utiliser ces modèles à des fins de génération. Il vous suffit de spécifier la version souhaitée (par exemple, "gemini-1.5-pro-001") via le paramètre de nom du modèle. L'un des principaux avantages de ces modèles est qu'ils ne nécessitent aucun effort supplémentaire pour le déploiement. Par défaut, vous avez un accès immédiat à des modèles tels que Gemini 1.0 Pro et Gemini 1.5 Pro sur GCP, ce qui vous évite d'effectuer des étapes de configuration supplémentaires.

4-a: Accorder des autorisations Vertex AI

Pour interroger Gemini dans GCP, vous devez accorder des autorisations Vertex AI au compte de service. Assurez-vous que le nom du compte de service est Default compute service account. Copiez l'adresse e-mail du compte de service.

Comptes de service GCP

Ajoutez l'adresse e-mail du compte de service en tant qu'entité principale avec le rôle Vertex AI User dans votre liste d'autorisation IAM.

Ajouter l'adresse e-mail des comptes de service

4-b: Charger des modèles Gemini

Vous allez charger des modèles Gemini et ajuster leurs paramètres en suivant les étapes ci-dessous.

    1. Cliquez sur l'option Configure dans l'interface utilisateur de LIT.
    1. Sélectionnez l'option gemini sous l'option Select a base model.
    1. Vous devez nommer le modèle dans new_name.
    1. Saisissez les modèles Gemini sélectionnés comme model_name.
    1. Cliquez sur Load Model.
    1. Cliquez sur Submit.

LIT Load Gemini Model

5. Déployer un serveur de modèles LLMs auto-hébergé sur GCP

L'hébergement autonome des LLM avec l'image Docker du serveur de modèle de LIT vous permet d'utiliser les fonctions de saillance et de tokenisation de LIT pour obtenir des insights plus détaillés sur le comportement du modèle. L'image du serveur de modèle fonctionne avec les modèles KerasNLP ou Hugging Face Transformers, y compris les poids fournis par la bibliothèque et auto-hébergés, par exemple sur Google Cloud Storage.

5-a: Configurer les modèles

Chaque conteneur charge un modèle, configuré à l'aide de variables d'environnement.

Vous devez spécifier les modèles à charger en définissant MODEL_CONFIG. Le format doit être name:path, par exemple model_foo:model_foo_path. Le chemin d'accès peut être une URL, un chemin d'accès à un fichier local ou le nom d'un préréglage pour le framework de deep learning configuré (pour en savoir plus, consultez le tableau suivant). Ce serveur est testé avec Gemma, GPT2, Llama et Mistral pour toutes les valeurs DL_FRAMEWORK compatibles. D'autres modèles devraient fonctionner, mais des ajustements peuvent être nécessaires.

# Set models you want to load. While 'gemma2b is given as a placeholder, you can load your preferred model by following the instructions above.
export MODEL_CONFIG=gemma2b:gemma_2b_en

De plus, le serveur de modèle LIT permet de configurer différentes variables d'environnement à l'aide de la commande ci-dessous. Pour en savoir plus, consultez le tableau. Notez que chaque variable doit être définie individuellement.

# Customize the variable value as needed.
export [VARIABLE]=[VALUE]

Variable

Valeurs

Description

DL_FRAMEWORK

kerasnlp, transformers

Bibliothèque de modélisation utilisée pour charger les poids du modèle sur l'environnement d'exécution spécifié. La valeur par défaut est kerasnlp.

DL_RUNTIME

torch, tensorflow

Framework backend de deep learning sur lequel le modèle s'exécute. Tous les modèles chargés par ce serveur utiliseront le même backend. Les incompatibilités entraîneront des erreurs. La valeur par défaut est torch.

PRÉCISION

bfloat16, float32

Précision à virgule flottante pour les modèles LLM. La valeur par défaut est bfloat16.

BATCH_SIZE

Entiers positifs

Nombre d'exemples à traiter par lot. La valeur par défaut est 1.

SEQUENCE_LENGTH

Entiers positifs

Longueur maximale de la séquence de la requête d'entrée, plus le texte généré. La valeur par défaut est 512.

5-b: Déployer Model Server sur Cloud Run

Vous devez d'abord définir la dernière version de Model Server comme version à déployer.

# Set latest as MODEL_VERSION_TAG.
export MODEL_VERSION_TAG=latest
# List all the public LIT GCP model server docker images.
gcloud container images  list-tags  us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server

Après avoir défini la balise de version, vous devez nommer votre serveur de modèle.

# Set your Service name.
export MODEL_SERVICE_NAME='gemma2b-model-server'

Vous pouvez ensuite exécuter la commande suivante pour déployer le conteneur dans Cloud Run. Si vous ne définissez pas les variables d'environnement, des valeurs par défaut seront appliquées. Comme la plupart des LLM nécessitent des ressources informatiques coûteuses, il est vivement recommandé d'utiliser un GPU. Si vous préférez exécuter le code sur le processeur uniquement (ce qui fonctionne bien pour les petits modèles comme GPT2), vous pouvez supprimer les arguments associés --gpu 1 --gpu-type nvidia-l4 --max-instances 7.

# Deploy the model service container.
gcloud beta run deploy $MODEL_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server:$MODEL_VERSION_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--gpu 1 \
--gpu-type nvidia-l4  \
--max-instances 7  \
--set-env-vars "MODEL_CONFIG=$MODEL_CONFIG" \
--no-allow-unauthenticated

De plus, vous pouvez personnaliser les variables d'environnement en ajoutant les commandes suivantes. N'incluez que les variables d'environnement nécessaires à vos besoins spécifiques.

--set-env-vars "DL_FRAMEWORK=$DL_FRAMEWORK" \
--set-env-vars "DL_RUNTIME=$DL_RUNTIME" \
--set-env-vars "PRECISION=$PRECISION" \
--set-env-vars "BATCH_SIZE=$BATCH_SIZE" \
--set-env-vars "SEQUENCE_LENGTH=$SEQUENCE_LENGTH" \

Des variables d'environnement supplémentaires peuvent être nécessaires pour accéder à certains modèles. Consultez les instructions du hub Kaggle (utilisé pour les modèles KerasNLP) et du hub Hugging Face, le cas échéant.

5-c: Accéder au serveur de modèles

Une fois le serveur de modèle créé, le service démarré se trouve dans la section Cloud Run de votre projet GCP.

Sélectionnez le serveur de modèle que vous venez de créer. Assurez-vous que le nom du service est identique à MODEL_SERVICE_NAME.

Liste Cloud Run de la console Google Cloud

Pour trouver l'URL du service, cliquez sur le service de modèle que vous venez de déployer.

URL du service de recherche Google Cloud

Vous pouvez consulter la section "LOGS" pour surveiller l'activité, afficher les messages d'erreur et suivre la progression du déploiement.

Journal Cloud Run de la console Google Cloud

Vous pouvez consulter la section "MÉTRIQUES" pour afficher les métriques du service.

Métriques Cloud Run de la console Google Cloud

5-d: Charger des modèles auto-hébergés

Si vous proxyez votre serveur LIT à l'étape 3 (consultez la section "Dépannage"), vous devez obtenir votre jeton d'identité GCP en exécutant la commande suivante.

# Find your GCP identity token.
gcloud auth print-identity-token

Vous allez charger des modèles auto-hébergés et ajuster leurs paramètres en suivant les étapes ci-dessous.

  1. Cliquez sur l'option Configure dans l'interface utilisateur de LIT.
  2. Sélectionnez l'option LLM (self hosted) sous l'option Select a base model.
  3. Vous devez nommer le modèle dans new_name.
  4. Saisissez l'URL de votre serveur de modèles en tant que base_url.
  5. Saisissez le jeton d'identité obtenu dans identity_token si vous proxy le serveur de l'application LIT (voir les étapes 3 et 7). Sinon, laissez-le vide.
  6. Cliquez sur Load Model.
  7. Cliquez sur Submit.

Charger des modèles LLM avec LIT

6. Interagir avec LIT sur GCP

LIT propose un ensemble de fonctionnalités riche pour vous aider à déboguer et à comprendre les comportements des modèles. Vous pouvez simplement interroger le modèle en saisissant du texte dans un champ et en affichant les prédictions du modèle, ou inspecter les modèles en profondeur avec la suite de fonctionnalités puissantes de LIT, y compris:

6-a: Interroger le modèle via LIT

LIT interroge automatiquement l'ensemble de données après le chargement du modèle et de l'ensemble de données. Vous pouvez afficher la réponse de chaque modèle en sélectionnant la réponse dans les colonnes.

Réponse de la vue LIT

Réponse LIT

6-b: Utiliser la technique de saillance de séquence

Actuellement, la technique de saillance de séquence sur LIT n'est compatible qu'avec les modèles auto-hébergés.

La saillance de séquence est un outil visuel qui aide à déboguer les requêtes du LLM en mettant en évidence les parties d'une requête qui sont les plus importantes pour une sortie donnée. Pour en savoir plus sur la saillance de séquence, consultez le tutoriel complet sur l'utilisation de cette fonctionnalité.

Pour accéder aux résultats de saillance, cliquez sur n'importe quelle entrée ou sortie de l'invite ou de la réponse. Les résultats de saillance s'affichent alors.

Résultats de la saillance de séquence LIT

6-c: Modifier manuellement la requête et la cible

LIT vous permet de modifier manuellement tous les prompt et target d'un point de données existant. Cliquez sur Add pour ajouter la nouvelle entrée à l'ensemble de données.

Modification manuelle de la LIT

6-d: Comparer les requêtes côte à côte

LIT vous permet de comparer côte à côte des requêtes d'origine et modifiées. Vous pouvez modifier manuellement un exemple et afficher simultanément le résultat de la prédiction et l'analyse de la saillance de séquence pour les versions d'origine et modifiées. Vous pouvez modifier la requête pour chaque point de données, et LIT générera la réponse correspondante en interrogeant le modèle.

Comparer des ensembles de données LIT

6-e: Comparer plusieurs modèles côte à côte

LIT permet de comparer côte à côte des modèles sur des exemples de génération et d'évaluation de texte individuels, ainsi que sur des exemples agrégés pour des métriques spécifiques. En interrogeant différents modèles chargés, vous pouvez facilement comparer les différences entre leurs réponses.

Réponse de la comparaison des modèles LIT

6-f: Générateurs automatiques de contrefactuels

Vous pouvez utiliser des générateurs de contrefactuels automatiques pour créer d'autres entrées et voir immédiatement comment votre modèle se comporte avec elles.

Génération automatique de l'entrée LIT

6-g: Évaluer les performances du modèle

Vous pouvez évaluer les performances du modèle à l'aide de métriques (actuellement compatibles avec les scores BLEU et ROUGE pour la génération de texte) pour l'ensemble de données complet, ou pour tout sous-ensemble d'exemples filtrés ou sélectionnés.

Métriques du modèle de vue LIT

7. Dépannage

7-a: Problèmes d'accès potentiels et solutions

Comme --no-allow-unauthenticated est appliqué lors du déploiement sur Cloud Run, vous pouvez rencontrer des erreurs interdites, comme indiqué ci-dessous.

Erreur interdite Google Cloud

Deux approches s'offrent à vous pour accéder au service d'application LIT.

1. Proxy vers un service local

Vous pouvez relayer le service vers l'hôte local à l'aide de la commande ci-dessous.

# Proxy the service to local host.
gcloud run services proxy $LIT_SERVICE_NAME

Vous devriez alors pouvoir accéder au serveur LIT en cliquant sur le lien du service proxy.

2. Authentifier directement les utilisateurs

Vous pouvez suivre ce lien pour authentifier les utilisateurs et leur permettre d'accéder directement au service LIT App. Cette approche permet également à un groupe d'utilisateurs d'accéder au service. Pour le développement impliquant la collaboration de plusieurs personnes, il s'agit d'une option plus efficace.

7-b: Vérifie que le serveur de modèles a bien démarré

Pour vous assurer que le serveur de modèles a bien été lancé, vous pouvez l'interroger directement en envoyant une requête. Le serveur de modèle fournit trois points de terminaison : predict, tokenize et salience. Veillez à fournir les champs prompt et target dans votre requête.

# Query the model server predict endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/predict -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

# Query the model server tokenize endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/tokenize -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

# Query the model server salience endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/salience -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

Si vous rencontrez un problème d'accès, consultez la section 7-a ci-dessus.

8. Félicitations

Vous avez terminé cet atelier de programmation. C'est l'heure de la détente !

Effectuer un nettoyage

Pour nettoyer l'atelier, supprimez tous les services Google Cloud créés pour l'atelier. Utilisez Google Cloud Shell pour exécuter les commandes suivantes.

Si la connexion Google Cloud est perdue en raison d'une inactivité, réinitialisez les variables en suivant les étapes précédentes.

# Delete the LIT App Service.
gcloud run services delete $LIT_SERVICE_NAME

Si vous avez démarré le serveur de modèles, vous devez également le supprimer.

# Delete the Model Service.
gcloud run services delete $MODEL_SERVICE_NAME

Complément d'informations

Poursuivez votre apprentissage des fonctionnalités de l'outil LIT avec les ressources ci-dessous:

  • Gemma: Lien
  • Base de code Open Source LIT: dépôt Git
  • Article sur LIT: ArXiv
  • Article sur le débogage des requêtes LIT: ArXiv
  • Démonstration vidéo de la fonctionnalité LIT: YouTube
  • Démo de débogage de l'invite LIT: YouTube
  • Boîte à outils pour une IA générative responsable: lien

Contact

Pour toute question ou tout problème concernant cet atelier de programmation, veuillez nous contacter sur GitHub.

Licence

Ce document est publié sous une licence Creative Commons Attribution 4.0 Generic.