Obtenir rapidement des réponses à partir d'images complexes, extraire du texte de captures d'écran ou simplement demander l'interprétation d'une photo : les modèles de langage visuels rendent ces tâches accessibles. Le modèle Youtu-VL-4B-Instruct, développé par le laboratoire Tencent YouTu, se distingue par sa légèreté (4 milliards de paramètres) et sa facilité de déploiement via une image container préconfigurée. Ce guide technique détaille la mise en place et l'utilisation de ce modèle multimodal.
Configuration requise
Avant le déploiement, vérifiez la compatibilité matérielle. Le modèle requiert un GPU NVIDIA avec une mémoire vidéo suffisante.
| Composant | Minimum | Recommandé |
|---|---|---|
| GPU | NVIDIA, VRAM ≥ 16 Go (ex. RTX 4080 16G) | RTX 4090 24 Go ou A100 40 Go |
| Mémoire RAM | ≥ 16 Go | ≥ 32 Go |
| Environnement CUDA | Version 12.x | 12.4 ou supérieure |
| Espace disque | ≥ 20 Go | ≥ 30 Go |
L'installation de Python, CUDA ou le téléchargement manuel des poids du modèle sont inutiles grâce à l'image container fournie, qui encapsule l'ensemble des dépendances.
Lancement du service
Après avoir démarré l'instance à partir de l'image container, le service d'inférence se lance automatiquement via le gestionnaire de processus Supervisord. L'interface web et l'API sont accessibles sur le port 7860 par défaut.
Pour gérer le service manuellement, utilisez les commandes Supervisord suivantes dans le terminal de l'instance :
# Vérifier l'état du service
supervisorctl status
# Redémarrer le service (en cas d'anomalie)
supervisorctl restart youtu-vl-inference
# Arrêter le service pour libérer les ressources
supervisorctl stop youtu-vl-inference
# Démarrer le service
supervisorctl start youtu-vl-inference
Utilisation via l'interface web
L'interface graphique, accessible via http://<IP_SERVEUR>:7860, propose une zone de conversation. Pour analyser une image :
- Chargez l'image dans la zone dédiée.
- Saisissez une question en langage naturel dans le champ de texte.
- Envoyez la requête pour obtenir une réponse détaillée.
Exemples de requêtes :
- "Décris le contenu de cette photo."
- "Quels animaux sont présents sur l'image ?"
- "Quelle est la tendance illustrée par ce graphique ?"
Le paramètre "Temperature" influence la créativité des réponses. Une valeur basse (ex. 0.1) produit des réponses prévisibles, tandis qu'une valeur élevée (ex. 0.8) favorise des réponses plus variées mais potentiellement moins précises.
Intégration via l'API
L'API compatible avec le format OpenAI permet une intégration programmatique. La requête doit systématiquement inclure un message système.
Exemple de requête texte via curl
curl -X POST http://localhost:7860/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "youtu-vl-4b",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Présente-toi brièvement."}
],
"max_tokens": 512
}'
Exemple d'appel visuel en Python
import base64
import requests
def query_image(image_path, question):
# Encodage de l'image en base64
with open(image_path, "rb") as file:
image_data = base64.b64encode(file.read()).decode("utf-8")
# Construction de la requête
payload = {
"model": "youtu-vl-4b",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{image_data}"}
},
{"type": "text", "text": question}
]
}
],
"max_tokens": 1024
}
# Envoi de la requête
response = requests.post(
"http://localhost:7860/v1/chat/completions",
json=payload,
timeout=180
)
return response.json()["choices"][0]["message"]["content"]
# Utilisation
response = query_image("photo.jpg", "Décris cette scène en détail.")
print(response)
Fonctionnalités avancées
Le modèle prend en charge des tâches de vision par ordinateur spécialisées via des instructions spécifiques :
- Localisation d'objets : Fournir les coordonnées de délimitation d'une entité décrite dans l'image.
- Détection d'objets : Identifier et localiser tous les objets présents dans la scène.
Résolution des problèmes courants
Service inaccessible : Vérifiez l'état du service avec supervisorctl status, puis l'écoute du port 7860 (netstat -tlnp | grep 7860). Contrôlez les règles du pare-feu.
Temps de réponse élevé : Réduisez la résolution de l'image envoyée. Vérifiez la charge de la mémoire GPU (nvidia-smi). Des questions complexes ou des généra longues augmentent la latence.
Réponses incohérentes : Assurez-vous que la requête inclut un message système. Vérifiez le format de l'image encodée (préfixe data:image/jpeg;base64,...).