- 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
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/…
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
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
llama.cpp corre muy bien tanto en mi PC de hace 10 años como en mi Mac M1