Accéder au contenu principal

Llama 3.2 et Gradio Tutorial : Construire une application web multimodale

Apprenez à utiliser le modèle de vision Llama 3.2 11B avec Gradio pour créer une application web multimodale qui fonctionne comme un assistant de support client.
Actualisé 14 févr. 2025  · 10 min de lecture

L'époque où nous nous contentions de grands modèles de langage qui ne peuvent traiter que du texte. Nous exigeons aujourd'hui multimodaux capables de comprendre et d'interagir avec du texte, des images et des vidéos.

Entrez Modèles de vision Llama 3.2 11B & 90BLlama est le premier modèle multimodal open-source de Meta AI, capable de traiter à la fois des textes et des images.

Dans ce guide pratique, je vais vous guider à travers le processus de création d'un assistant de support client multimodal avec l'aide de Llama 3.2 et de Gradio. À la fin de ce tutoriel, vous disposerez d'une application web entièrement fonctionnelle capable d'analyser les descriptions textuelles et les images téléchargées afin de générer des solutions utiles, à l'instar d'un assistant de support technique !

Si vous avez besoin d'une introduction rapide à Llama 3.2 avant de commencer, je vous recommande de lire ce Guide Llama 3.2.

Configuration initiale

Dans cette démonstration pratique, nous utiliserons le modèle Llama3.2-11B-Vision (multimodal). Avant de commencer à coder, assurons-nous que nous disposons de toutes les dépendances nécessaires.

Nous avons besoin de quelques bibliothèques pour que tout fonctionne. Les principaux sont les suivants :

  • Transformers: La bibliothèque de base pour travailler avec des modèles comme Llama 3.2.
  • Torche: La bibliothèque d'apprentissage profond qui alimente notre modèle.
  • Gradio: Pour la construction de notre interface utilisateur.

Exécutez les commandes suivantes pour installer les dépendances nécessaires :

!pip3 install -U transformers bitsandbytes accelerate peft -q
!pip3 install gradio -q

Chargez le modèle et le processeur du Llama 3.2

Chargeons maintenant le modèle et le processeur du Llama 3.2. Nous utiliserons Hugging Facepour charger le modèle et le processeur, en s'assurant que le modèle tourne sur le GPU s'il est disponible, ou par défaut sur le CPU dans le cas contraire. Comme il s'agit d'un modèle à 11B paramètres, il fonctionne bien sur un GPU A100 dans Google Colab.

Dans le bloc de code ci-dessous :

  • Nous avons mis en place les importations nécessaires.
  • Nous chargeons à la fois le modèle et le processeur avec le support GPU, s'il est disponible. Cela permet à l'application de fonctionner efficacement, en particulier lors du traitement de grandes quantités de données.
  • Un élément de code important à noter ici est tie_weight(), qui garantit que les poids des couches d'intégration d'entrée et de sortie sont identiques. Cela réduit la consommation de mémoire et peut améliorer les performances.
import torch
from PIL import Image
import gradio as gr
from transformers import MllamaForConditionalGeneration, AutoProcessor

def load_model():
    model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"  
    device = "cuda" if torch.cuda.is_available() else "cpu"  # Check if GPU is available

    model = MllamaForConditionalGeneration.from_pretrained(
        model_id,
        torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,  
        device_map="auto",  # Automatically map to available device
        offload_folder="offload",  # Offload to disk if necessary
    )
    
    model.tie_weights()  # Tying weights for efficiency
    processor = AutoProcessor.from_pretrained(model_id)
    print(f"Model loaded on: {device}")
    
    return model, processor

Pourquoi Gradio ?

Gradio est une bibliothèque Python légère qui nous permet de construire rapidement des apps d'apprentissage automatique avec des interfaces web. Au lieu d'écrire du HTML ou du JavaScript complexe, nous pouvons définir les composants de notre application (comme des zones de texte, des boutons ou des images) directement en Python.

Voici à quoi ressemble l'interface utilisateur de base de Gradio :

Interface Gradio UI

Gradio présente quelques avantages :

  • Pas de problème d'installation: Les apps Gradio sont hébergées et partagées avec quelques lignes de code Python. Le partage intégré permet l'accès via un lien public.
  • Interface collaborative: Permet des démonstrations en direct de modèles partagés avec des collaborateurs ou le public. Plusieurs utilisateurs peuvent interagir simultanément.
  • Prise en charge de plusieurs types d'entrée et de sortie: Offre une gamme de composants d'entrée/sortie au-delà du texte et des images.
  • Configuration minimale pour l'hébergement cloud: Déploiement facile sur des plateformes telles que Hugging Face Spaces ou d'autres services cloud.
  • Intégration multiplateforme: Les interfaces peuvent être intégrées à d'autres applications web, à des carnets Jupyter ou à des articles de blog.
  • Auto-génération de l'API: Génère automatiquement une API pour l'application.
  • Sécurité intégrée: Comprend des limites de taille de fichier et d'autres mesures visant à empêcher toute utilisation malveillante.

Pour cette démo, Gradio permet aux utilisateurs de saisir facilement du texte et des images et de voir le résultat (l'analyse du texte et de l'image, dans ce cas) en temps réel. Il est parfait pour présenter la puissance de modèles tels que Llama 3.2 dans un environnement convivial.

Développer des applications d'IA

Apprenez à créer des applications d'IA à l'aide de l'API OpenAI.
Commencez à Upskiller gratuitement

Construire l'application multimodale Llama 3.2

Maintenant que nous avons configuré nos importations et notre modèle, passons à la partie principale de l'application, à savoir le traitement des entrées (texte et image) et la génération de la réponse.

Génération de texte à texte

Nous commençons par définir une fonction qui prend en compte le texte de l'utilisateur et, éventuellement, une image. Cette fonction utilise ensuite le modèle Llama 3.2 pour générer une réponse.

def process_ticket(text, image=None):
    model, processor = load_model()
    
    try:
        if image:
            # Resize the image for consistency
            image = image.convert("RGB").resize((224, 224))
            prompt = f"<|image|><|begin_of_text|>{text}"
            # Process both the image and text input
            inputs = processor(images=[image], text=prompt, return_tensors="pt").to(model.device)
        else:
            prompt = f"<|begin_of_text|>{text}"
            # Process text-only input
            inputs = processor(text=prompt, return_tensors="pt").to(model.device)
        
        # Generate response (restrict token length for faster output)
        outputs = model.generate(**inputs, max_new_tokens=200)
        # Decode the response from tokens to text
        response = processor.decode(outputs[0], skip_special_tokens=True)
        return response
    
    except Exception as e:
        print(f"Error processing ticket: {e}")
        return "An error occurred while processing your request."

Cette fonction gère deux types d'entrées dans la boucle :

  • Texte seul: Si aucune image n'est fournie, le modèle génère une réponse basée sur le texte saisi.
  • Texte + Image: Si une image est fournie, le modèle traite à la fois le texte et l'image avant de générer la réponse.

Une fois le type d'entrée identifié, il est transmis à un processeur issu de la bibliothèque de transformateurs pour traiter l'entrée. Ensuite, le modèle génère une sortie dans la plage de max_new_tokens.

Création de l'interface Gradio

L'interface Gradio relie le tout et nous permet d'exécuter des tests dans un format basé sur le web. Cette interface permet aux utilisateurs de soumettre un texte et des images d'un problème auquel ils sont confrontés et de voir la solution générée par l'IA.

Jetons un coup d'œil au code et expliquons-le.

def create_interface():
    text_input = gr.Textbox(
        label="Describe your issue",
        placeholder="Describe the problem you're experiencing",
        lines=4,
    )
    
    image_input = gr.Image(label="Upload a Screenshot (Optional)", type="pil")
    
    # Output element
    output = gr.Textbox(label="Suggested Solution", lines=5)
    
    # Create the Gradio interface
    interface = gr.Interface(
        fn=process_ticket,  # Function to process inputs
        inputs=[text_input, image_input],  # User inputs (text and image)
        outputs=output,  # AI-generated output
        title="Multimodal Customer Support Assistant",
        description="Submit a description of your issue, along with an optional screenshot, and get AI-powered suggestions.",
    )
    
    # Launch the interface with debug mode
    interface.launch(debug=True)

Dans le code ci-dessus, nous :

  • Définissez deux entrées :
    • text_input pour le texte
    • image_input pour l'image
  • Spécifiez une boîte de sortie pour afficher la réponse.
  • Créez l'interface, en passant des paramètres tels que :
    • Entrées
    • Fonction de traitement des données
    • Résultats générés par le modèle
    • Titre de l'interface
    • Description (si nécessaire)
  • Configurez l'interface utilisateur de base.
  • Lancez l'interface avec debug = True pour déboguer les erreurs. Une fois que le code fonctionne correctement, repassez à False.

L'interface finale se présentera comme suit :

Interface Final Gradio

L'application Gradio, notre assistant multimodal d'assistance à la clientèle, est prête ! Pour obtenir la réponse souhaitée, essayez de modifier le paramètre max_new_tokens ou de jouer un peu avec l'invite.

Cas d'utilisation de Llama 3.2 et Gradio

Outre la démo que nous avons créée dans ce tutoriel, il existe quelques autres cas d'utilisation qui nécessitent un minimum d'effort. Il s'agit notamment de

  • Enseignement et tutorat : Les étudiants peuvent télécharger des aides visuelles telles que des graphiques ou des diagrammes avec leurs questions, et le modèle peut générer des réponses complètes incorporant à la fois des informations visuelles et textuelles.
  • Création de contenu : Améliorez la création de légendes, d'articles de blog et de contenu de médias sociaux en générant du texte à partir d'images.
  • Assistance virtuelle en matière d'immobilier : Assister les agents et les clients en traitant les images des biens immobiliers et en répondant aux questions qui s'y rapportent. Générez des descriptions de propriétés ou analysez les détails visuels des photos.

Meilleures pratiques pour développer avec Llama 3.2 et Gradio

Pour chaque cas d'utilisation, il y a quelques conseils que chaque développeur peut utiliser lors du développement d'une application comme celle que nous avons déjà construite. Voici quelques bonnes pratiques qu'un développeur peut adopter lorsqu'il travaille avec des modèles tels que llama3.2.

Gestion de la latence

Les tâches multimodales pouvant être gourmandes en ressources, il est essentiel de réduire le temps de latence. Envisagez d'optimiser le modèle pour obtenir des réponses plus rapides en utilisant la mise en cache, l'élagage du modèle ou en limitant le nombre de jetons générés.

Gestion des erreurs

Il est important de mettre en place des mécanismes pour gérer les erreurs. Dans les cas où le modèle ne parvient pas à générer une réponse significative (par exemple, en raison de la mauvaise qualité de l'image), nous pouvons fournir des réponses de repli ou des messages d'erreur. Nous pouvons même opter pour un retour d'information humain qui, en retour, permet d'améliorer le modèle.

Contrôle des performances

Le cursus des performances de l'appli, comme les temps de réponse et les données d'interaction avec l'utilisateur, peut permettre d'optimiser l'interface et même d'améliorer l'expérience utilisateur. En notant le temps de performance, nous pouvons essayer d'optimiser la latence du modèle en utilisant des bibliothèques comme bits and bytes.

Conclusion

Dans ce guide, nous avons appris à combiner les capacités multimodales de Llama 3.2 et l'interface intuitive de Gradio. De l'assistance à la clientèle à l'éducation en passant par la création de contenu, les applications potentielles sont vastes et variées.

En adhérant aux meilleures pratiques telles que la gestion de la latence, la gestion des erreurs et le contrôle des performances, nous pouvons nous assurer que nos applications Llama 3.2 et Gradio sont robustes, efficaces et conviviales.

Pour en savoir plus, je vous recommande ces tutoriels :

Obtenez une certification de haut niveau en matière d'IA

Démontrez que vous pouvez utiliser l'IA de manière efficace et responsable.

Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Je suis un expert Google Developers en ML (Gen AI), un expert Kaggle 3x, et un ambassadeur Women Techmakers avec plus de 3 ans d'expérience dans la technologie. J'ai cofondé une startup dans le domaine de la santé en 2020 et je poursuis un master en informatique à Georgia Tech, avec une spécialisation dans l'apprentissage automatique.

Sujets

Apprenez l'IA avec ces cours !

Certification disponible

Cours

Travailler avec le lama 3

4 hr
4.3K
Explorez les dernières techniques pour exécuter le LLM Llama localement, le peaufiner et l'intégrer dans votre pile.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow