Akademia · Lokalne modele

Lokalny LLM w firmie: llama-server od podstaw.

Jeśli szukasz maksymalnej wydajności, elastyczności i prawdziwej współbieżności na własnym sprzęcie, odpowiedzią jest llama-server z projektu llama.cpp. Poniżej kompilacja, modele GGUF, flagi uruchomienia i dostęp przez API zgodne z OpenAI.

Ostatnia aktualizacja:

Domowy rack serwerowy z GPU i figurką lamy na obudowie
Continuous batchingwiele zapytań równolegle, domyślnie
GGUF + GPUCUDA, Metal lub ROCm
OpenAI APIendpoint /v1/ na localhost:8080

Prawdziwa współbieżność, nie obsługa po kolei.

Do wygodnej pracy z modelami na własnej stacji wystarczy GUI takie jak LM Studio; llama-server to kolejny poziom: serwer produkcyjny dla całego zespołu.

Kluczowa przewaga (continuous batching): w przeciwieństwie do serwerów przetwarzających zapytania sekwencyjnie (jedno po drugim), llama-server obsługuje wiele zapytań jednocześnie i równolegle. Pozwala to w pełni wysycić moc GPU i obsłużyć wielu użytkowników lub procesów naraz.

Wydajność zależy od akceleracji GPU.

1. Sprzęt (GPU)

  • Nvidia: najlepsze wsparcie dzięki CUDA.
  • Apple Silicon (od M1 do M6): doskonała wydajność dzięki akceleracji Metal.
  • AMD: wsparcie przez ROCm (wymaga dodatkowej konfiguracji). Prostszą drogą bywa backend Vulkan (-DGGML_VULKAN=ON), niezwiązany z jednym producentem kart.
  • CPU: możliwe, ale bardzo powolne do celów serwerowych.

2. Modele w formacie GGUF

Serwer działa wyłącznie z modelami w formacie GGUF. To plik zawierający „skwantyzowany" model. Kwantyzacja to zmniejszenie precyzji wag (np. z 16-bitowej do 4-bitowej), co drastycznie redukuje rozmiar pliku i wymagania VRAM przy niewielkiej utracie jakości.

  • Szukaj oznaczeń Q4_K_M, Q5_K_M lub Q8_0.
  • Q4_K_M jest powszechnie uważany za najlepszy kompromis między wydajnością a jakością.
  • Modele znajdziesz na Hugging Face (filtruj po „GGUF"); wiele osób kwantyzuje popularne modele.

Budujemy ze źródła pod własny sprzęt.

Budujemy oprogramowanie bezpośrednio ze źródła, aby zapewnić maksymalną optymalizację dla sprzętu. Potrzebujesz git, cmake i odpowiedniego zestawu narzędzi deweloperskich.

1. Klonowanie repozytorium

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

Aktualizacja: repozytorium przeniesiono do organizacji ggml-org. Stary adres github.com/ggerganov/llama.cpp tylko przekierowuje. Używaj github.com/ggml-org/llama.cpp.

Aktualizacja: kompilacja nie jest jedyną drogą. Gotowe binarki zainstalujesz przez brew install llama.cpp (macOS, Linux) albo winget install llama.cpp (Windows); są też obrazy Docker i skrypt instalacyjny z llama.app, oficjalnej strony projektu. Nowe wydania mają wspólną binarkę llama, w której llama serve uruchamia ten sam serwer, co opisany tu llama-server. Build ze źródeł zostaje dla tych, którzy chcą sami wybrać backend i opcje kompilacji.

2. Kompilacja

Proces różni się w zależności od posiadanego GPU.

Apple Silicon (Metal jest na macOS włączony domyślnie, osobna flaga nie jest potrzebna):

cmake -B build
cmake --build build --config Release -j

Nvidia (CUDA):

cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j

AMD (ROCm na Linuksie; flagą -DGPU_TARGETS=gfx… ograniczysz kompilację do swojej karty):

HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -R)" \
  cmake -S . -B build -DGGML_HIP=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j

Najważniejsze flagi i przykład pełnego polecenia.

Minimalnie musisz wskazać model:

./build/bin/llama-server -m /sciezka/do/modelu.gguf -c 4096 -ngl 99

Najważniejsze flagi

  • -m, --model [SCIEZKA] — wymagane: ścieżka do pliku modelu GGUF.
  • -hf, --hf-repo <user>/<model>[:quant]: alternatywa dla -m: pobiera i uruchamia model GGUF prosto z Hugging Face, bez ręcznego ściągania pliku.
  • -ngl, --n-gpu-layers [LICZBA|auto|all] — krytyczne: ile warstw modelu trafia do VRAM GPU. Domyślnie jest auto, a przy włączonym domyślnie --fit serwer sam dopasowuje nieustawione parametry, w tym warstwy i kontekst, do wolnej pamięci karty. Konkretną liczbę (np. 99) albo all podajesz wtedy, gdy chcesz wymusić własny podział.
  • --cpu-moe, -cmoe / --n-cpu-moe, -ncmoe [N]: dla modeli MoE: trzyma wagi ekspertów w RAM zamiast w VRAM (wariant z N dotyczy tylko pierwszych N warstw). Tym sposobem odpalisz duży model MoE na karcie, która inaczej by go nie pomieściła.
  • -fa, --flash-attn [on|off|auto]: Flash Attention; domyślnie auto, więc serwer sam włącza je, gdy sprzęt to wspiera.
  • -np, --parallel [LICZBA]: ile zapytań (slotów) może być przetwarzanych równolegle; domyślnie -1, czyli serwer dobiera tę liczbę sam.
  • --host / --port: adres i port nasłuchu. Domyślnie 127.0.0.1 i 8080, czyli tylko lokalnie; 0.0.0.0 otwiera serwer na sieć.
  • --api-key KLUCZ / --api-key-file PLIK: serwer przyjmuje tylko zapytania z właściwym kluczem. Bez tego model obsłuży każdego, kto dosięgnie portu, więc przy --host 0.0.0.0 ustaw klucz od razu.

Continuous batching domyślnie włączone: nie musisz już podawać --cont-batching. Aby wyłączyć, użyj -nocb lub --no-cont-batching.

Aktualizacja — tryb routera (wiele modeli na jednym serwerze): odpal llama-server bez -m, a wystartuje jako router. Zamiast jednego modelu na sztywno obsłuży wiele i ładuje je na żądanie. --models-dir wskazuje katalog z plikami GGUF, a --models-preset opisuje konfiguracje poszczególnych modeli w pliku .ini. Każde zapytanie trafia do właściwego modelu samo, więc przełączasz model bez restartu serwera. Ile modeli siedzi w pamięci naraz, ustawiasz przez --models-max (domyślnie 4).

Przykład pełnego polecenia

./build/bin/llama-server \
  -m ./modele/Mistral-7B-v0.1.Q4_K_M.gguf \
  -c 4096 \
  -ngl 99 \
  --host 0.0.0.0 \
  --port 8080 \
  --parallel 4

Interfejs w przeglądarce i API zgodne z OpenAI.

1. Wbudowany interfejs WebUI

Otwórz przeglądarkę i wejdź na http://127.0.0.1:8080. Dostaniesz: rozmowę z modelem, statystyki na żywo (tokeny/s) oraz ustawienia (temperatura, top-k).

2. Prawdziwa współbieżność

Dzięki continuous batching i fladze --parallel serwer nie blokuje się na jednym zapytaniu. Możesz otworzyć wiele kart w przeglądarce lub wysłać wiele zapytań API jednocześnie. Serwer inteligentnie rozdzieli zasoby GPU i przetworzy wszystkie równolegle.

3. API zgodne z OpenAI

llama-server automatycznie udostępnia API zgodne ze standardem OpenAI (endpoint /v1/). Oznacza to, że podłączysz setki narzędzi (LangChain, Open WebUI, skrypty Python) do lokalnego serwera. Wystarczy ustawić adres API na http://127.0.0.1:8080/v1/. Poza Chat Completions serwer wystawia też /v1/responses (Responses API) i /v1/embeddings, a pod /v1/messages odpowiada w formacie Anthropic Messages API.

Tool calling działa bez dodatkowych flag. Od listopada 2025 silnik szablonów Jinja (--jinja) jest włączony domyślnie, więc serwer bierze szablon czatu wbudowany w plik GGUF, na /v1/chat/completions parsuje wywołania narzędzi do pola tool_calls i wydziela rozumowanie do osobnego pola reasoning_content. Gdy szablon zapisany w modelu jest wadliwy, podmienisz go flagą --chat-template-file. Flaga --no-jinja wyłącza cały mechanizm, ale przy agentach nie ma ku temu powodu.

VRAM to wszystko, a projekt rozwija się szybko.

Pamięć VRAM to wszystko

Wydajność zależy od flagi -ngl. Jeśli serwer działa wolno, prawdopodobnie część modelu została przeniesiona do RAM zamiast VRAM.

Aktualizacje

Projekt llama.cpp rozwija się bardzo szybko: buildy bNNNNN z gałęzi master wychodzą po kilka dziennie. Od sierpnia 2026 są też wydania z numeracją semver (tagi v0.x, ostatni v0.5.0 z 23 września 2026), więc serwer w firmie lepiej przypiąć do tagu niż do mastera. Aktualizacja ze źródeł:

git fetch --tags
git checkout v0.5.0   # albo nowszy tag
cmake --build build --config Release -j

Dokumentacja

Wszystkie dostępne endpointy (/completion, /chat/completions) znajdziesz w oficjalnej dokumentacji projektu na github.com/ggml-org/llama.cpp.

Chcecie własny serwer modeli na infrastrukturze firmy?

Akademia to materiały. Projekt i wdrożenie lokalnego serwera LLM prowadzimy z Waszym zespołem, od doboru sprzętu po produkcję. Audyt 90 minut wystarczy, żeby sprawdzić, czy ma to u Was sens.