LM Studio i Gemma 4 12B — lokalny model z kontekstem 64K

LM Studio — poradnik: jaki model wybrać, Gemma 4 12B z kontekstem 64K w 16 GB VRAM, serwer API, test wywoływania narzędzi i porównanie z Ollamą.

LM Studio to najprostszy sposób na uruchomienie modelu językowego na Windowsie. Pod spodem działa sprawdzony silnik llama.cpp z akceleracją CUDA, a na wierzchu jest wygodny interfejs i serwer API zgodny z OpenAI. Każde narzędzie, które potrafi rozmawiać z ChatGPT, porozmawia też z Twoim lokalnym modelem. W tej części uruchomisz Gemmę 4 12B tak, żeby była gotowa dla agenta: z kontekstem 64K, w całości w VRAM i dostępna w tle po starcie systemu.

LM Studio czy Ollama?

Oba programy uruchamiają modele na tym samym silniku (llama.cpp) i udostępniają API zgodne z OpenAI, więc na tej samej karcie generują tekst w podobnym tempie. Różnią się podejściem:

LM Studio Ollama
Obsługa Aplikacja z GUI: wyszukiwarka modeli, czat, ustawienia Przede wszystkim CLI i usługa w tle, prosta aplikacja z czatem
Ustawienia modelu W interfejsie, osobno dla każdego modelu (kontekst, offload, flash attention) Pliki Modelfile i zmienne środowiskowe (np. OLLAMA_CONTEXT_LENGTH)
Źródło modeli Pliki GGUF z Hugging Face i katalog LM Studio Biblioteka Ollamy oraz import GGUF
Dla kogo Stacja robocza z Windowsem, eksperymenty z kwantyzacją Serwery, skrypty, kontenery Docker

W tej serii wybieramy LM Studio, bo na stacji roboczej wygodniej widać w nim zużycie VRAM i ustawienia kontekstu. Wszystko, co dotyczy wyboru modelu i rachunku pamięci, przenosi się 1:1 na Ollamę.

Instalacja LM Studio

Pobierz instalator z lmstudio.ai i zainstaluj z domyślnymi ustawieniami. Przy pierwszym uruchomieniu:

  1. Wybierz poziom interfejsu Power User albo Developer — dopiero wtedy widać ustawienia ładowania modelu i zakładkę serwera.
  2. Przed pobraniem pierwszego modelu zmień katalog modeli w My Models na D:\AI\models (przygotowany w poprzedniej części).
  3. W Settings → Runtime sprawdź, czy wybrany jest runtime CUDA llama.cpp (a nie Vulkan albo CPU) i czy jest aktualny.

Razem z aplikacją instaluje się narzędzie wiersza poleceń lms. Sprawdź w nowym oknie PowerShella:

Okno terminala
lms --help

Wybór kwantyzacji

Kwantyzacja to zapis wag modelu z mniejszą precyzją: zamiast 16 bitów na wagę — 4, 5, 6 albo 8. Mniejszy plik to mniej VRAM i szybsze generowanie, ale też niższa jakość odpowiedzi. Dla Gemmy 4 12B:

Kwantyzacja Plik Razem z 64K kontekstu* Jakość Kiedy
Q4_K_M 7,12 GB ~8,5 GB Dobra, zauważalne błędy w trudnym kodzie Karty 10–12 GB
Q5_K_M 8,41 GB ~10 GB Bardzo dobra Gdy chcesz dłuższy kontekst niż 64K
Q6_K 9,79 GB ~11,5 GB Praktycznie bez strat 16 GB — nasz wybór
Q8_0 12,7 GB ~14 GB Referencyjna Zbyt mały zapas przy 16 GB

* Wagi + KV cache dla 65 536 tokenów + bufory. Bez VRAM zajętego przez Windows (zwykle 0,5–1,5 GB).

Q6_K zostawia ponad 4 GB zapasu. Przy mniejszym zużyciu przez system możesz nawet podnieść kontekst do 128K, a na pewno nie zabraknie miejsca przy długich sesjach.

Pobranie modelu

W interfejsie: zakładka Discover → wyszukaj gemma-4-12b → wybierz wpis google/gemma-4-12b → z listy wariantów Q6_K → Download.

Albo z PowerShella:

Okno terminala
lms get google/gemma-4-12b@q6_k --gguf

Jeśli nazwa wariantu w katalogu jest inna, dodaj -a — lms get wyświetli wszystkie dostępne kwantyzacje do wyboru.

Okno terminala
lms ls

Domyślne ustawienia ładowania

Ustawienia ładowania zapisane jako domyślne dla modelu obowiązują wszędzie: w czacie, przy ładowaniu przez lms i gdy model ładuje się sam na żądanie agenta. Zrób to raz.

My Models → google/gemma-4-12b → ikona koła zębatego (Edit model default config):

Ustawienie Wartość Dlaczego
Context Length 65536 Minimum dla Hermes Agent
GPU Offload maksimum (wszystkie warstwy) Cały model w VRAM
Flash Attention włączone Mniej pamięci i szybsze przetwarzanie długich promptów
K / V Cache Quantization wyłączone (F16) Przy Gemmie 4 KV cache zajmuje ~1,3 GB, więc nie ma czego oszczędzać, a kwantyzacja kosztuje jakość
Keep Model in Memory włączone Model nie jest wyrzucany z pamięci między zapytaniami

W zakładce parametrów generowania ustaw wartości zalecane dla Gemmy 4: Temperature 1.0, Top P 0.95, Top K 64. To wartości zalecane dla tej rodziny modeli. Obniżanie temperatury „dla dokładności” w modelach z trybem rozumowania częściej prowadzi do powtórzeń niż do lepszych odpowiedzi.

Test w czacie

Załaduj model i sprawdź zużycie pamięci:

Okno terminala
lms load google/gemma-4-12b --gpu=max --context-length=65536
lms ps
nvidia-smi --query-gpu=memory.used,memory.total --format=csv

memory.used powinno wynosić około 11,5 GB plus to, co zajmował system przed załadowaniem. Jeśli ładowanie kończy się błędem braku pamięci, to działa ustawienie Sysmem Fallback z poprzedniej części — zmniejsz kontekst albo zwolnij VRAM.

W zakładce Chat zadaj modelowi zadanie programistyczne, np. „Napisz w PowerShellu skrypt, który wypisze 10 największych plików w katalogu D:\AI\models”. Pod odpowiedzią LM Studio pokazuje statystyki: tokeny na sekundę, czas do pierwszego tokena i liczbę tokenów. Zapisz te wartości, to Twój punkt odniesienia przy zmianach ustawień.

Serwer API

Developer → Server Settings:

  • Server Port: 1234 (domyślny, tego oczekuje Hermes).
  • Serve on Local Network: wyłączone. Serwer nasłuchuje tylko na localhost, więc nikt z sieci nie użyje Twojej karty.
  • Just-in-Time Model Loading: włączone. Model załaduje się sam przy pierwszym zapytaniu z ustawieniami domyślnymi z poprzedniej sekcji.
  • Auto unload unused JIT loaded models: włączone z czasem np. 60 minut. Gdy nie używasz AI, VRAM wraca do gier.

Uruchom serwer przełącznikiem Status: Running albo z PowerShella:

Okno terminala
lms server start --port 1234

Żeby serwer startował razem z Windowsem bez otwierania okna aplikacji, włącz w Settings opcję uruchamiania serwera LLM przy logowaniu (Run the LLM server on login). LM Studio zapamiętuje ostatni stan serwera i przywraca go przy starcie.

Test API i wywoływania narzędzi

Najpierw lista modeli:

Okno terminala
Invoke-RestMethod http://localhost:1234/v1/models | Select-Object -ExpandProperty data | Select-Object id

Teraz test, od którego zależy praca agenta: czy model poprawnie wywołuje narzędzie zamiast odpowiadać tekstem. Wysyłamy pytanie o pogodę razem z opisem funkcji get_weather:

test-tool-calling.ps1
$body = @{
model = 'google/gemma-4-12b'
messages = @(
@{ role = 'user'; content = 'Jaka jest teraz pogoda w Krakowie?' }
)
tools = @(
@{
type = 'function'
function = @{
name = 'get_weather'
description = 'Zwraca aktualną pogodę dla podanego miasta'
parameters = @{
type = 'object'
properties = @{ city = @{ type = 'string'; description = 'Nazwa miasta' } }
required = @('city')
}
}
}
)
} | ConvertTo-Json -Depth 10
$response = Invoke-RestMethod -Uri 'http://localhost:1234/v1/chat/completions' -Method Post `
-ContentType 'application/json; charset=utf-8' `
-Body ([System.Text.Encoding]::UTF8.GetBytes($body))
$response.choices[0].finish_reason
$response.choices[0].message.tool_calls | ConvertTo-Json -Depth 5

Oczekiwany wynik: finish_reason równe tool_calls i wywołanie funkcji get_weather z argumentem {"city":"Kraków"}. Model nie zna pogody i nie powinien jej zmyślać — ma poprosić o wywołanie narzędzia. Jeśli zamiast tego dostajesz zwykłą odpowiedź tekstową, sprawdź, czy LM Studio jest w aktualnej wersji i czy ładujesz właściwy model.

Bezpieczeństwo serwera

Serwer LM Studio bez uwierzytelnienia i nasłuchujący tylko na localhost to rozsądna konfiguracja dla jednej maszyny. Jeśli kiedyś włączysz Serve on Local Network (np. żeby korzystać z modelu z laptopa), włącz też wymaganie tokenu API w ustawieniach serwera. Inaczej każde urządzenie w sieci, łącznie z tanią kamerką IoT, może wysyłać zapytania do Twojego GPU.

Model działa, API odpowiada, a wywoływanie narzędzi przechodzi test. W następnej części podłączysz do niego Hermes Agent i porozmawiasz z nim z telefonu.