We use cookies to understand how the site is used and to display ads. Analytics and advertising only run after you accept. You can change your choice anytime. Privacy policy

Skip to content
devvkit
$devvkit learn --librarie llama.cpp-guide

llama.cpp Guide

[llm][cpp][inference][quantization]
AI / LLM Tools
Install
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config Release
# Or one-liner:
# brew install llama.cpp

llama.cpp is the engine behind most local LLM tools. It supports 4-bit to 8-bit quantized GGUF models that run on CPU often faster than full-precision models on GPU. The project originated the GGUF format now used by Ollama, LM Studio, and GPT4All.

Key tools in the build: `main` (interactive chat), `server` (HTTP server with OpenAI-compatible API), `quantize` (convert models to lower precision), `perplexity` (benchmark), and `embedding` (text embeddings).

Quantization levels trade quality for speed: Q4_K_M is the sweet spot (4-bit, good quality). Q2_K is tiny but degraded. Q8_0 is near-lossless. Use `./quantize model.f16.gguf model.Q4_K_M.gguf Q4_K_M`. GUI: LM Studio (native app wrapping llama.cpp), Ollama (CLI wrapper), GPT4All.

Build & Setup

Build from source· Compile llama.cpp.
git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON    # NVIDIA GPU
cmake -B build -DGGML_METAL=ON   # Apple Silicon
cmake -B build -DGGML_CUDA=OFF -DGGML_METAL=OFF  # CPU only
cmake --build build --config Release -j 8
Download models via script· Grab popular models.
# Hugging Face GGUF models:
# https://huggingface.co/TheBloke

# Download script:
python -c "
import huggingface_hub
huggingface_hub.hf_hub_download(
    repo_id='TheBloke/Llama-2-7B-GGUF',
    filename='llama-2-7b.Q4_K_M.gguf',
    local_dir='./models'
)
"

Inference

Interactive chat· Chat with a model.
./build/bin/main -m models/llama-2-7b.Q4_K_M.gguf \
  --color -n 512 -ngl 999 \
  -p "Building a website with Node.js:\n"
# -n: max tokens, -ngl: GPU layers (999 = all), -p: prompt

# Interactive mode:
./build/bin/main -m model.gguf --color -i -r "User:"
Embedding generation· Get text embeddings.
./build/bin/embedding -m model.gguf -p "Hello world"
# Outputs: list of floats (embedding vector)

# Batch embed from file:
./build/bin/embedding -m model.gguf -f sentences.txt

Server Mode

HTTP server· OpenAI-compatible API.
./build/bin/server -m models/llama-2-7b.Q4_K_M.gguf \
  --port 8080 -ngl 999 --host 0.0.0.0

# Test:
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"Hello"}],"stream":true}'

Quantization

Quantize model· Convert to smaller format.
# Convert to FP16 first, then quantize:
python convert.py model.gguf --outtype f16

# Quantize:
./build/bin/quantize model.f16.gguf model.Q4_K_M.gguf Q4_K_M
./build/bin/quantize model.f16.gguf model.Q8_0.gguf Q8_0
./build/bin/quantize model.f16.gguf model.Q2_K.gguf Q2_K

# All quantization types:
./build/bin/quantize --help

Benchmark

Perplexity benchmark· Measure model quality.
./build/bin/perplexity -m model.gguf -f wiki.test.raw
# Lower perplexity = better model

# Speed test:
./build/bin/main -m model.gguf -p "Hello" -n 256 -t 8 --no-display-prompt
# t: threads: depends on CPU cores
# Watch: tokens/second in output