Wpisałeś kiedyś llama-cli --help i przez chwilę pomyślałeś, że terminal się zawiesił?
Zjechało z ekranu jakieś sto flag, jedna pod drugą, każda z krótkim opisem po angielsku,
a człowiek siedzi jak przed instrukcją do mebli z drugiej ręki — niby wszystko po kolei,
a i tak nie wiadomo, od czego zacząć. Łatwo wtedy zamknąć to okno i wrócić do klikania
w Ollamie, bo Ollama „po prostu działa".
I działa — do momentu, w którym chcesz coś, czego domyślnie nie dostajesz. Więcej kontekstu.
Model wciśnięty w kartę, która teoretycznie jest za mała. Serwer na całą sieć domową, bez
wysyłania czegokolwiek na zewnątrz. Wtedy schodzisz piętro niżej, do llama.cpp — silnika
w czystym C/C++, na którym pół tego lokalnego światka stoi (Ollama, LM Studio, KoboldCpp —
wszystkie mają go gdzieś pod maską). A tam rządzą flagi. I dobra wiadomość jest taka:
z tej setki na co dzień dotykasz może dziesięciu.
Zanim ruszysz: dwie binarki, nie jedna
Kiedyś było main. Dziś, po sprzątaniu w repo, masz dwa najważniejsze narzędzia:
llama-cli (rozmowa w terminalu, testy, skrypty) i llama-server (serwer z web UI i API
kompatybilnym z OpenAI). Flagi w dużej mierze się pokrywają, więc to, co niżej, działa
w obu — chyba że zaznaczę inaczej.
Model podajesz jednym parametrem, -m (od model). Reszta to strojenie:
llama-cli -m qwen2.5-7b-instruct-q4_k_m.gguf -cnv
-cnv (od conversation) włącza tryb czatu, zamiast jednorazowego dokończenia promptu.
Do tego -sys "jesteś zwięzłym asystentem" ustawia prompt systemowy, a -p "..." podaje
zwykły prompt. Tyle wystarczy, żeby cokolwiek gadało. Tyle że domyślne ustawienia rzadko
są skrojone pod twoją konkretną kartę — więc przechodzimy do sedna.
Żeby model wszedł do karty
Tu toczy się cała gra, bo VRAM (pamięć karty) to waluta, której nigdy nie masz dość. Cztery flagi, które robią 90% roboty:
-ngl N(gpu-layers) — ile warstw modelu wrzucić na GPU. To najważniejsza flaga w całym zestawie. Przyjmuje liczbę albo słowo:auto(domyślnie —llama.cppsam dobiera, ile się zmieści) orazall(wrzuć wszystko, co się da). Chcesz maksimum na karcie?-ngl all. Za mało VRAM-u na cały model? Podaj mniejszą liczbę, np.-ngl 20— reszta poleci na CPU. Mieszany offload jest wolniejszy, ale często to jedyny sposób, żeby większy model w ogóle ruszył.-c N(ctx-size) — okno kontekstu w tokenach. Domyślniellama.cppbierze rozsądną wartość, ale to właśnie kontekst potrafi po cichu zjeść ci pamięć. Podwoisz-cz 4096 na 8192 i nagle brakuje pół giga VRAM-u, którego przed chwilą było w sam raz.-c 0mówi „weź maksimum z modelu" — kuszące, ale sprawdź wcześniej, czy masz na to pamięć.-fa on(flash attention) — zoptymalizowana uwaga: mniej pamięci na KV-cache (bufor, w którym model trzyma przetworzony kontekst) i zwykle ciut szybciej. Flaga przyjmujeon/off/auto, a domyślnie stoi naauto(tollama.cppdecyduje). Chcesz mieć pewność, że działa na nowszej karcie — wal-fa on.-ctk/-ctv(cache-type-k / -v) — kwantyzacja samego KV-cache, np.q8_0alboq4_0. Przy długim kontekście to on, nie wagi, robi się największym żłobem na pamięć. Ściśnięcie go doq8_0odzyskuje sporo VRAM-u niemal bez odczuwalnej straty. Najlepiej razem z-fa on.
Kolejność ratowania, gdy „nie wchodzi": najpierw -fa on, potem -ctk q8_0 -ctv q8_0,
dopiero na końcu tnij -c albo schodź z -ngl. Pierwsze dwa kosztują cię grosze na
jakości, a potrafią odzyskać na tyle VRAM-u, że model klasy 7B–8B wejdzie na kartę
12 GB z długim kontekstem, zamiast dławić się na starcie.
Żeby było szybciej
Zmieściło się? To teraz o prędkość:
-t N(threads) — ile wątków CPU. Ustaw na liczbę fizycznych rdzeni, nie logicznych. Więcej nie znaczy szybciej — powyżej liczby rdzeni zaczynasz sobie tylko przeszkadzać. Liczy się głównie wtedy, gdy część modelu (albo całość) siedzi na CPU.-b/-ub(batch-size / ubatch-size) — jak duże porcje tokenów przetwarza model naraz przy „czytaniu" promptu. Domyślne wartości są sensowne; ruszaj je, dopiero jak świadomie walczysz o przepustowość przy długich promptach.--mlock— przypnij model w RAM, żeby system nie wyrzucił go do swapu w najmniej odpowiednim momencie.--no-mmapładuje cały plik do pamięci z góry (przydatne na dziwnych dyskach sieciowych). Na co dzień rzadko potrzebne, ale warto wiedzieć, że są.-ts/-sm(tensor-split / split-mode) — masz dwie karty?-ts 3,1rozłoży model w proporcji 3:1, a-smdecyduje, jak dokładnie. Temat na osobny wpis, ale niech ci mignie, że wielo-GPU to nie czarna magia.
Żeby generacja miała ręce i nogi
Te flagi nie dotykają pamięci — sterują tym, jak model dobiera słowa:
| Flaga | Co robi | Bezpieczny start |
|---|---|---|
--temp | „temperatura" — im wyżej, tym bardziej kreatywnie (i chaotycznie) | 0.7 |
--top-p | odcina mało prawdopodobny ogon słów (nucleus) | 0.9 |
--min-p | nowsza, często lepsza alternatywa dla top-p | 0.05 |
--repeat-penalty | kara za powtórki, gdy model się zacina w kółko | 1.1 |
-n N | ile tokenów wygenerować (-1 = bez limitu) | -1 |
Jak model gada od rzeczy — zbij --temp. Jak mieli w kółko to samo — podnieś
--repeat-penalty o włos. Bez fanatyzmu, to pokrętła, nie wyrocznia.
Serwer, czyli twój prywatny endpoint
Najlepszy patent na co dzień: odpal llama-server raz i gadaj z modelem z przeglądarki
albo z kodu, przez API w formacie OpenAI — wszystko lokalnie, offline.
llama-server -m qwen2.5-7b-instruct-q4_k_m.gguf \
-ngl all -c 8192 -fa on \
--host 0.0.0.0 --port 8080
Wchodzisz na http://localhost:8080 i masz web UI od strzału. --host 0.0.0.0 wystawia
serwer na całą sieć domową (laptop w kuchni gada z kartą w gabinecie — klasyk domowego setupu).
-np N (parallel) obsłuży kilka rozmów naraz, a -cb (continuous batching) sensownie
je poupycha. --jinja każe użyć szablonu czatu wbudowanego w model — przydaje się, gdy
odpowiedzi wyglądają, jakby model nie wiedział, że rozmawia.
Zrób to sam
Masz kartę 8 GB i model 7B w Q4? Zacznij od tego i patrz na zużycie VRAM:
llama-cli -m qwen2.5-7b-instruct-q4_k_m.gguf -ngl all -c 4096 -fa on -cnv
Nie wchodzi? Dorzuć ściśnięty cache i przytnij okno:
llama-cli -m qwen2.5-7b-instruct-q4_k_m.gguf \
-ngl all -c 4096 -fa on -ctk q8_0 -ctv q8_0 -cnv
Modele w formacie GGUF ściągniesz z Hugging Face (szukaj wariantów Q4_K_M — dobry
kompromis rozmiar/jakość). Kod, aktualne flagi i instrukcje budowania są w oficjalnym
repo: github.com/ggml-org/llama.cpp. A pełną,
zawsze aktualną listę wywołasz tym, od czego zaczęliśmy — llama-cli --help. Tylko teraz
ta ściana nie będzie już ścianą, a tablicą z pokrętłami, z których wiesz, które przekręcić.
Wartości domyślne w
llama.cppbywają dobre, ale zmieniają się z wersją. Jak coś zaczyna działać dziwnie po aktualizacji — najpierw zajrzyj, czy flaga, na której polegasz, nie dostała nowego domyślnego zachowania.
Bo cała zabawa w lokalnym AI sprowadza się właśnie do tego jednego uczucia: siedzisz przed własnym sprzętem, przekręcasz pokrętło o jeden klik i patrzysz, jak model, który „się nie mieścił", nagle mruczy pod biurkiem jak trzeba. Nikt ci nie dyktuje, ile masz mu dać kontekstu ani na czym go odpalić. Ty, karta i garść flag.