6 puntos por GN⁺ 2025-05-11 | 1 comentarios | Compartir por WhatsApp
  • Llama.cpp ahora admite entrada multimodal (incluida visión) mediante libmtmd
    • API /chat/completions compatible con OpenAI a través de llama-mtmd-cli o llama-server
  • La funcionalidad multimodal está disponible de inmediato en modelos como Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small e InternVL
    • Se ofrecen modelos pre-cuantizados (la mayoría incluyen cuantización QK_K_M por defecto)
  • De forma predeterminada, el proyector multimodal se descarga a la GPU, y también se puede desactivar si hace falta
  • Algunos modelos requieren una ventana de contexto grande (por ejemplo, -c 8192)

Resumen general

  • Llama.cpp ahora incorpora compatibilidad con entrada multimodal mediante libmtmd
  • Los usuarios ya pueden procesar entradas no textuales, como imágenes, lo que amplía el uso de modelos de visión
  • Esta función ya es compatible con modelos importantes como Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small e InternVL

Cómo activar la entrada multimodal

  • Se indican dos formas principales de ejecución: la primera usa la opción -hf (requiere un modelo compatible), y la segunda combina las opciones -m y --mmproj para especificar por separado el modelo de texto y el modelo proyector multimodal
  • Al usar la opción -hf, si se quiere desactivar la funcionalidad multimodal se agrega --no-mmproj, y si se usa un archivo mmproj personalizado, se emplea la opción --mmproj local_file.gguf
  • La descarga a GPU es el valor predeterminado; si no se desea, se puede desactivar con la opción --no-mmproj-offload

Comandos de ejemplo

  • En la línea de comandos se usa llama-mtmd-cli y en el servidor se usa llama-server
  • Si se usan archivos locales, el archivo se especifica directamente con --mmproj
  • Para desactivar la descarga a GPU, se agrega la opción --no-mmproj-offload

Lista de modelos multimodales disponibles de inmediato

  • Se presentan varios modelos listos para usar con cuantización Q4_K_M como base
  • Ejemplos de modelos compatibles:
    • Gemma 3: versiones 4b, 12b y 27b
    • Familia SmolVLM: 256M, 500M, 2.2B y otros
    • Pixtral 12B
    • Qwen 2 VL: 2B, 7B y Qwen 2.5 VL: 3B, 7B, 32B, 72B
    • Mistral Small 3.1 24B (cuantización IQ2_M)
    • InternVL generaciones 2.5 y 3: compatibilidad con varios tamaños de parámetros

Notas

  • Al usarlo, en (tool_name) se debe escribir el nombre del binario que se quiera ejecutar (por ejemplo, llama-mtmd-cli o llama-server)
  • Al usar algunos modelos multimodales, puede ser necesario indicar un tamaño de ventana de contexto grande (por ejemplo, con una opción como -c 8192)

1 comentarios

 
GN⁺ 2025-05-11
Comentarios de Hacker News
  • En una MBP M1 de 64GB, usando ggml-org/gemma-3-4b-it-GGUF, obtengo alrededor de 25t/s de procesamiento del prompt y 63t/s de generación de tokens
    El tiempo total de procesamiento de imagen es de unos 15 segundos, sin importar el tamaño de la imagen
    Incluso el modelo pequeño de 4B ya muestra resultados bastante decentes y describe bien distintas imágenes
    La forma de reproducirlo es clonar y compilar llama.cpp, descargar el modelo y el archivo mmproj, ejecutar el servidor y luego entrar a la interfaz web
    Si se usa sin la opción -hf, hay que pasar obligatoriamente el switch --mmproj para evitar errores de soporte multimodal
    Estoy usando el quant oficial ggml-org/gemma-3-4b-it-GGUF
    Espero que el quant unsloth que ofrece danielhanchen sea más rápido

    • Me sale exactamente la misma respuesta para todas las imágenes
      "Esta imagen muestra a varias personas en distintas poses..." algo así
      La imagen real no tiene nada de eso, así que no tengo idea de por dónde empezar a depurar

    • A mí también me sigue saliendo el mismo resultado
      Vi una publicación que decía que en M1 el procesamiento del prompt con el modelo 7b debería ser casi 10 veces más rápido
      Me pregunto si el encoder no estará optimizado

    • ¿Podrías mostrar una imagen de ejemplo generada directamente con el prompt?
      Me gustaría verla antes de probarlo

    • Me pregunto si esos números son con quants de 4/8 bits o con fp16 completo

  • Hay que compilar llama.cpp directamente desde el código fuente
    Así se obtiene el programa llama-mtmd-cli
    Yo ya dejé listos quants con soporte de vision
    Se puede ejecutar con comandos como unsloth/gemma-3-4b-it-GGUF:Q4_K_XL
    Durante el chat puedes subir una imagen con /image image.png y conversar sobre ella
    Ahora en el backend Metal ya no hace falta usar -ngl -1
    En CUDA todavía sí
    -1 significa offload de todas las capas de GPU hacia la GPU

    • Por si ayuda, ya actualicé la documentación en la página de unsloth.ai, así que pueden consultar directamente cómo usar llama-mtmd-cli
      También se puede usar con Mistral Small

    • Si instalas llama.cpp con Homebrew, llama-mtmd-cli también viene incluido
      Solo hay que darle el comando y corre de inmediato

    • En realidad, -ngl 99 es más estable; con -ngl -1 puede variar si funciona o no

    • Con solo ver las letras ngl ya me empieza a subir la presión

  • Es la documentación más útil que he encontrado hasta ahora
    Ayuda muchísimo a entender cómo funciona
    https://github.com/ggml-org/llama.cpp/…

    • Me parece interesante que hayan separado el preprocesamiento de image-embedding por arquitectura en librerías aparte
      Es parecido a cómo se separaron las herramientas de transformadores de texto tipo huggingface/tokenizers
  • También soporta la serie SmolVLM
    Gracias a su tamaño pequeño ofrece respuestas muy rápidas
    Es perfecto para un sistema casero de videovigilancia en tiempo real
    Estoy pensando probarlo como proyecto hobby
    También dejó ejemplos concretos de comandos rápidos

    • Gracias por agregar la función mtmd al servidor
      Yo también estaba esperando el commit y siguiéndolo de cerca

    • Cada vez que veo las notas de commits me impresiona ver todo lo que has aportado
      Gran trabajo también con llama.cpp en general

    • Pero me pregunto cómo anda la calidad con esa velocidad de respuesta tan alta
      ¿Los modelos más pequeños que 2.2B pueden realmente soltar oraciones con contexto?

  • Usé Gemma3 4b para generar palabras clave y descripciones de varias fotos de un viaje reciente
    También hace OCR básico, así que resume fotos con texto y, a partir de pistas de contexto, también adivina bastante bien dónde fueron tomadas
    Para algo que se puede alojar uno mismo, está excelente

    • Suena interesante
      Me pregunto si lo usas con una estructura donde haces loop sobre una lista de imágenes, ejecutas el prompt para cada una y guardas el resultado en metadata o en algo como sqlite

    • Me pregunto si gemma 4b realmente alcanza para este tipo de trabajo
      Yo solo he usado versiones más grandes, así que pensaba que 4b se quedaría corto

  • Desde el punto de vista de un usuario normal, me pregunto qué cambió exactamente
    Hace unos meses ya se podía hacer descripción de imágenes y cosas así con llama.cpp, así que me da curiosidad cuál es la diferencia ahora

  • llama.cpp ofrece releases compilados para varias plataformas
    Esta vez añadieron la función de vision
    En macOS se puede descargar llama-b5332-bin-macos-arm64.zip, descomprimirlo y, tras permitir su ejecución con el comando sudo xattr, usar llama-mtmd-cli como interfaz de terminal
    O también levantar un servidor web en localhost:8080, con UI y API incluidas
    Dejé un registro detallado del uso en mi blog personal

    • Si lo instalas con brew, con la opción --HEAD siempre puedes compilar la versión más reciente
      En unas horas también debería actualizarse la versión del paquete de brew para poder hacer upgrade fácilmente

    • Gracias a convert_hf_to_gguf.py --mmproj, ahora es mucho más fácil crear quants de cualquier modelo de vision
      Que llama-server soporte vision está buenísimo
      Era una función muy esperada

    • Ahora -ngl se configura automáticamente al valor máximo
      Ya no hace falta indicar manualmente -ngl 99
      Pero eso aplica solo en entornos Metal; en CUDA y otros todavía hay que especificarlo

  • Me pregunto cómo se compara usar el modelo multimodal gemma3 a través de ollama frente a usarlo con llama.cpp
    Quisiera saber si hay ventajas o experiencias de uso en Macs con Apple Silicon

    • Hay dos diferencias
      La primera es que el soporte de llama.cpp está integrado horizontalmente dentro del ecosistema ggml, así que se puede optimizar para correr más rápido que ollama
      Por ejemplo, pixtral/mistral small 3.1 ofrece un truco de 2D-RoPE que usa menos memoria que Ollama
      También pronto se agregará flash attention, lo que hará que el vision encoder funcione más rápido y con menos memoria
      La segunda es que llama.cpp soporta más modelos que ollama
      ollama no soporta ni pixtral ni smolvlm
  • Me pregunto si existe alguna herramienta que integre vision en el desarrollo de UI
    Por ejemplo, en un proyecto hobby de frontend con TS/React uso LLMs locales o en la nube conectados a VSCode, pero incluso con modelos que soportan vision igual tengo que tomar capturas y pegarlas manualmente
    Si hubiera algo que automatice toda esa parte, o incluso solo una extensión simple que tome una captura con atajo de teclado y la pegue automáticamente en el chat, ahorraría mucho tiempo

  • La abreviatura ngl sí que confunde bastante
    Es curioso ver tantos tips y ajustes para exprimir al máximo la velocidad en Mac
    Me pregunto si estas mejoras de rendimiento harán que más gente experimente con vision en casa

    • Seguro que sí
      llama.cpp corre muy bien tanto en mi PC de hace 10 años como en mi Mac M1