Início Rápido do llama.cpp com CLI e Servidor

Como instalar, configurar e usar o OpenCode

Conteúdo da página

Volto constantemente ao llama.cpp para inferência local – ele oferece um controle que o Ollama e outros abstraem, e simplesmente funciona. É fácil executar modelos GGUF de forma interativa com o llama-cli ou expor uma API HTTP compatível com OpenAI com o llama-server.

Se você ainda está decidindo entre abordagens locais, autohospedadas e em nuvem, comece com o guia pilar LLM Hosting in 2026: Local, Self-Hosted & Cloud Infrastructure Compared.

Por que llama.cpp em 2026

llama.cpp é um mecanismo de inferência leve com uma inclinação para:

  • portabilidade entre CPUs e múltiplos backends de GPU,
  • latência previsível em uma única máquina,
  • flexibilidade de implantação, desde laptops até nós on-premise.

Ele brilha quando você quer privacidade e operação offline, quando precisa de controle determinístico sobre as flags de tempo de execução ou quando deseja incorporar a inferência em um sistema maior sem executar uma pilha pesada em Python.

Também é útil entender o llama.cpp, mesmo que você escolha posteriormente um tempo de execução de servidor com maior throughput. Por exemplo, se seu objetivo é o máximo de throughput de serviço em GPUs, você também pode querer compará-lo com o vLLM usando: vLLM Quickstart: High-Performance LLM Serving e você pode realizar benchmarks das escolhas de ferramentas em: Ollama vs vLLM vs LM Studio: Best Way to Run LLMs Locally in 2026?.

Llama estilizado com terminais Apple

Instalando llama.cpp no Windows, macOS e Linux

Há três caminhos práticos de instalação, dependendo se você quer conveniência, portabilidade ou desempenho máximo.

Instalar via gerenciadores de pacotes

Esta é a opção mais rápida para “fazer rodar”.

# macOS ou Linux
brew install llama.cpp
# Windows
winget install llama.cpp
# macOS (MacPorts)
sudo port install llama.cpp
# macOS ou Linux (Nix)
nix profile install nixpkgs#llama-cpp

Dica: após a instalação, verifique se as ferramentas existem:

llama-cli --version
llama-server --version

Instalar via binários pré-compilados

Se você quer uma instalação limpa sem compiladores, use os binários pré-compilados oficiais publicados nas releases do llama.cpp no GitHub. Eles geralmente cobrem múltiplos sistemas operacionais e backends (variantes apenas CPU e habilitadas para GPU).

Um fluxo de trabalho comum:

# 1) Baixe o arquivo correto para seu SO e backend
# 2) Extraia-o
# 3) Execute a partir da pasta extraída

./llama-cli --help
./llama-server --help

Compilar a partir do código-fonte para o seu hardware exato

Se você se preocupa em extrair o melhor desempenho do seu backend CPU/GPU, compile a partir do código-fonte com CMake.

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

# Compilação CPU
cmake -B build
cmake --build build --config Release

Após a compilação, os binários geralmente estão aqui:

ls -la ./build/bin/

Compilações de GPU em um comando

Habilite o backend que corresponda ao seu hardware (exemplos mostrados para CUDA e Vulkan):

# NVIDIA CUDA
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release
# Vulkan
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release

Ubuntu 24.04 + GPU NVIDIA: walkthrough completo de compilação

No Ubuntu 24.04 com uma GPU NVIDIA, você precisa do toolkit CUDA e OpenSSL antes de compilar. Aqui está uma sequência testada:

1. Instalar CUDA toolkit 13.1

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/13.1.1/local_installers/cuda-repo-ubuntu2404-13-1-local_13.1.1-590.48.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-13-1-local_13.1.1-590.48.01-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-13-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-13-1

2. Adicionar CUDA ao seu ambiente (anexar a ~/.bashrc):

# cuda toolkit
export PATH=/usr/local/cuda-13.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-13.1/lib64:$LD_LIBRARY_PATH

Depois, execute source ~/.bashrc ou abra um novo terminal.

3. Instalar os cabeçalhos de desenvolvimento OpenSSL (necessário para uma compilação limpa):

sudo apt update
sudo apt install libssl-dev

4. Compilar llama.cpp (a partir do diretório contendo seu clone llama.cpp, com CUDA habilitado):

cmake llama.cpp -B llama.cpp/build -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-mtmd-cli llama-server llama-gguf-split llama-embedding
cp llama.cpp/build/bin/llama-* llama.cpp

Isso produz llama-cli, llama-mtmd-cli, llama-server, llama-embedding e llama-gguf-split no diretório llama.cpp.

Você também pode compilar múltiplos backends e escolher dispositivos em tempo de execução. Isso é útil se você implantar a mesma compilação em máquinas heterogêneas.

Escolha um modelo GGUF e uma quantização

Para executar inferência, você precisa de um arquivo de modelo GGUF (*.gguf). GGUF é um formato de arquivo único que agrupa pesos do modelo mais metadados padronizados necessários por mecanismos como llama.cpp.

Duas maneiras de obter um modelo

Opção A: Usar um arquivo GGUF local

Baixe ou copie um GGUF para ./models/:

mkdir -p models
# Coloque seu GGUF em models/my-model.gguf

Depois, execute-o pelo caminho:

llama-cli -m models/my-model.gguf -p "Olá! Explique o que é o llama.cpp." -n 128

Opção B: Deixar o llama.cpp baixar do Hugging Face

Compilações modernas do llama.cpp podem baixar do Hugging Face e manter os arquivos em um cache local. Isso é frequentemente o fluxo de trabalho mais fácil para experimentos rápidos.

# Baixe um modelo do HF e execute um prompt
llama-cli \
  --hf-repo ggml-org/tiny-llamas \
  --hf-file stories15M-q4_0.gguf \
  -p "Era uma vez," \
  -n 200

Você também pode especificar a quantização no seletor de repositório e deixar a ferramenta selecionar um arquivo correspondente:

llama-cli \
  --hf-repo unsloth/phi-4-GGUF:q4_k_m \
  -p "Resuma o conceito de quantização em um parágrafo." \
  -n 160

Se você precisar de um fluxo de trabalho totalmente offline posteriormente, --offline força o uso do cache e impede o acesso à rede.

Escolha de quantização para inferência local

A quantização é a resposta prática à pergunta “Qual quantização GGUF você deve escolher para inferência local” porque ela troca diretamente qualidade, tamanho do modelo e velocidade.

Um ponto de partida pragmático:

  • comece com uma variante Q4 ou Q5 para máquinas focadas em CPU,
  • mova-se para precisão maior (ou quantização menos agressiva) quando puder pagar pela RAM ou VRAM,
  • quando o modelo “parece burro” para sua tarefa, a correção geralmente é ou um modelo melhor ou uma quantização menos agressiva, não apenas ajustes de amostragem.

Também lembre-se que a janela de contexto importa: tamanhos de contexto maiores aumentam o uso de memória (às vezes dramaticamente), mesmo quando o próprio arquivo GGUF cabe.

Início rápido do llama-cli e parâmetros-chave

llama-cli é a maneira mais rápida de validar que seu modelo carrega, seu backend funciona e seus prompts se comportam.

Execução mínima

llama-cli \
  -m models/my-model.gguf \
  -p "Escreva uma breve comparação TCP vs UDP." \
  -n 200

Execução de chat interativo

O modo de conversa é projetado para templates de chat. Ele geralmente habilita comportamento interativo e formata prompts de acordo com o template do modelo.

llama-cli \
  -m models/my-model.gguf \
  --conversation \
  --system-prompt "Você é um assistente de engenharia de sistemas conciso." \
  --ctx-size 4096

Para encerrar a geração quando o modelo imprimir uma sequência específica, use um prompt inverso. Isso é especialmente útil no modo interativo.

Principais flags do llama-cli que importam

Em vez de memorizar 200 flags, foque nas que dominam correção, latência e memória.

Modelo e download

Objetivo Flags Quando usar
Carregar um arquivo local -m, --model Você já tem *.gguf
Baixar do Hugging Face --hf-repo, --hf-file, --hf-token Experimentos rápidos, cache automatizado
Forçar cache offline --offline Execuições airgapped ou reproduzíveis

Contexto e throughput

Objetivo Flags Nota prática
Aumentar ou reduzir contexto -c, --ctx-size Contextos maiores custam mais RAM ou VRAM
Melhorar processamento de prompts -b, --batch-size e -ub, --ubatch-size Tamanhos de lote afetam velocidade e memória
Ajustar paralelismo da CPU -t, --threads e -tb, --threads-batch Combine com seus núcleos de CPU e largura de banda de memória

Descarregamento de GPU e seleção de hardware

Objetivo Flags Nota prática
Listar dispositivos disponíveis --list-devices Útil quando múltiplos backends são compilados
Escolher dispositivos --device Habilita escolhas híbridas de CPU e GPU
Descarregar camadas -ngl, --n-gpu-layers Um dos maiores alavancas de velocidade
Lógica Multi-GPU --split-mode, --tensor-split, --main-gpu Útil para hosts multi-GPU ou VRAM desequilibrada

Amostragem e qualidade de saída

Objetivo Flags Bons valores padrão para começar
Criatividade --temp 0.2 a 0.9 dependendo da tarefa
Amostragem de núcleo (Nucleus) --top-p 0.9 a 0.98 comum
Corte de token --top-k 40 é uma base clássica
Reduzir repetição --repeat-penalty e --repeat-last-n Especialmente útil para modelos pequenos

Cargas de trabalho de exemplo com llama-cli

Resumir um arquivo, não apenas um prompt

llama-cli \
  -m models/my-model.gguf \
  --system-prompt "Você resume documentos técnicos. Saída máxima de cinco tópicos." \
  --file ./docs/incident-report.txt \
  -n 300

Tornar os resultados mais reproduzíveis

Quando você está depurando prompts, fixe a semente e reduza aleatoriedade:

llama-cli \
  -m models/my-model.gguf \
  -p "Extraia riscos chave desta nota de design." \
  -n 200 \
  --seed 42 \
  --temp 0.2

Início rápido do llama-server com API compatível com OpenAI

llama-server é um servidor HTTP integrado que pode expor:

  • endpoints compatíveis com OpenAI para chat, completions, embeddings e respostas,
  • uma interface Web para testes interativos,
  • endpoints de monitoramento opcionais para visibilidade em produção.

Iniciar um servidor com um modelo local

llama-server \
  -m models/my-model.gguf \
  -c 4096

Por padrão, ele escuta em 127.0.0.1:8080.

Para vincular externamente (por exemplo, dentro de Docker ou uma LAN), especifique o host e a porta:

llama-server \
  -m models/my-model.gguf \
  -c 4096 \
  --host 0.0.0.0 \
  --port 8080

Flags de servidor opcionais, mas importantes

Objetivo Flags Por que importa
Concorrência --parallel Controla slots do servidor para requisições paralelas
Melhor throughput sob carga --cont-batching Habilita batching contínuo
Bloquear acesso --api-key ou --api-key-file Autenticação para requisições de API
Habilitar métricas Prometheus --metrics Necessário para expor /metrics
Reduzir risco de reprocessamento de prompt --cache-prompt Comportamento de cache de prompt para latência

Se você executa em contêineres, muitas configurações também podem ser controladas através de variáveis de ambiente LLAMA_ARG_*.

Chamadas de API de exemplo

Completions de chat com curl

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer no-key" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      { "role": "system", "content": "Você é um assistente prestativo." },
      { "role": "user", "content": "Dê-me uma lista de verificação rápida do llama.cpp." }
    ],
    "temperature": 0.7
  }'

Dica para implantações reais: se você definir --api-key, pode enviá-lo via cabeçalho x-api-key (ou continuar usando cabeçalhos Authorization, dependendo do seu gateway).

Cliente Python OpenAI apontando para llama-server

Com um servidor compatível com OpenAI, muitos clientes podem funcionar alterando apenas base_url.

import openai

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

resp = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "Você é um assistente conciso."},
        {"role": "user", "content": "Explique threads vs tamanho de lote no llama.cpp."},
    ],
)

print(resp.choices[0].message.content)

Embeddings

Embeddings compatíveis com OpenAI são expostos em /v1/embeddings, mas o modelo deve suportar um modo de pooling de embedding que não seja none.

curl http://localhost:8080/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer no-key" \
  -d '{
    "input": ["hello", "world"],
    "model": "GPT-4",
    "encoding_format": "float"
  }'

Se você executar um modelo de embedding dedicado, considere iniciar o servidor no modo apenas embeddings:

llama-server \
  -m models/Qwen3-Embedding-0.6B-Q8_0.gguf \
  --embeddings \
  --host 127.0.0.1 \
  --pooling last \
  --port 8080

ou se você quiser executar o llama-cpp com modelo de embedding na CPU:

CUDA_VISIBLE_DEVICES="" llama-server \
  -m models/Qwen3-Embedding-0.6B-Q8_0.gguf \
  --embeddings \
  --host 127.0.0.1 \
  --pooling last \
  --port 8080

tente assim:

CUDA_VISIBLE_DEVICES="" llama-embedding \
  -m /path/to/Qwen3-Embedding-0.6B-Q8_0.gguf \
  -p "seu texto aqui" \
  --pooling last \
  --verbose-prompt

Servindo múltiplos modelos de um único processo

Os exemplos acima vinculam llama-server a um único modelo na inicialização. Se você precisar alternar entre modelos por requisição — sem reiniciar o processo — é para isso que o modo roteador serve. Veja llama-server router mode: dynamic model switching without restarts.

Desempenho, monitoramento e endurecimento para produção

A pergunta de FAQ “Quais opções de linha de comando do llama.cpp importam mais para velocidade e memória” torna-se muito mais fácil quando você trata a inferência como um sistema:

  • Teto de memória geralmente é a primeira restrição (RAM na CPU, VRAM na GPU).
  • Tamanho de contexto é um multiplicador de memória importante.
  • Descarregamento de camadas de GPU é frequentemente o caminho mais rápido para mais tokens por segundo.
  • Tamanhos de lote e threads podem melhorar o throughput, mas também podem aumentar a pressão de memória.

Para uma visão mais profunda, voltada para engenharia, veja: LLM Performance in 2026: Benchmarks, Bottlenecks & Optimization.

Se você quer resultados no estilo llama-cli medidos em uma GPU de classe 16 GB — tokens por segundo, VRAM e carga de GPU enquanto varre o contexto (19K / 32K / 64K) em GGUFs densos e MoE — veja 16 GB VRAM LLM benchmarks with llama.cpp (speed and context).

Monitorando llama-server com Prometheus e Grafana

llama-server pode expor métricas compatíveis com Prometheus em /metrics quando --metrics está habilitado. Isso combina naturalmente com configs de scrape Prometheus e dashboards do Grafana.

Para dashboards e alertas específicos para llama.cpp (e vLLM, TGI): Monitor LLM Inference in Production (2026): Prometheus & Grafana for vLLM, TGI, llama.cpp. Guias mais amplos: Observability: Monitoring, Metrics, Prometheus & Grafana Guide e Observability for LLM Systems.

Checklist básico de endurecimento

Quando seu llama-server está acessível além do localhost:

  • use --api-key (ou --api-key-file) para que as requisições sejam autenticadas,
  • evite vincular a 0.0.0.0 a menos que precise,
  • considere TLS via flags SSL do servidor ou termine TLS em um proxy reverso,
  • restrinja concorrência com --parallel para proteger a latência sob carga.

Soluções rápidas de problemas

O modelo carrega, mas as respostas são estranhas no chat

Endpoints de chat são melhores quando o modelo tem um template de chat suportado. Se as saídas parecerem não estruturadas, tente:

  • usar llama-cli --conversation mais um --system-prompt explícito,
  • verificar se seu modelo é uma variante de instrução ou ajustada para chat,
  • testar usando a interface Web do servidor antes de conectá-lo a um app.

Você atingiu limite de memória (out of memory)

Reduza o contexto ou escolha uma quantização menor:

  • diminua --ctx-size,
  • reduza --n-gpu-layers se VRAM for o problema,
  • mude para um modelo menor ou uma quantização mais comprimida.

É lento na CPU

Comece com:

  • --threads igual aos seus núcleos físicos,
  • tamanhos de lote moderados,
  • validando que você instalou uma compilação que corresponde à sua máquina (recursos de CPU e backend).

Referências

Assinar

Receba novos artigos sobre sistemas, infraestrutura e engenharia de IA.