6 Punkte von GN⁺ 2025-05-11 | 1 Kommentare | Auf WhatsApp teilen
  • Llama.cpp unterstützt jetzt über libmtmd multimodale Eingaben (einschließlich Vision)
    • OpenAI-kompatible /chat/completions-API über llama-mtmd-cli oder llama-server
  • Die multimodalen Funktionen sind sofort in Modellen wie Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small und InternVL nutzbar
    • Vorgequantisierte Modelle werden bereitgestellt (meist standardmäßig mit QK_K_M-Quantisierung)
  • Standardmäßig wird der multimodale Projektor auf die GPU ausgelagert; bei Bedarf kann dies auch deaktiviert werden
  • Einige Modelle benötigen ein großes Kontextfenster (z. B. -c 8192)

Überblick

  • Llama.cpp unterstützt mit libmtmd nun neu multimodale Eingaben
  • Nutzer können damit neben Text auch Eingaben wie Bilder verarbeiten, wodurch sich die Nutzbarkeit von Vision-Modellen erweitert
  • Diese Funktion ist bereits mit wichtigen Modellen wie Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small und InternVL kompatibel

So aktiviert man multimodale Eingaben

  • Es werden zwei zentrale Ausführungsarten beschrieben: Erstens die Nutzung der Option -hf (erfordert unterstützte Modelle), zweitens die Kombination der Optionen -m und --mmproj, um Textmodell und multimodales Projektormodell jeweils separat anzugeben
  • Bei Verwendung der -hf-Option kann die multimodale Funktion mit --no-mmproj deaktiviert werden; wenn eine benutzerdefinierte mmproj-Datei verwendet werden soll, nutzt man die Option --mmproj local_file.gguf
  • GPU-Offloading ist der Standard; wer das nicht möchte, kann es mit der Option --no-mmproj-offload deaktivieren

Beispielbefehle

  • In der Kommandozeile wird llama-mtmd-cli, auf dem Server llama-server verwendet
  • Bei Verwendung lokaler Dateien wird die Datei direkt mit --mmproj angegeben
  • Um GPU-Offloading zu deaktivieren, wird zusätzlich die Option --no-mmproj-offload verwendet

Liste sofort nutzbarer multimodaler Modelle

  • Es werden verschiedene vorbereitete Modelle beschrieben, die standardmäßig die Q4_K_M-Quantisierung verwenden
  • Beispiele unterstützter Modelle:
    • Gemma 3: Versionen mit 4b, 12b und 27b
    • SmolVLM-Reihe: 256M, 500M, 2.2B usw.
    • Pixtral 12B
    • Qwen 2 VL: 2B, 7B sowie Qwen 2.5 VL: 3B, 7B, 32B, 72B
    • Mistral Small 3.1 24B (IQ2_M-Quantisierung)
    • InternVL Generation 2.5 und 3: Unterstützung für verschiedene Parametergrößen

Hinweise

  • Bei der Nutzung wird anstelle von (tool_name) der gewünschte Name der ausführbaren Datei eingetragen (z. B. llama-mtmd-cli oder llama-server)
  • Bei einigen multimodalen Modellen muss möglicherweise eine große Kontextfenstergröße angegeben werden (z. B. mit einer Option wie -c 8192)

1 Kommentare

 
GN⁺ 2025-05-11
Hacker-News-Kommentare
  • Auf einem MBP M1 mit 64 GB erreiche ich mit ggml-org/gemma-3-4b-it-GGUF etwa 25 t/s bei der Prompt-Verarbeitung und 63 t/s bei der Token-Generierung.
    Die gesamte Bildverarbeitung dauert unabhängig von der Bildgröße etwa 15 Sekunden.
    Selbst das kleine 4B-Modell liefert schon ziemlich gute Ausgaben und beschreibt unterschiedlichste Bilder gut.
    Zur Reproduktion: llama.cpp klonen und bauen, Modell- und mmproj-Datei herunterladen, dann den Server starten und die Weboberfläche öffnen.
    Wenn man es ohne die Option -hf verwendet, muss man unbedingt den Schalter --mmproj angeben, sonst gibt es einen Fehler bei der Multimodal-Unterstützung.
    Ich verwende derzeit die offizielle Quantisierung ggml-org/gemma-3-4b-it-GGUF.
    Ich erwarte, dass die von danielhanchen bereitgestellte Unsloth-Quantisierung schneller ist.

    • Bei allen Bildern erscheint dieselbe Antwort.
      So etwas wie: „Dieses Bild zeigt mehrere Personen in verschiedenen Posen …“
      Im tatsächlichen Bild ist davon überhaupt nichts zu sehen, daher habe ich keine Ahnung, wo ich beim Debugging anfangen soll.

    • Bei mir kommt ebenfalls immer wieder dasselbe Ergebnis.
      Ich habe gelesen, dass die Prompt-Verarbeitung mit dem 7B-Modell auf M1 fast 10-mal schneller sein sollte.
      Vielleicht ist der Encoder nicht optimiert?

    • Kannst du Beispielbilder zeigen, die direkt per Prompt erzeugt wurden?
      Ich würde das gern einmal sehen, bevor ich es selbst ausprobiere.

    • Beziehen sich diese Zahlen auf 4-/8-Bit-Quantisierungen oder auf vollständiges fp16?

  • Man muss llama.cpp direkt aus dem Quellcode kompilieren.
    Dann bekommt man das Programm llama-mtmd-cli.
    Ich habe Quantisierungen mit Vision-Unterstützung vorbereitet.
    Sie lassen sich mit Befehlen wie unsloth/gemma-3-4b-it-GGUF:Q4_K_XL ausführen.
    Während des Chats kann man mit /image image.png ein Bild hochladen und darüber sprechen.
    Auf dem Metal-Backend muss man jetzt -ngl -1 nicht mehr verwenden.
    Unter CUDA ist es weiterhin nötig.
    -1 bedeutet, dass alle GPU-Layer auf die GPU ausgelagert werden.

    • Falls es hilft: Ich habe die Doku auf der unsloth.ai-Seite aktualisiert, dort kann man die Verwendung von llama-mtmd-cli direkt nachschlagen.
      Es funktioniert auch mit Mistral Small.

    • Wenn man llama.cpp mit Homebrew installiert, ist llama-mtmd-cli ebenfalls enthalten.
      Man muss nur den Befehl eingeben und kann es sofort starten.

    • Tatsächlich ist -ngl 99 stabiler, -ngl -1 kann je nach Umgebung unterschiedlich funktionieren.

    • Schon beim bloßen Anblick von ngl steigt mein Ärgerpegel.

  • Das ist bisher die nützlichste Dokumentation, die ich gefunden habe.
    Sie hilft enorm dabei zu verstehen, wie das Ganze funktioniert.
    https://github.com/ggml-org/llama.cpp/…

    • Interessant ist, dass die Vorverarbeitung der Bild-Embeddings je nach Architektur in eine separate Bibliothek ausgelagert wurde.
      Das ähnelt der Aufteilung von Text-Transformer-Werkzeugen wie bei huggingface/tokenizers.
  • Die SmolVLM-Reihe wird ebenfalls unterstützt.
    Dank der kleinen Größe liefert sie sehr schnelle Antworten.
    Perfekt für ein Echtzeit-Videoüberwachungssystem zu Hause.
    Ich will das als Hobbyprojekt ausprobieren.
    Es wurden auch konkrete Schnellstart-Befehle hinterlassen.

    • Danke, dass du dem Server die mtmd-Funktion hinzugefügt hast.
      Ich habe ebenfalls auf den Commit gewartet und das weiter verfolgt.

    • Jedes Mal, wenn ich die Git-Commit-Notizen lese und deine Beiträge sehe, bin ich beeindruckt.
      Auch insgesamt großartige Arbeit an llama.cpp.

    • Mich würde aber interessieren, wie es qualitativ bei dieser hohen Geschwindigkeit aussieht.
      Können Modelle kleiner als 2.2B überhaupt noch vernünftige, zusammenhängende Sätze erzeugen?

  • Ich habe Gemma3 4b genutzt, um für viele meiner jüngsten Reisefotos Keywords und Beschreibungen zu erzeugen.
    Es kann auch grundlegendes OCR, fasst also Fotos mit Text zusammen und errät anhand von Kontext-Hinweisen recht gut, wo sie aufgenommen wurden.
    Für etwas, das man selbst hosten kann, ist das hervorragend.

    • Klingt spannend.
      Nutzt du dafür eine Struktur, die durch eine Bildliste iteriert, für jedes Bild einen Prompt ausführt und die Ergebnisse dann in Metadaten oder sqlite speichert?

    • Ich frage mich, ob gemma 4b für solche Aufgaben wirklich ausreichend brauchbar ist.
      Ich habe bisher nur größere Versionen verwendet und dachte, 4b wäre dafür zu schwach.

  • Mich würde aus Sicht eines normalen Nutzers interessieren, was sich konkret geändert hat.
    Schon vor ein paar Monaten konnte man mit llama.cpp doch Bildbeschreibungen und Ähnliches erzeugen, daher frage ich mich, was hier neu ist.

  • llama.cpp bietet kompilierte Releases für verschiedene Plattformen an.
    Diesmal ist die Vision-Funktion neu hinzugekommen.
    Unter macOS kann man llama-b5332-bin-macos-arm64.zip herunterladen, entpacken und per sudo xattr die Ausführung erlauben. Danach lässt sich die Terminal-Oberfläche mit llama-mtmd-cli verwenden.
    Alternativ kann man auch einen Webserver auf localhost:8080 starten, inklusive UI und API.
    Eine detaillierte Nutzungsdokumentation habe ich in meinem persönlichen Blog zusammengestellt.

    • Wenn man per brew installiert, kann man mit der Option --HEAD immer den neuesten Stand bauen.
      In den nächsten Stunden wird wohl auch die brew-Paketversion aktualisiert, sodass sich alles leicht upgraden lässt.

    • Dank convert_hf_to_gguf.py --mmproj ist es viel einfacher geworden, Quantisierungen für beliebige Vision-Modelle zu erstellen.
      Dass llama-server jetzt Vision unterstützt, ist wirklich großartig.
      Darauf habe ich lange gewartet.

    • Jetzt wird für -ngl automatisch der Maximalwert gesetzt.
      Man muss -ngl 99 nicht mehr selbst angeben.
      Das gilt allerdings nur für Metal, bei CUDA und Ähnlichem muss es weiterhin explizit gesetzt werden.

  • Ich frage mich, wie sich die Nutzung des multimodalen Modells gemma3 über ollama im Vergleich zu llama.cpp verhält.
    Mich interessieren vor allem Vorteile und Erfahrungen auf Apple-Silicon-Macs.

    • Es gibt zwei Unterschiede.
      Erstens ist die Unterstützung in llama.cpp innerhalb des ggml-Ökosystems horizontal integriert, sodass sie stärker auf Geschwindigkeit optimiert werden kann als bei ollama.
      Zum Beispiel bietet pixtral/mistral small 3.1 einen 2D-RoPE-Trick, der weniger Speicher benötigt als bei Ollama.
      Bald soll auch Flash Attention hinzukommen, wodurch der Vision-Encoder schneller und mit weniger Speicher laufen wird.
      Zweitens unterstützt llama.cpp mehr unterschiedliche Modelle als ollama.
      ollama unterstützt weder pixtral noch smolvlm.
  • Ich frage mich, ob es ein Tool gibt, das Vision in die UI-Entwicklung einbindet.
    Beispiel: In einem Frontend-Hobbyprojekt mit TS/React nutze ich lokale/Cloud-LLMs in VSCode, aber selbst bei Modellen mit Vision-Unterstützung muss ich immer erst Screenshots machen und einfügen.
    Es wäre schon eine große Zeitersparnis, wenn dieser gesamte Teil automatisiert wäre oder es wenigstens eine einfache Erweiterung gäbe, die per Tastenkürzel einen Screenshot macht und ihn automatisch in den Chat einfügt.

  • Die Abkürzung ngl ist wirklich verwirrend.
    Es ist faszinierend, wie viele Tipps und Feineinstellungen auftauchen, um auf dem Mac maximale Geschwindigkeit herauszuholen.
    Ich frage mich, ob solche Geschwindigkeitsverbesserungen mehr Leute dazu bringen werden, Vision-Funktionen zu Hause auszuprobieren.

    • Auf jeden Fall.
      llama.cpp läuft sowohl auf meinem zehn Jahre alten PC als auch auf meinem M1-Mac hervorragend.