PUBLICIDADE

llama.cpp tutorial: compile no Linux e rode um servidor LLM local

27/09/2026
27 visualizações
8 min de leitura
Compile o llama.cpp no Linux com CMake, baixe modelos GGUF do Hugging Face, escolha a quantização certa e suba um servidor local com API compatível com a OpenAI.
Imagem principal do post

Se você está procurando um llama.cpp tutorial que vá da compilação do zero até um servidor com API compatível com a OpenAI, este post cobre o caminho completo no Linux. O objetivo é sair do aplicativo pronto e entender cada etapa: build, modelo GGUF, quantização e servidor. No fim, você tem um endpoint local que alimenta automações sem enviar dado nenhum para fora da sua máquina.

O llama.cpp é o motor por trás de boa parte do ecossistema de IA local: o formato GGUF é o mesmo usado por Ollama e LM Studio. Compilar direto do repositório oficial dá acesso às opções mais recentes do projeto, mantido ativamente pela ggml-org. A versão atual do repositório é a 0.5.0.

Por que rodar LLM local com llama.cpp (e quando vale a pena)

Imagem complementar

Rodar modelo na própria máquina significa custo zero por token, latência baixa e, principalmente, privacidade: o texto processado não sai do seu hardware. Para quem trabalha com automações que trafegam dados sensíveis de clientes, isso costuma pesar mais do que qualquer ganho técnico. O fator econômico também ajuda em fluxos de alto volume, onde a cobrança por API pesa no orçamento.

Ferramentas como Ollama e LM Studio facilitam o começo, mas empacotam o llama.cpp com camadas próprias de configuração. Compilar do zero entrega controle direto sobre o build, o contexto e os parâmetros de execução. Vale a pena para quem quer esse nível de controle ou um servidor multiusuário; se a intenção é só testar um modelo rapidamente, os aplicativos prontos resolvem com menos atrito.

PUBLICIDADE

llama.cpp tutorial na prática: preparando o ambiente e compilando no Linux

Antes de tudo, um aviso que economiza tempo: o build oficial usa exclusivamente CMake. O Makefile antigo está deprecado e, se você rodar make, recebe uma mensagem de erro instruindo a migrar para o CMake. Qualquer tutorial antigo que mostre make está desatualizado.

Instalando as dependências

No Ubuntu ou Debian, instale as ferramentas de compilação antes de clonar o repositório:

sudo apt install git build-essential cmake

Depois, clone o repositório e entre na pasta:

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

Compilando para CPU

O build padrão, sem aceleração de GPU, usa dois comandos oficiais:

cmake -B build
cmake --build build --config Release

A compilação leva alguns minutos. Ao terminar, os binários ficam em build/bin/, incluindo o llama-cli e o llama-server que usaremos adiante.

Compilando com suporte a CUDA (NVIDIA)

Com placa NVIDIA, só o primeiro comando muda, ativando o suporte no build:

cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

Um detalhe que confunde muita gente: essa flag apenas compila o suporte a CUDA, não liga o offload. O envio das camadas do modelo para a GPU acontece em tempo de execução, com a flag -ngl, tanto no llama-cli quanto no llama-server.

Baixando o modelo GGUF certo no Hugging Face

O caminho mais direto é deixar o próprio llama-cli baixar o modelo direto do Hugging Face com a flag -hf:

./build/bin/llama-cli -hf ggml-org/gemma-3-1b-it-GGUF

O exemplo puxa um Gemma 3 1B instruído, pequeno e suficiente para validar a instalação. Também é possível baixar o arquivo GGUF manualmente na página do modelo e apontá-lo com -m. Para conversar no terminal, o modo interativo de chat é ativado com -cnv:

./build/bin/llama-cli -m model.gguf -cnv

Com GPU, acrescente -ngl seguido do número de camadas que quer descarregar. Com -ngl 99, praticamente tudo vai para a placa e a diferença de velocidade é imediata.

Entendendo quantização: Q4_K_M, Q5_K_M, Q8_0 e quanto de RAM você precisa

Quantização é comprimir os pesos do modelo usando menos bits por número. Um modelo 7B em FP16 ocupa cerca de 14 GB; o mesmo modelo em Q4_K_M cabe em menos de um terço disso, com perda de qualidade pequena.

Os sufixos importam na escolha. O Q4_K_M guarda a maioria dos pesos em 4 bits e mantém as camadas mais sensíveis em 6 bits — daí o M. Já o Q8_0 é praticamente sem perda: cerca de 0,01 ponto de perplexidade a mais, menos de 0,5% de degradação frente ao FP16.

Antes de escolher, vale comparar tamanho e memória necessária. A tabela resume os valores aproximados para um modelo 7B:

QuantizaçãoTamanho aproximado (7B)Memória indicada
Q4_K_M~4,1 a 4,4 GB8 GB
Q5_K_M~5 GB12 GB
Q8_0~7,7 GB16 GB ou mais
F16~14 GBreferência sem quantização

Lembre que o contexto também consome memória além do modelo. Um 7B em Q4_K_M cabe em 8 GB, mas esticar o contexto demais estoura o orçamento de VRAM ou RAM.

Subindo o llama-server com API compatível com OpenAI

O llama-server transforma o llama.cpp em peça de infraestrutura. Ele expõe API compatível com a OpenAI em /v1/..., incluindo POST /v1/chat/completions, POST /v1/completions, POST /v1/embeddings, GET /v1/models e POST /v1/responses. Também expõe um endpoint compatível com a API da Anthropic em /v1/messages.

Um comando de partida, com autenticação opcional:

./build/bin/llama-server -m model.gguf -ngl 99 --api-key SUA_CHAVE

Com --api-key ativo, o cliente envia o header Authorization: Bearer SUA_CHAVE. Confirme o endereço e a porta exibidos no terminal ao iniciar o servidor. Por baixo dos panos, ele trabalha com batching contínuo, atende múltiplos usuários simultâneos e suporta modelos multimodais.

Testando com curl e conectando no n8n e outras ferramentas

Um teste rápido de chat completion com curl, ajustando o endereço conforme a saída do servidor:

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_CHAVE" \
  -d '{
    "model": "meu-modelo",
    "messages": [
      {"role": "user", "content": "Explique quantização em uma frase"}
    ]
  }'

O valor de model é o identificador do modelo carregado; você confere o nome em GET /v1/models. Para receber a resposta em streaming, inclua "stream": true no corpo da requisição.

Com o SDK Python da OpenAI, a mudança é mínima: troque o base_url pelo endereço local e use qualquer valor de api_key:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="sk-no-key-required"
)

resposta = client.chat.completions.create(
    model="meu-modelo",
    messages=[{"role": "user", "content": "Olá!"}]
)
print(resposta.choices[0].message.content)

No n8n, o espírito é o mesmo: crie uma credencial de OpenAI apontando o base URL para o seu servidor local e preencha a chave com qualquer valor. Como a API é compatível, os nós de chat de OpenAI conversam com o llama-server sem adaptação. Para detalhes de parâmetros e endpoints, a referência é o README do server no repositório oficial.

Na prática: como uso isso aqui

Já substituí Ollama e LM Studio pelo llama.cpp puro em fluxos reais de automação. Melhorou a performance, a estabilidade e o leque de configuração: contexto, MTP, parâmetros de execução e acesso a mais modelos. A troca fez sentido e não olhei para trás.

No dia a dia fico na Q4_K_M. Ela me dá a melhor performance sem consumir demais o hardware, que aqui é uma 5060 Ti com 16 GB. Daria para subir quantizações mais pesadas nessa placa, mas prefiro a velocidade e a folga.

O llama-server conectado no n8n como endpoint OpenAI me atende bem: não tive problemas nas implementações nem nas configurações. E o que me segura no uso local é mesmo a privacidade.

O uso local de modelos LLM me surpreende com a qualidade e os resultados, mas o mais importante é a privacidade dos dados.

Problemas comuns e dicas de desempenho (CPU, GPU e contexto)

  • make dá erro: o Makefile foi descontinuado e a própria mensagem de erro orienta usar CMake. Siga os comandos de build descritos acima.
  • Modelo lento mesmo com GPU: provavelmente faltou -ngl na execução. O offload é definido em runtime, não no momento do build.
  • Binário "sumiu": depois de compilar, tudo fica em build/bin/, não na raiz do projeto.
  • Queda de qualidade na Q4: se a aplicação exige precisão máxima e você tem 16 GB ou mais, considere Q6_K ou Q8_0.
  • Memória insuficiente: some o tamanho do modelo ao consumo do contexto antes de escolher a quantização.

Se o seu ambiente divergir em algum ponto — versão de CUDA, distribuição, flag específica —, consulte a documentação oficial: docs/build.md para compilação e tools/server/README.md para o servidor, ambos no repositório do projeto.

Conclusão

Compilar o llama.cpp do zero exige mais trabalho que instalar um aplicativo pronto, mas devolve controle: build sob medida, escolha fina de quantização e um servidor com API compatível com OpenAI pronto para alimentar automações. Para quem já roda n8n ou constrói integrações, é um upgrade natural da stack local. O fluxo completo — dependências, CMake, GGUF, quantização e llama-server — cabe em uma tarde e roda em hardware modesto.

Perguntas frequentes

Preciso de GPU para rodar o llama.cpp?

Não. O build padrão com cmake -B build roda em CPU. A GPU acelera bastante, mas o offload das camadas só acontece quando você usa a flag -ngl em runtime.

Qual quantização devo escolher?

A recomendação usual é Q4_K_M para GPUs ou RAM de 8 GB, Q5_K_M para 12 GB e Q6_K ou Q8_0 para 16 GB ou mais. Se a prioridade é velocidade com folga de memória, a Q4_K_M atende bem na maioria dos casos.

O llama-server funciona com ferramentas que esperam a API da OpenAI?

Sim. Ele expõe os endpoints em /v1/..., incluindo /v1/chat/completions, e ainda um endpoint compatível com a API da Anthropic em /v1/messages. Basta apontar o base URL da ferramenta para o endereço do seu servidor.

PUBLICIDADE
Este post foi útil para você?
🛒
Vai rodar IA no seu computador?

Modelos locais dependem da placa de vídeo: quanto mais VRAM, maiores os modelos e mais rápidas as respostas. Compare os preços de placas RTX na Amazon.

Ver preços na Amazon →
Como associado da Amazon, o blog ganha com compras qualificadas, sem custo extra para você.

Leitura recomendada

💬 Comentários

Nenhum comentário ainda. Conte o que achou, tire uma dúvida ou discorde. Seja o primeiro!

Deixe seu comentário
O e-mail não aparece. Serve só para avisar quando responderem você.
Os comentários passam por aprovação antes de aparecer. Crie uma conta de leitor e, depois do primeiro aprovado, os próximos saem na hora.
Apoie o ConexãoTC

O ConexãoTC é independente e gratuito. Se as notícias fazem parte do seu dia, contribua com qualquer valor pelo PIX e ajude a manter o blog no ar.

QR code PIX para apoiar o ConexãoTC
Aponte a câmera do app do banco
Favorecido: Jean Dgardany C. Lima, editor do ConexãoTC
🗳️ O que você quer ler aqui?

Marque os assuntos que te interessam. Os mais pedidos viram os próximos artigos.

Leitores cadastrados têm as sugestões atendidas primeiro e recebem um aviso quando o artigo sai.
Fique por dentro

Os destaques do dia no seu e-mail, todo dia às 8h.

PUBLICIDADE