6 points par GN⁺ 2025-05-11 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2025-05-11
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-GGUF
    Le 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 fichier mmproj, lancer le serveur, puis se connecter à l’interface web
    Si on l’utilise sans l’option -hf, il faut absolument ajouter le switch --mmproj pour éviter une erreur de prise en charge multimodale
    J’utilise le quant officiel ggml-org/gemma-3-4b-it-GGUF
    Je 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.cpp directement depuis les sources
    On obtient le programme llama-mtmd-cli
    J’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_XL
    Pendant une session de chat, on peut envoyer une image avec /image image.png et dialoguer dessus
    Maintenant, sur le backend Metal, il n’est plus nécessaire d’utiliser -ngl -1
    Sur CUDA, c’est toujours nécessaire
    -1 signifie déporter toutes les couches GPU sur le GPU

    • Si ç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.cpp avec Homebrew, llama-mtmd-cli est aussi inclus
      Il suffit de donner la commande pour l’exécuter immédiatement

    • En réalité, -ngl 99 est plus stable, -ngl -1 peut fonctionner ou non selon les cas

    • Rien 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/…

    • Je trouve intéressant que le prétraitement image-vers-embedding, selon l’architecture, ait été séparé dans une bibliothèque distincte
      C’est similaire à la manière dont les outils de transformation de texte sont séparés, comme huggingface/tokenizers
  • La 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.cpp aussi

    • Mais 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.cpp propose des releases compilées pour différentes plateformes
    Cette 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 commande sudo xattr
    Ensuite, on peut utiliser llama-mtmd-cli comme interface terminal
    Ou bien lancer un serveur web sur localhost:8080 avec UI et API
    J’ai consigné un historique d’utilisation plus détaillé sur mon blog personnel

    • Avec brew, on peut utiliser l’option --HEAD pour compiler toujours la version la plus récente
      La 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 vision
      Le support de la vision dans llama-server est vraiment excellent
      C’est une fonctionnalité attendue depuis longtemps

    • Maintenant, -ngl est automatiquement réglé sur la valeur maximale
      Il n’est plus nécessaire de préciser soi-même -ngl 99
      Cela 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.cpp
    J’aimerais connaître les avantages ou les retours d’expérience, notamment sur les Mac Apple Silicon

    • Il y a deux différences
      Premièrement, la prise en charge dans llama.cpp est intégrée horizontalement dans l’écosystème ggml, ce qui permet davantage d’optimisations et des performances supérieures à ollama
      Par exemple, pixtral/mistral small 3.1 bénéficie d’une astuce 2D-RoPE qui consomme moins de mémoire que sur Ollama
      Une 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.cpp prend en charge plus de modèles qu’ollama
      ollama 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

    • Clairement
      llama.cpp tourne très bien à la fois sur mon PC vieux de 10 ans et sur mon Mac M1