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:
- Wybierz poziom interfejsu Power User albo Developer — dopiero wtedy widać ustawienia ładowania modelu i zakładkę serwera.
- Przed pobraniem pierwszego modelu zmień katalog modeli w My Models na
D:\AI\models(przygotowany w poprzedniej części). - 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:
lms --helpWybó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:
lms get google/gemma-4-12b@q6_k --ggufJeśli nazwa wariantu w katalogu jest inna, dodaj -a — lms get wyświetli wszystkie dostępne kwantyzacje do wyboru.
lms lsDomyś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:
lms load google/gemma-4-12b --gpu=max --context-length=65536lms psnvidia-smi --query-gpu=memory.used,memory.total --format=csvmemory.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:
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:
Invoke-RestMethod http://localhost:1234/v1/models | Select-Object -ExpandProperty data | Select-Object idTeraz 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:
$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 5Oczekiwany 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.