🦙 llama.cpp — Documentação para Obsidian

📌 Introdução

llama.cpp é um repositório open-source que implementa inferência de grandes modelos de linguagem (LLMs) em C/C++, com mínima dependência externa, permitindo executar modelos localmente em hardware comum (CPU, GPU e dispositivos móveis). O foco é desempenho, portabilidade e simplicidade de build.

Projeto mantido pela organização ggml-org, amplamente utilizado para rodar modelos como LLaMA, Mistral, Falcon e outros em formato compatível (especialmente GGUF).


🗂️ Visão Geral do Repositório

  • Nome: llama.cpp
  • Organização: ggml-org
  • Linguagem: C / C++
  • Licença: MIT
  • Objetivo: Inferência local eficiente de LLMs

🚀 Objetivos e Características

🎯 Propósito

  • Rodar LLMs sem dependência de frameworks pesados
  • Possibilitar uso local e offline
  • Explorar otimizações de baixo nível para CPU e GPU
  • Servir como referência e laboratório para a biblioteca GGML

⚙️ Características Principais

  • Implementação direta em C/C++
  • Alto foco em quantização (4-bit, 5-bit, 8-bit, etc.)
  • Baixo consumo de memória
  • Suporte a múltiplas arquiteturas de hardware
  • Ferramentas CLI e servidor HTTP embutido
  • Comunidade ativa e evolução constante

📦 Estrutura do Repositório

Principais diretórios e arquivos:

  • src/ — Código principal de inferência
  • include/ — Headers públicos
  • docs/ — Documentação de build, instalação e uso
  • examples/ — Exemplos de uso
  • tools/ — Ferramentas auxiliares (inclui servidor HTTP)
  • models/ — Scripts e utilitários relacionados a modelos
  • CMakeLists.txt — Build com CMake
  • Makefile — Build simplificado

🛠️ Build e Instalação

Requisitos Básicos

  • Compilador C/C++ moderno (gcc, clang, MSVC)
  • CMake (recomendado)
  • Opcionalmente suporte a CUDA, Metal, Vulkan etc.

Build Básico

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake ..
cmake --build . --config Release

Há também suporte a build via make, conforme descrito na documentação oficial.


🧠 Modelos Suportados

llama.cpp não treina modelos — apenas executa inferência.
Os modelos devem estar em formatos compatíveis, principalmente:

  • GGUF (formato atual e recomendado)
  • Modelos convertidos a partir de Hugging Face

Modelos populares:

  • LLaMA / LLaMA-2 / LLaMA-3
  • Mistral
  • Falcon
  • Qwen
  • Phi

⚡ Quantização

Um dos pilares do projeto é a quantização:

  • Reduz uso de memória drasticamente
  • Permite rodar modelos grandes em máquinas modestas
  • Tipos comuns: Q2, Q3, Q4, Q5, Q8

Trade-off clássico:

Menor precisão → menor uso de RAM → maior velocidade


🖥️ Backends e Hardware

CPU

  • x86 (AVX, AVX2, AVX-512)
  • ARM (NEON)
  • Apple Silicon

GPU / Aceleração

Suporte opcional a:

  • CUDA (NVIDIA)
  • HIP (AMD)
  • Metal (macOS / iOS)
  • Vulkan
  • OpenCL
  • SYCL

A ativação depende de flags de build.


🌐 Servidor HTTP Integrado

O projeto inclui um servidor HTTP leve (llama-server) que:

  • Expõe endpoints REST para inferência
  • Permite uso via navegador ou integração com apps
  • Pode ser usado como backend local para interfaces web

Exemplo de uso:

./llama-server -m modelo.gguf

🧩 Integração com GGML

Internamente, llama.cpp utiliza a biblioteca GGML, responsável por:

  • Operações de tensor
  • Alocação eficiente de memória
  • Execução de grafos computacionais

llama.cpp é, na prática, uma aplicação de referência sobre GGML.


⚠️ Limitações Conhecidas

  • Não realiza treinamento ou fine-tuning completo
  • Documentação avançada muitas vezes está em issues/discussions
  • Quebras ocasionais de compatibilidade em builds antigos
  • Dependência de conversão correta de modelos

📚 Referências