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

Como instalar, configurar e usar o OpenCode

Conteúdo da página

Continuo voltando 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 interativamente com llama-cli ou expor uma API HTTP compatível com a OpenAI com llama-server.

Se você ainda está decidindo entre abordagens locais, auto-hospedadas e em nuvem, comece pelo guia principal: LLM Hosting in 2026: Local, Self-Hosted & Cloud Infrastructure Compared.

Por que usar llama.cpp em 2026

llama.cpp é um motor de inferência leve com viés 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-premises.

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

Também é útil entender llama.cpp, mesmo que você opte mais tarde por um runtime 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 comparar as escolhas de ferramentas em: Ollama vs vLLM vs LM Studio: Best Way to Run LLMs Locally in 2026?.

Llama estilizada com terminais de maçã

Instalar llama.cpp no Windows, macOS e Linux

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

Instalação via gerenciadores de pacotes

Esta é a opção mais rápida para “colocar em funcionamento”.

# 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

Instalação via binários pré-compilados

Se você deseja uma instalação limpa sem compiladores, use os binários pré-compilados oficiais publicados nos lançamentos do GitHub do llama.cpp. Eles geralmente cobrem vários alvos de sistema operacional e vários backends (variantes apenas de 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 do código-fonte para seu hardware exato

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

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

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

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

ls -la ./build/bin/

Compilações de GPU em um único comando

Ative o backend que corresponde 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: guia completo de compilação

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

1. Instalar o 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 o CUDA ao seu ambiente (anexar ao ~/.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

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

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

sudo apt update
sudo apt install libssl-dev

4. Compilar o llama.cpp (a partir do diretório contendo o clone do seu 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 os 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 motores 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

Em seguida, execute-o por caminho:

llama-cli -m models/my-model.gguf -p "Hello! Explain what llama.cpp is." -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. Esta é frequentemente a workflow 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 "Once upon a time," \
  -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 "Summarize the concept of quantization in one paragraph." \
  -n 160

Se você precisar de um fluxo de trabalho totalmente offline mais tarde, --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”, pois 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 priorizadas em CPU,
  • passe para maior precisão (ou quantização menos agressiva) quando puder arcar com a RAM ou VRAM,
  • quando o modelo “parece burro” para sua tarefa, a correção geralmente é um modelo melhor ou uma quantização menos agressiva, não apenas ajustes de amostragem.

Lembre-se também que o tamanho da 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 se seu modelo carrega, seu backend funciona e seus prompts se comportam.

Execução mínima

llama-cli \
  -m models/my-model.gguf \
  -p "Write a short TCP vs UDP comparison." \
  -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 "You are a concise systems engineering assistant." \
  --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, concentre-se naquelas 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 Ambientes airgapped ou execuções 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 prompt -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 os núcleos da sua CPU e largura de banda de memória

Offload de GPU e seleção de hardware

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

Amostragem e qualidade de saída

Objetivo Flags Boas configurações padrão para começar
Criatividade --temp 0.2 a 0.9 dependendo da tarefa
Amostragem de núcleo --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 "You summarize technical documents. Output five bullets max." \
  --file ./docs/incident-report.txt \
  -n 300

Tornar os resultados mais reproduzíveis

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

llama-cli \
  -m models/my-model.gguf \
  -p "Extract key risks from this design note." \
  -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, conclusões, 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 do Docker ou em uma LAN), especifique host e porta:

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

Flags do servidor opcionais, mas importantes

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

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

Chamadas de API de exemplo

Conclusões 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": "You are a helpful assistant." },
      { "role": "user", "content": "Give me a quick llama.cpp checklist." }
    ],
    "temperature": 0.7
  }'

Dica para implantações reais: se você definir --api-key, poderá enviá-lo via cabeçalho x-api-key (ou continuar usando cabeçalhos Authorization, dependendo de 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": "You are a concise assistant."},
        {"role": "user", "content": "Explain threads vs batch size in 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 de 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 o 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 "your text here" \
  --pooling last \
  --verbose-prompt

Servir múltiplos modelos a partir de um processo

Os exemplos acima vinculam llama-server a um único modelo na inicialização. Se você precisar alternar entre modelos em uma base por solicitação — sem reiniciar o processo — é para isso que serve o modo roteador. Veja llama-server router mode: dynamic model switching without restarts. Para um fluxo de descarga de todos os modelos que libera VRAM sem reiniciar o roteador, veja Unload All llama.cpp Router Models Without Restarting.

Desempenho, monitoramento e endurecimento para produção

A pergunta frequente “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:

  • O teto de memória geralmente é a primeira restrição (RAM na CPU, VRAM na GPU).
  • O tamanho do contexto é um multiplicador de memória significativo.
  • Offload 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 na memória.

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

Se você deseja resultados medidos estilo llama-cli em uma GPU de classe 16 GB — tokens por segundo, VRAM e carga da 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).

Para o Qwen 3.6 especificamente, o llama.cpp agora suporta decodificação especulativa de Previsão de Múltiplos Tokens (MTP) integrada que pode aumentar significativamente o throughput de geração. Veja Qwen 3.6 27B and 35B MTP vs Standard on 16GB GPU para velocidades de geração medidas, overhead de VRAM e valores recomendados de --spec-draft-n-max.

Monitoramento do 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 coleta do Prometheus e painéis do Grafana.

Para painéis e alertas específicos do 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.

Lista básica de endurecimento

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

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

Solução de problemas rápida

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

Os endpoints de chat são melhores quando o modelo tem um template de chat suportado. Se as saídas parecerem desestruturadas, 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 aplicativo.

Você atingiu o limite de memória

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

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

Está lento na CPU

Comece com:

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

Referências

Assinar

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