Configurar llama.cpp do zero assusta menos do que parece, e a v0.5.0, lançada em 23 de setembro de 2026, dá motivo para revisitar os parâmetros do llama-server. A versão, disponível na página de releases do projeto no commit 7fe450e, com build noturno associado b11146, atualiza a biblioteca ggml para a 0.25.0, expande o suporte a flash-attention e à fusão MoE/SSM entre os backends e adiciona suporte a novos modelos, como HRM-Text, MiMo-V2.6 e a conversão de HunyuanOCR.

A seguir, as configurações iniciais do llama-server numa GPU de 16 GB de VRAM, parâmetro por parâmetro, com o que mudou de verdade nesta versão. A referência completa das flags está no README oficial do servidor, no repositório do projeto.

O que você precisa antes de começar: binários da v0.5.0, GGUF e 16 GB de VRAM

Configurar llama.cpp v0.5.0: o que cada parâmetro do servidor faz - Imagem complementar

Além dos binários da v0.5.0, que também têm espelho no SourceForge, você precisa de um modelo em formato GGUF. O llama-server sobe esse modelo com API compatível com OpenAI e uma web UI embutida para conversar sem escrever cliente nenhum.

Com 16 GB de VRAM, o cenário típico é um modelo quantizado na faixa de 12B rodando inteiro na GPU, com contexto folgado. Para quem roda tudo localmente, é a diferença entre depender de API externa e ter o serviço na própria máquina.

PUBLICIDADE

O comando completo do llama-server para uma GPU de consumo

Um ponto de partida típico, com valores de exemplo que você ajusta ao seu modelo:

llama-server -m modelo.gguf -ngl 99 -c 16384 --parallel 4 -fa auto -ctk q8_0 -ctv q8_0 -b 2048 -ub 512 --jinja

Cada flag desse comando aparece detalhada nas seções seguintes. Se a sua instalação usa caminhos ou nomes de executável diferentes, o lugar para conferir é o README do servidor, que documenta a linha de comando completa.

--n-gpu-layers, tamanho de contexto (-c) e slots paralelos (--parallel)

A flag -ngl (ou --n-gpu-layers) define quantas camadas do modelo são descarregadas para a GPU. Com 16 GB, o objetivo costuma ser descarregar o máximo possível e deixar a CPU só como escape quando a memória aperta.

O -c aumenta o consumo de VRAM do cache KV junto com o contexto. Já o --parallel abre vários slots de inferência simultâneos no mesmo processo, e desde a v0.4.0 o servidor trabalha com limite de contexto por slot, um recurso que entra em cena justamente ao combinar --parallel com --ctx-size: mais slots significam contexto gerenciado por slot.

Flash Attention (--flash-attn) e cache KV quantizado (--cache-type-k / --cache-type-v)

A flag -fa (ou --flash-attn) aceita on, off ou auto, com padrão auto. Como a v0.5.0 expande o suporte a flash-attention entre os backends via ggml 0.25.0, o auto tende a acertar a escolha com mais frequência.

As flags -ctk/--cache-type-k e -ctv/--cache-type-v quantizam o cache KV. Elas aceitam f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0 e q5_1, com padrão f16. Trocar para q8_0 reduz o consumo de memória do cache e libera espaço para um contexto maior sem trocar de modelo.

Batch (-b e -ub), template Jinja (--jinja) e parâmetros de amostragem

As flags -b e -ub controlam o processamento em lote do prompt. O -ub (--ubatch-size) define o batch físico, com padrão de 512 tokens; mexer aqui afeta mais o processamento do prompt do que a geração de tokens.

A mudança silenciosa da versão está no --jinja: o template Jinja para chat agora vem habilitado por padrão no servidor, então o template de conversa do modelo é aplicado sem flag extra. Já os parâmetros de amostragem seguem a API compatível com OpenAI exposta pelo servidor, e a documentação das flags de linha de comando está no README das ferramentas de CLI.

Como testar o servidor pelos endpoints /health, /v1/models e /slots

O GET /health é público, sem checagem de API key, e é o jeito mais rápido de saber se o servidor está pronto: responde 503 enquanto o modelo carrega e 200 com {"status": "ok"} quando dá para trabalhar. O /v1/health também funciona.

Os endpoints /models e /v1/models listam o modelo carregado e devem ser consultados pelos clientes para verificar capacidades do servidor, como suporte multimodal, antes de requisições especiais. Com --parallel ativo, o /slots acompanha o que acontece em cada slot de inferência. E, antes de qualquer endpoint, a web UI embutida já permite conversar com o modelo direto do navegador.

Quando a VRAM estoura ou o modelo é MoE: o que ajustar primeiro

A ordem que costuma pagar a conta: reduzir o -c, quantizar o cache KV com -ctk e -ctv em q8_0 ou menos, e só então baixar o -ngl para descarregar camadas na CPU. Trocar a quantização do modelo para Q4 ou abaixo é o último recurso, porque afeta a qualidade de forma mais direta.

Para modelos MoE, o primeiro ajuste é rodar a v0.5.0: a versão expande a fusão MoE/SSM entre os backends, incluindo o Metal, além de trazer aceleração de convolução em CUDA. O que ainda varia é o comportamento por hardware e por modelo, então não existe número mágico de camadas ou de contexto que valha para toda GPU de 16 GB. A documentação oficial é a referência para limites específicos do seu caso.

Na prática: configurar llama.cpp na minha GPU de 16 GB

Eu deixo o --flash-attn no auto. Faço testes pontuais com outros valores, mas prefiro confiar no padrão da versão atual.

Hoje rodo o Gemma 12B denso em 4 bits inteiro na GPU, com cache KV e contexto de 30K, e ainda consigo rodar o z-image junto. Quando o z-image estoura um pouco a memória, ele cai para a RAM: demora mais, mas não falha a geração nem derruba o Gemma.

Já usei cache KV em q8 e q4, e ajusto a escolha conforme o modelo e a quantização dele, sempre testando antes. A experiência acumulada nesses testes dá uma margem de segurança para rodar modelos quantizados, tanto no cache KV quanto na quantização do modelo (Q4, Q5, Q6 e por aí vai). Só lembrando que quanto mais quantização, mais a qualidade cai um pouco. Vale testar no seu ambiente e ver o que se encaixa melhor.

Perguntas frequentes

Qual é o padrão do --flash-attn no llama-server atual?

A flag aceita on, off ou auto, e o padrão é auto.

Quais valores o --cache-type-k e o --cache-type-v aceitam?

As duas flags aceitam f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0 e q5_1, com padrão f16.

O que o /health responde enquanto o modelo carrega?

Ele retorna 503 durante o carregamento e 200 com {"status": "ok"} quando o servidor está pronto. É um endpoint público, sem checagem de API key, e o /v1/health também funciona.