Wróć do bloga

llama.cpp vs Ollama: co wybrać w 2026?

10 września 2026

Czyste llama.cpp, jeśli chcesz maksymalnych tokenów na sekundę i pełnej kontroli; Ollama, jeśli chcesz instalacji jedną komendą i serwera API działającego od razu. Ollama nie jest konkurencyjnym silnikiem — to usługa w Go, która pakuje llama.cpp jako backend inferencji, dokłada zarządzanie modelami (ollama pull llama3.1) i serwuje REST API na porcie 11434. Prawdziwe pytanie brzmi więc nie „który silnik jest szybszy”, tylko „ile kontroli chcesz nad pokrętłami tego silnika”. Ponieważ Ollama wysyła konserwatywne domyślne ustawienia (kwantyzacja Q4_K_M, skromny kontekst, do niedawna brak flash attention), ten sam sprzęt potrafi dać zauważalnie różne wyniki. Niżej: co faktycznie się różni, skąd bierze się luka w szybkości, ten sam model w obu i tabela decyzyjna.

Jaka jest różnica między llama.cpp a Ollamą?

llama.cpp to silnik inferencji: pojedynczy projekt w C/C++ od Georgi Gerganova, twórcy formatu GGUF, który odpala skwantyzowane modele na CPU, GPU albo w mikście obu. Daje ci llama-cli do pojedynczych promptów i llama-server — serwer HTTP zgodny z OpenAI — plus każdą flagę strojenia, jaką silnik ma: zrzucanie warstw na GPU, kwantyzację KV-cache, speculative decoding, własne samplery.

Ollama to produkt nałożony na ten silnik. Forkuje i vendoryzuje llama.cpp, a potem obudowuje go w:

  • rejestr modeli (ollama pull, ollama list) z automatycznym dzieleniem wag GGUF,
  • system Modelfile (spec w stylu Dockerfile dla szablonów promptów i parametrów),
  • demona w tle, który trzyma modele ciepłe w VRAM i wystawia własne REST API,
  • automatyczne wykrywanie sprzętu z bezpiecznymi domyślnymi ustawieniami.

Praktyczna konsekwencja: w Ollamie zarządzasz modelami, w llama.cpp — inferencją. Jeśli kiedykolwiek chciałeś zmienić format kwantyzacji, skwantyzować KV cache, podnieść kontekst ponad domyślny albo przypiąć konkretne warstwy do GPU — to teren llama.cpp. Ollama większość tych pokręteł chowa. Celowo.

llama.cppOllama
Co to jestSilnik inferencji (C/C++)Usługa obudowująca llama.cpp
InstalacjaBuild ze źródeł albo pakietInstalator jedna-linijka, pojedynczy plik binarny
Odpalenie modelullama-cli -m model.gguf + flagiollama run llama3.1
APIZgodne z OpenAI (llama-server)Własne REST + endpoint zgodny z OpenAI
Zarządzanie modelamiGGUF-y pobierasz samRejestr: pull/list/rm
Domyślne ustawieniaWszystko wybierasz samBezpieczne: Q4_K_M, skromny kontekst
Aktualizacje silnikaOd dnia zero (upstream)Zostają w tyle za wydaniami upstream
Głębokość strojeniaPełna (kwant KV, spec decode, samplery)Ograniczony passthrough
Najlepsze dlaPraca nad wydajnością, serwery, edgeSzybki start, laptopy deweloperskie

Czy llama.cpp jest szybsze od Ollamy?

Na tym samym pliku GGUF, tej samej kwantyzacji, tym samym kontekście i tej samej wersji llama.cpp — nie, oba mieszczą się w granicach szumu, bo Ollama to jest llama.cpp liczące matmę. Każdy benchmark w stylu „Ollama jest o 30% wolniejsza”, jaki widzisz, jest w istocie porównaniem domyślnych ustawień. Luka bierze się z trzech miejsc:

  1. Wybór kwantyzacji. Rejestr Ollamy domyślnie serwuje Q4_K_M. Odpal ten sam model jako Q5_K_M albo Q6_K z llama.cpp, a dostaniesz lepszą jakość na token przy podobnej szybkości — albo wybierz Q4_0/IQ4 dla czystej szybkości.
  2. Flash attention i kwantyzacja KV-cache. --flash-attn plus -ctk q8_0 -ctv q8_0 mocno ściska KV cache, co podnosi tokeny/sekundę przy długim kontekście i pozwala zmieścić większe konteksty w tym samym VRAM-ie. Ollama wystawia to tylko częściowo.
  3. Zaległość wersji. llama.cpp dostarcza optymalizacje kerneli co tydzień; Ollama merdżuje upstream na własny harmonogram. Świeży build llama.cpp bywa mierzalnie szybszy od wielomiesięcznego binara Ollamy na tej samej maszynie — dopóki Ollama nie dogoni.

Szybka komenda do benchmarku, niezależna od silnika — raportuje szybkość ewaluacji promptu i generowania:

./build/bin/llama-bench -m Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99 -fa 1

Odpal ją na pliku modelu Ollamy (~/.ollama/models/blobs/..., przemianowanym na .gguf), a zwykle dokładnie powtórzysz wyniki Ollamy — a potem je pobijesz, dokładając -ctk q8_0 przy kontekście 16k.

Jak odpalić ten sam model w obu?

Oba jedzą GGUF. Minimalna ścieżka end-to-end dla każdego:

# --- ścieżka Ollamy: instalacja, pull, serwer ---
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b        # pobiera Q4_K_M, ładuje do VRAM, otwiera czat

# jej API, w wariancie zgodnym z OpenAI:
curl -s http://localhost:11434/v1/chat/completions -d '{
  "model": "llama3.1:8b",
  "messages": [{"role": "user", "content": "Say hi in 5 words"}]
}'
# --- ścieżka llama.cpp: build, pobranie GGUF, serwer ---
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON    # albo -DGGML_VULKAN=ON / -DGGML_HIP=ON
cmake --build build --config Release -j

huggingface-cli download bartowski/Meta-Llama-3.1-8B-Instruct-GGUF 
  Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf --local-dir models

./build/bin/llama-server -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf 
  -ngl 99 --ctx-size 16384 --flash-attn -ctk q8_0 -ctv q8_0 --port 8080

llama-server wystawia schemat OpenAI Chat Completions, więc ten sam curl pod http://localhost:8080/v1/chat/completions działa bez zmian. Każde narzędzie zbudowane pod API OpenAI — skrypty, edytory, pipeline’y RAG — może celować w oba. Prawdziwą robotę robią flagi: -ngl 99 zrzuca każdą warstwę na GPU, a --flash-attn z parą -ctk/-ctv mieści kontekst 16k w karcie 8 GB, której domyślne ustawienia Ollamy by nie udźwignęły.

Jeśli chodzi o wybór samego pliku GGUF i znaczenie etykiet kwantów — patrz jak uruchamiać modele GGUF lokalnie.

Kiedy Ollama ma większy sens?

Większość ludzi powinna zacząć od Ollamy — i to nie jest nagroda pocieszenia:

  • Chcesz, żeby działało dziś wieczorem. Jedna komenda, model pobrany, API stoi. llama.cpp oznacza wybór backendu (CUDA/Vulkan/HIP/Metal), budowę i ręczne ściąganie wag.
  • Żonglujesz wieloma modelami. Rejestr, automatyczne wyładowywanie i Modelfile wygrywają z ręcznym zarządzaniem katalogami GGUF-ów.
  • Twoja maszyna jest skromna. Domyślne Ollamy są konserwatywne nie bez powodu — prawie zawsze się mieszczą i działają.
  • Chcesz stabilnej powierzchni API. Demon Ollamy ogarnia cykl życia modeli, więc długodystansowa usługa nie musi.

Wybierz czyste llama.cpp, gdy robisz benchmarki, serwujesz w jakiejkolwiek skali, odpalasz na telefonie czy Raspberry Pi, potrzebujesz długiego kontekstu na małym VRAM-ie albo chcesz feature w dniu, w którym wyląduje upstream. Zaawansowani często trzymają oba: Ollama do codziennych modeli, przypięty build llama.cpp do tego jednego zadania, które potrzebuje ostatnich 20%.

Jeśli twoje porównanie to naprawdę desktopowe aplikacje z GUI, to inna oś — patrz Ollama vs LM Studio; a o wyborze modelu do zadania pisze najlepsze lokalne LLM-y do kodowania.

Które wybrać?

Decyduj kontrolą, nie szybkością. Silniki są te same; domyślne nie. Zainstaluj Ollamę, jeśli celem brzmi „działa i serwuje API” — tracisz kilka pokręteł, których i tak nie kręciłbyś. Zbuduj llama.cpp, jeśli celem są tokeny/sekundę, długość kontekstu albo kontrola kwantyzacji — dostajesz każde pokrętło w cenie samodzielnego zarządzania modelami. W obu przypadkach kręcisz te same pliki GGUF, a późniejsza przesiadka kosztuje popołudnie, nie przepisywanie wszystkiego.

— mrsaynothing

Get the next one by email

One email per post. No spam, no algorithms.

self-hosted · no third parties · one-click unsubscribe

what is this?

Git: jak bezpiecznie usunąć nieśledzone pliki (git clean)

Podobają się teksty? Tak buduję zawodowo. zatrudnij mnie