6 pontos por GN⁺ 2025-05-11 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2025-05-11
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 tokens
    O 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 arquivo mmproj, executar o servidor e depois acessar a interface web
    Se usar sem a opção -hf, é obrigatório passar a chave --mmproj para evitar erro de suporte multimodal
    Estou usando a quantização oficial ggml-org/gemma-3-4b-it-GGUF
    Espero que a quantização unsloth fornecida por danielhanchen seja mais rápida

    • A 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.cpp direto do código-fonte
    Aí consegue o programa llama-mtmd-cli
    Eu preparei quantizações com suporte a visão
    Dá para executar com comandos como unsloth/gemma-3-4b-it-GGUF:Q4_K_XL
    Durante o chat, você pode enviar uma imagem com /image image.png e conversar sobre ela
    Agora, no backend Metal, não precisa mais usar -ngl -1
    No CUDA isso ainda é necessário
    -1 significa descarregar todas as camadas de GPU para a GPU

    • Se ajudar, atualizei a página de documentação da unsloth.ai, então dá para consultar direto como usar o llama-mtmd-cli
      Também funciona com Mistral Small

    • Se você instalar o llama.cpp pelo Homebrew, o llama-mtmd-cli também vem incluído
      É só passar o comando e executar

    • Na verdade, -ngl 99 é mais estável; -ngl -1 pode ou não funcionar

    • Só 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/…

    • Acho interessante terem separado o pré-processamento de imagem-embedding por arquitetura em uma biblioteca à parte
      É parecido com como ferramentas de transformadores de texto são separadas, como no huggingface/tokenizers
  • A 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.cpp como um todo

    • Mas 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.cpp alguns meses atrás, então queria saber qual é a novidade

  • O llama.cpp fornece releases compilados para várias plataformas
    Desta 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 comando sudo xattr
    Depois disso, dá para usar a interface de terminal com llama-mtmd-cli
    Ou então iniciar um servidor web em localhost:8080 com UI e API
    Registrei o uso detalhado no meu blog pessoal

    • Se instalar via brew, dá para usar a opção --HEAD para sempre compilar a versão mais recente
      Em 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-server
      Era uma funcionalidade aguardada há muito tempo

    • Agora o -ngl é definido automaticamente para o valor máximo
      Não é mais preciso especificar -ngl 99 manualmente
      Isso vale só para o ambiente Metal; em CUDA e outros ainda precisa ser definido explicitamente

  • Queria entender como é usar llama.cpp em comparação com usar o modelo multimodal gemma3 via ollama
    Gostaria de saber se há vantagens ou experiências de uso em Macs com Apple Silicon

    • Há duas diferenças
      Primeiro, o suporte do llama.cpp é integrado horizontalmente dentro do ecossistema ggml, então pode ser otimizado para rodar mais rápido do que o ollama
      Por exemplo, pixtral/mistral small 3.1 oferece o truque 2D-RoPE com menos uso de memória do que no Ollama
      Em 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.cpp suporta uma variedade maior de modelos do que o ollama
      O ollama não suporta nem pixtral nem smolvlm
  • Queria 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

    • Com certeza
      llama.cpp roda muito bem tanto no meu PC de 10 anos quanto no meu Mac M1