- Llama.cpp prend désormais en charge les entrées multimodales (y compris la vision) via libmtmd
- API
/chat/completions compatible OpenAI via llama-mtmd-cli ou llama-server
- La fonctionnalité multimodale est disponible immédiatement sur des modèles comme Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small, InternVL, etc.
- Des modèles pré-quantifiés sont fournis (avec, dans la plupart des cas, la quantification QK_K_M incluse par défaut)
- Par défaut, le projecteur multimodal est offloadé sur le GPU, avec une option pour désactiver ce comportement si nécessaire
- Certains modèles nécessitent une grande fenêtre de contexte (par ex.
-c 8192)
Aperçu
- Llama.cpp prend désormais en charge les entrées multimodales grâce à libmtmd
- Les utilisateurs peuvent maintenant traiter, en plus du texte, des entrées comme les images, ce qui élargit l’usage des modèles de vision
- Cette fonctionnalité est déjà compatible avec plusieurs modèles majeurs, dont Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small et InternVL
Comment activer l’entrée multimodale
- Deux principales méthodes d’exécution sont proposées : la première consiste à utiliser l’option -hf (avec un modèle pris en charge), la seconde à combiner les options -m et --mmproj pour spécifier séparément le modèle texte et le modèle projecteur multimodal
- Avec l’option -hf, si vous souhaitez désactiver la fonctionnalité multimodale, ajoutez --no-mmproj ; si vous utilisez un fichier mmproj personnalisé, utilisez l’option --mmproj local_file.gguf
- L’offload GPU est activé par défaut ; si vous ne le souhaitez pas, vous pouvez le désactiver avec l’option --no-mmproj-offload
Exemples de commandes
- En ligne de commande, on utilise llama-mtmd-cli ; côté serveur, llama-server
- Avec des fichiers locaux, le fichier est spécifié directement via --mmproj
- Pour désactiver l’offload GPU, ajoutez l’option --no-mmproj-offload
Liste des modèles multimodaux disponibles immédiatement
- Divers modèles préparés, basés par défaut sur la quantification Q4_K_M, sont présentés
- Exemples de modèles pris en charge :
- Gemma 3 : versions 4b, 12b, 27b
- Famille SmolVLM : 256M, 500M, 2.2B, etc.
- Pixtral 12B
- Qwen 2 VL : 2B, 7B et Qwen 2.5 VL : 3B, 7B, 32B, 72B
- Mistral Small 3.1 24B (quantification IQ2_M)
- InternVL 2.5 et génération 3 : prise en charge de différentes tailles de paramètres
Remarques
- Lors de l’utilisation, remplacez (tool_name) par le nom du binaire à exécuter (par ex. llama-mtmd-cli ou llama-server)
- Avec certains modèles multimodaux, il peut être nécessaire de définir une grande taille de fenêtre de contexte (par ex. en utilisant une option comme -c 8192)
1 commentaires
Avis sur Hacker News
Sur un MBP M1 64GB, j’obtiens environ 25 t/s en traitement de prompt et 63 t/s en génération de tokens avec
ggml-org/gemma-3-4b-it-GGUFLe temps total de traitement de l’image est d’environ 15 secondes, quelle que soit sa taille
Même le petit modèle 4B produit déjà des résultats plutôt corrects et décrit bien différents types d’images
Pour reproduire, il faut cloner
llama.cpp, le compiler, télécharger le modèle et le fichiermmproj, lancer le serveur, puis se connecter à l’interface webSi on l’utilise sans l’option
-hf, il faut absolument ajouter le switch--mmprojpour éviter une erreur de prise en charge multimodaleJ’utilise le quant officiel
ggml-org/gemma-3-4b-it-GGUFJe m’attends à ce que le quant unsloth fourni par danielhanchen soit plus rapide
J’obtiens exactement la même réponse pour toutes les images
« Cette image montre plusieurs personnes dans différentes poses… »
quelque chose de ce genre
L’image réelle ne contient absolument rien de tel, donc je ne sais même pas par où commencer pour déboguer
J’ai en permanence le même résultat moi aussi
J’ai vu un message disant qu’avec un modèle 7b sur M1, le traitement du prompt devrait être presque 10 fois plus rapide
Je me demande si l’encodeur n’est pas mal optimisé
Tu pourrais montrer une image d’exemple générée directement avec le prompt ?
J’aimerais en voir une avant de tester
Je me demande si ces chiffres correspondent à des quants 4/8 bits ou au modèle complet en fp16
Il faut compiler
llama.cppdirectement depuis les sourcesOn obtient le programme
llama-mtmd-cliJ’ai préparé des quants avec prise en charge de la vision
Ça peut s’exécuter avec des commandes comme
unsloth/gemma-3-4b-it-GGUF:Q4_K_XLPendant une session de chat, on peut envoyer une image avec
/image image.pnget dialoguer dessusMaintenant, sur le backend Metal, il n’est plus nécessaire d’utiliser
-ngl -1Sur CUDA, c’est toujours nécessaire
-1signifie déporter toutes les couches GPU sur le GPUSi ça peut aider, j’ai mis à jour la documentation sur la page unsloth.ai, donc tu peux t’y référer directement pour l’usage de
llama-mtmd-cliÇa fonctionne aussi avec Mistral Small
Si tu installes
llama.cppavec Homebrew,llama-mtmd-cliest aussi inclusIl suffit de donner la commande pour l’exécuter immédiatement
En réalité,
-ngl 99est plus stable,-ngl -1peut fonctionner ou non selon les casRien que voir les lettres ngl me donne envie de m’énerver
C’est la documentation la plus utile que j’aie trouvée jusqu’ici
Elle m’aide énormément à comprendre comment tout cela fonctionne
https://github.com/ggml-org/llama.cpp/…
C’est similaire à la manière dont les outils de transformation de texte sont séparés, comme
huggingface/tokenizersLa série SmolVLM est également prise en charge
Grâce à sa petite taille, elle offre des réponses très rapides
C’est parfait pour un système domestique de vidéosurveillance en temps réel
Je pense essayer ça comme projet perso
Des exemples de commandes rapides ont aussi été laissés en détail
Merci d’avoir ajouté la fonction mtmd au serveur
Moi aussi j’attendais ce commit et je continuais à surveiller ça
À chaque fois que je lis les notes de commit git, je suis toujours impressionné de voir ce à quoi tu as contribué
Beau travail sur l’ensemble de
llama.cppaussiMais je me demande ce que vaut réellement cette vitesse en matière de qualité
Des modèles plus petits que 2.2B peuvent-ils vraiment produire des phrases cohérentes avec du contexte ?
J’ai récemment utilisé Gemma3 4b pour générer des mots-clés et des descriptions sur de nombreuses photos de voyage
Il fait aussi de l’OCR basique, résume les photos contenant du texte et devine assez bien où elles ont été prises grâce aux indices contextuels
Pour quelque chose d’auto-hébergeable, c’est excellent
Ça a l’air sympa
Je me demande si tu l’utilises avec une structure qui boucle sur une liste d’images, exécute un prompt pour chacune, puis stocke le résultat dans des métadonnées ou dans sqlite
Je me demande si gemma 4b est vraiment assez bon pour ce type de tâche
Je n’ai essayé que des versions plus grosses, donc je pensais que 4b serait insuffisant
Je me demande ce qui a changé concrètement du point de vue d’un utilisateur ordinaire
Il y a déjà quelques mois, on pouvait faire de la description d’images avec
llama.cpp, donc je suis curieux de connaître la nouveautéllama.cpppropose des releases compilées pour différentes plateformesCette fois, la fonction vision a été ajoutée
Sur macOS, on peut télécharger
llama-b5332-bin-macos-arm64.zip, le décompresser, puis autoriser l’exécution avec une commandesudo xattrEnsuite, on peut utiliser
llama-mtmd-clicomme interface terminalOu bien lancer un serveur web sur
localhost:8080avec UI et APIJ’ai consigné un historique d’utilisation plus détaillé sur mon blog personnel
Avec brew, on peut utiliser l’option
--HEADpour compiler toujours la version la plus récenteLa version du paquet brew devrait aussi être mise à jour d’ici quelques heures, ce qui permettra une mise à niveau facile
Grâce à
convert_hf_to_gguf.py --mmproj, il est devenu bien plus simple de créer des quants pour n’importe quel modèle visionLe support de la vision dans
llama-serverest vraiment excellentC’est une fonctionnalité attendue depuis longtemps
Maintenant,
-nglest automatiquement réglé sur la valeur maximaleIl n’est plus nécessaire de préciser soi-même
-ngl 99Cela dit, ça ne concerne que l’environnement Metal ; pour CUDA et les autres, il faut toujours le spécifier
Je me demande ce que ça vaut d’utiliser les modèles multimodaux gemma3 via ollama par rapport à
llama.cppJ’aimerais connaître les avantages ou les retours d’expérience, notamment sur les Mac Apple Silicon
Premièrement, la prise en charge dans
llama.cppest intégrée horizontalement dans l’écosystème ggml, ce qui permet davantage d’optimisations et des performances supérieures à ollamaPar exemple,
pixtral/mistral small 3.1bénéficie d’une astuce 2D-RoPE qui consomme moins de mémoire que sur OllamaUne fonction flash attention devrait aussi être ajoutée bientôt, ce qui rendra l’encodeur vision plus rapide et moins gourmand en mémoire
Deuxièmement,
llama.cppprend en charge plus de modèles qu’ollamaollama ne prend en charge ni pixtral ni smolvlm
Je me demande s’il existe des outils qui intègrent la vision dans le développement UI
Par exemple, dans un projet perso front-end TS/React, j’utilise un LLM local/cloud branché à VSCode, mais même avec un modèle prenant en charge la vision, il faut toujours faire une capture d’écran puis la coller manuellement
S’il existait un outil pour automatiser tout ce flux, ou même juste une extension simple permettant de prendre une capture via un raccourci clavier et de la coller automatiquement dans le chat, ça ferait gagner beaucoup de temps
L’abréviation ngl est vraiment déroutante
C’est étonnant de voir apparaître autant d’astuces et de réglages pour faire tourner ça le plus vite possible sur Mac
Je me demande si ces gains de vitesse vont amener davantage de gens à expérimenter la vision chez eux
llama.cpptourne très bien à la fois sur mon PC vieux de 10 ans et sur mon Mac M1