- Llama.cpp agora oferece suporte a entrada multimodal (incluindo visão) por meio do libmtmd
- API
/chat/completions compatível com OpenAI via llama-mtmd-cli ou llama-server
- O recurso multimodal já pode ser usado imediatamente em modelos como Gemma 3, SmolVLM, Pixtral, Qwen 2/2.5, Mistra Small e InternVL
- Modelos pré-quantizados disponíveis (a maioria inclui quantização QK_K_M por padrão)
- Por padrão, o projetor multimodal é descarregado para a GPU, com opção de desativar isso quando necessário
- Alguns modelos exigem uma janela de contexto grande (por exemplo: -c 8192)
Visão geral
- Llama.cpp passou a oferecer suporte a entrada multimodal usando o libmtmd
- Agora os usuários podem processar entradas além de texto, como imagens, ampliando a utilidade dos modelos de visão
- Esse recurso já é compatível com modelos importantes como Gemma 3, SmolVLM, Pixtral, Qwen 2 VL, Qwen 2.5 VL, Mistral Small e InternVL
Como ativar a entrada multimodal
- São apresentados dois modos principais de execução: o primeiro usa a opção -hf (requer modelo compatível), e o segundo combina as opções -m e --mmproj para definir separadamente o modelo de texto e o modelo projetor multimodal
- Ao usar a opção -hf, se quiser desativar o recurso multimodal, adicione --no-mmproj; para usar um arquivo mmproj personalizado, utilize a opção --mmproj local_file.gguf
- O descarregamento para GPU é o padrão; se não quiser isso, é possível desativá-lo com a opção --no-mmproj-offload
Exemplos de comandos
- Na linha de comando, usa-se llama-mtmd-cli; no servidor, llama-server
- Ao usar arquivos locais, o arquivo é especificado diretamente com --mmproj
- Para desativar o descarregamento para GPU, basta adicionar a opção --no-mmproj-offload
Lista de modelos multimodais prontos para uso
- São apresentados vários modelos prontos com quantização Q4_K_M como padrão
- Exemplos de modelos compatíveis:
- Gemma 3: versões 4b, 12b, 27b
- Linha SmolVLM: 256M, 500M, 2.2B etc.
- Pixtral 12B
- Qwen 2 VL: 2B, 7B e Qwen 2.5 VL: 3B, 7B, 32B, 72B
- Mistral Small 3.1 24B (quantização IQ2_M)
- InternVL gerações 2.5 e 3: suporte a vários tamanhos de parâmetros
Observações
- Durante o uso, insira o nome do binário desejado em (tool_name) (por exemplo: llama-mtmd-cli ou llama-server)
- Ao usar alguns modelos multimodais, pode ser necessário definir um tamanho de janela de contexto grande (por exemplo, usando uma opção como -c 8192)
1 comentários
Comentários do Hacker News
Em um MBP M1 64GB, usando
ggml-org/gemma-3-4b-it-GGUF, consegui cerca de 25 t/s no processamento do prompt e 63 t/s na geração de tokensO tempo total de processamento da imagem fica em torno de 15 segundos, independentemente do tamanho da imagem
Mesmo o modelo pequeno de 4B já mostra saídas bem boas e descreve bem imagens variadas
Para reproduzir, basta clonar e compilar o
llama.cpp, baixar o modelo e o arquivommproj, executar o servidor e depois acessar a interface webSe usar sem a opção
-hf, é obrigatório passar a chave--mmprojpara evitar erro de suporte multimodalEstou usando a quantização oficial
ggml-org/gemma-3-4b-it-GGUFEspero que a quantização
unslothfornecida por danielhanchen seja mais rápidaA mesma resposta aparece para todas as imagens
Algo como: "Esta imagem mostra várias pessoas em poses diferentes..."
A imagem real não tem nada disso, então não faço ideia por onde começar a depurar
Estou tendo o mesmo resultado repetidamente
Vi um post dizendo que, no M1, usando o modelo 7b, o processamento do prompt deveria ser quase 10 vezes mais rápido
Fico me perguntando se o encoder não foi otimizado
Você poderia mostrar alguma imagem de exemplo gerada diretamente pelo prompt?
Queria ver antes de testar
Fiquei curioso se esses números são com quantização de 4/8 bits ou com fp16 completo
Você precisa compilar o
llama.cppdireto do código-fonteAí consegue o programa
llama-mtmd-cliEu preparei quantizações com suporte a visão
Dá para executar com comandos como
unsloth/gemma-3-4b-it-GGUF:Q4_K_XLDurante o chat, você pode enviar uma imagem com
/image image.pnge conversar sobre elaAgora, no backend Metal, não precisa mais usar
-ngl -1No CUDA isso ainda é necessário
-1significa descarregar todas as camadas de GPU para a GPUSe ajudar, atualizei a página de documentação da
unsloth.ai, então dá para consultar direto como usar ollama-mtmd-cliTambém funciona com Mistral Small
Se você instalar o
llama.cpppelo Homebrew, ollama-mtmd-clitambém vem incluídoÉ só passar o comando e executar
Na verdade,
-ngl 99é mais estável;-ngl -1pode ou não funcionarSó de ver as letras ngl já sinto a raiva subindo
É a documentação mais útil que encontrei até agora
Ajuda bastante a entender como tudo funciona
https://github.com/ggml-org/llama.cpp/…
É parecido com como ferramentas de transformadores de texto são separadas, como no
huggingface/tokenizersA série SmolVLM também é suportada
Por ser pequena, oferece respostas muito rápidas
É perfeita para um sistema doméstico de vigilância por vídeo em tempo real
Estou pensando em tentar isso como projeto pessoal
Também deixaram exemplos rápidos de comando bem específicos
Obrigado por adicionar a funcionalidade mtmd ao servidor
Eu também estava acompanhando e esperando esse commit
Sempre fico impressionado ao ver suas contribuições nas notas de commit
E parabéns pelo trabalho no
llama.cppcomo um todoMas fico curioso sobre a qualidade dessas respostas tão rápidas
Modelos menores que 2.2B ainda conseguem produzir frases coerentes com contexto?
Usei o Gemma3 4b para gerar palavras-chave e descrições para várias fotos de uma viagem recente
Ele também faz OCR básico, então resume fotos com texto e até deduz bem onde foram tiradas com base em pistas de contexto
Para algo que pode ser hospedado por conta própria, é excelente
Parece interessante
Você usa algo como um loop sobre a lista de imagens, executa um prompt para cada uma e salva os resultados em metadados ou em algo como sqlite?
Fico curioso se o gemma 4b já é realmente suficiente para esse tipo de tarefa
Só usei versões maiores e achava que 4b seria insuficiente
Do ponto de vista de um usuário comum, queria entender o que mudou
Já dava para fazer descrição de imagens com
llama.cppalguns meses atrás, então queria saber qual é a novidadeO
llama.cppfornece releases compilados para várias plataformasDesta vez, o suporte a visão foi adicionado
No macOS, você pode baixar
llama-b5332-bin-macos-arm64.zip, descompactar e liberar a execução com o comandosudo xattrDepois disso, dá para usar a interface de terminal com
llama-mtmd-cliOu então iniciar um servidor web em
localhost:8080com UI e APIRegistrei o uso detalhado no meu blog pessoal
Se instalar via
brew, dá para usar a opção--HEADpara sempre compilar a versão mais recenteEm poucas horas a versão do pacote no brew também deve ser atualizada, então a atualização ficará simples
Graças ao
convert_hf_to_gguf.py --mmproj, ficou muito mais fácil criar quantizações de qualquer modelo de visãoÉ muito legal ver suporte a visão no
llama-serverEra uma funcionalidade aguardada há muito tempo
Agora o
-nglé definido automaticamente para o valor máximoNão é mais preciso especificar
-ngl 99manualmenteIsso vale só para o ambiente Metal; em CUDA e outros ainda precisa ser definido explicitamente
Queria entender como é usar
llama.cppem comparação com usar o modelo multimodal gemma3 viaollamaGostaria de saber se há vantagens ou experiências de uso em Macs com Apple Silicon
Primeiro, o suporte do
llama.cppé integrado horizontalmente dentro do ecossistemaggml, então pode ser otimizado para rodar mais rápido do que oollamaPor exemplo,
pixtral/mistral small 3.1oferece o truque 2D-RoPE com menos uso de memória do que no OllamaEm breve também será adicionado flash attention, o que fará o encoder de visão rodar mais rápido e com menos memória
Segundo, o
llama.cppsuporta uma variedade maior de modelos do que oollamaO
ollamanão suporta nempixtralnemsmolvlmQueria saber se existem ferramentas que integrem visão ao desenvolvimento de UI
Por exemplo, em um projeto pessoal de frontend com TS/React, uso LLMs locais/em nuvem ligados ao VSCode, mas mesmo com modelos que suportam visão ainda preciso tirar screenshot e colar manualmente
Se houvesse uma forma de automatizar isso em geral, ou mesmo só uma extensão simples com atalho de teclado para tirar screenshot e colar automaticamente no chat, já economizaria bastante tempo
A sigla ngl é bem confusa
É curioso ver tantas dicas e ajustes surgindo para fazer isso rodar o mais rápido possível no Mac
Fico pensando se essas melhorias de velocidade vão fazer mais gente experimentar recursos de visão em casa
llama.cpp roda muito bem tanto no meu PC de 10 anos quanto no meu Mac M1