llama.cpp na Windowsie: instalacja, czat w przeglądarce i test CUDA
Jedna komenda instaluje llama.cpp, ale wersja z winget była u nas 2-2,6 raza wolniejsza. Jak pobrać wersję CUDA, uruchomić serwer i wyłączyć zapętlone myślenie.

👁 116 przeczytań
- Na karcie Nvidii wersja CUDA z GitHuba jest od 1,9 do 2,6 raza szybsza niż wersja Vulkan instalowana przez winget.
- Gemma 4 12B na CUDA osiągnęła 104 tokeny na sekundę, a Bielik 11B v3 - 72 tokeny na sekundę na RTX 4090.
- Wyłączenie trybu myślenia w Gemmie 4 skróciło czas odpowiedzi na 13 zadaniach ze 570 sekund do 53 sekund i wyeliminowało puste wyniki.
llama.cpp to darmowy silnik, na którym działa większość lokalnych modeli językowych, także w LM Studio i Ollamie. Na Windowsie instaluje się go jedną komendą, a razem z nim dostajesz serwer z czatem w przeglądarce i API zgodne z OpenAI. 26 września 2026 roku uruchomiłem go na karcie RTX 4090 z trzema modelami i trafiłem na pułapkę, o której instrukcje milczą: wersja z menedżera winget generowała tekst od 1,9 do 2,6 raza wolniej niż oficjalna wersja na CUDA.
W skrócie
Na karcie Nvidii pobierz z GitHuba paczkę „win-cuda”, a nie wersję z winget. Gemma 4 12B na CUDA pisała 104 tokeny na sekundę, na Vulkanie 54. Bielik 11B: 72 wobec 28. Wczytanie polecenia na CUDA było przy Gemmie 20 razy szybsze. llama.cpp ma sens, gdy chcesz mieć pełną kontrolę nad ustawieniami i własny serwer API. Jeśli wolisz klikać, weź LM Studio albo Ollamę, które korzystają z tego samego silnika.
Co to jest llama.cpp i po co go instalować
llama.cpp to projekt open source na licencji MIT, rozwijany przez organizację ggml-org na GitHubie. Uruchamia modele w formacie GGUF, czyli skompresowane (kwantyzowane) wersje modeli, które mieszczą się w pamięci zwykłej karty graficznej. Z tego samego silnika korzystają LM Studio i Ollama, więc instalując llama.cpp, dostajesz to samo, tylko bez nakładki.
W paczce są trzy programy, których użyjesz na pewno:
- llama-server - serwer z czatem w przeglądarce i API zgodnym z OpenAI (to on jest najważniejszy),
- llama-cli - rozmowa z modelem w oknie terminala,
- llama-bench - pomiar szybkości, który pokaże, czy karta pracuje tak, jak powinna.
Instalacja: dwie drogi i jedna pułapka
Najprostsza droga to jedna komenda w PowerShellu: winget install ggml.llamacpp. Po niej llama-server działa z każdego folderu. Problem w tym, że winget instaluje wersję na Vulkanie. To uniwersalny interfejs graficzny, który działa na kartach Nvidii, AMD i Intela. Na karcie Nvidii jest jednak wyraźnie wolniejszy niż CUDA. Sprawdzisz to komendą llama-server --list-devices: jeśli widzisz „Vulkan0”, masz wersję uniwersalną, a jeśli „CUDA0”, masz wersję pod Nvidię.
Na karcie Nvidii zrób to tak:
- Wejdź na stronę wydań projektu na GitHubie (link w źródłach) i otwórz najnowsze wydanie.
- Pobierz dwa pliki:
llama-bXXXXX-bin-win-cuda-12.4-x64.zip(u mnie 262 MB) icudart-llama-bin-win-cuda-12.4-x64.zip(391 MB, biblioteki CUDA - nie musisz instalować całego CUDA Toolkit). - Rozpakuj oba do jednego folderu, np.
D:\AI\llama-cuda. - W tym folderze uruchom
.\llama-server.exe --list-devices. Powinieneś zobaczyć swoją kartę z dopiskiem CUDA0.
Na kartach AMD i Intela zostań przy Vulkanie z winget, bo tam to właśnie on jest właściwym wyborem. Na Macu z procesorem Apple llama.cpp korzysta z interfejsu Metal i instaluje się go przez Homebrew (brew install llama.cpp).
Ile tracisz na złej wersji: pomiar na RTX 4090
Obie wersje zmierzyłem tym samym narzędziem llama-bench: 512 tokenów polecenia, 128 tokenów odpowiedzi, trzy powtórzenia, cały model na karcie. Wersja z winget miała numer 11149, a paczka CUDA 11194, więc różnica kilkudziesięciu wydań nie tłumaczy dwukrotnej przepaści.
| Model (plik GGUF) | Vulkan: odpowiedź | CUDA: odpowiedź | Vulkan: wczytanie polecenia | CUDA: wczytanie polecenia |
|---|---|---|---|---|
| Gemma 4 12B, Q4_0 (7,0 GB) | 53,8 tok/s | 104,2 tok/s | 381 tok/s | 7667 tok/s |
| Bielik 11B v3, Q8_0 (11,9 GB) | 27,7 tok/s | 71,8 tok/s | 4418 tok/s | 7889 tok/s |
Przy 100 tokenach na sekundę tekst pojawia się szybciej, niż da się go czytać. Przy 28 tokenach dłuższa odpowiedź przychodzi już z wyraźnym opóźnieniem. Wczytanie polecenia ma znaczenie, gdy wklejasz długi dokument: 20 stron to około 10 tysięcy tokenów, czyli ponad 26 sekund czekania na Vulkanie wobec niecałej 1,5 sekundy na CUDA.
Pierwsze uruchomienie: serwer z czatem
Model w formacie GGUF pobierzesz z Hugging Face (np. Gemma 4 12B z oficjalnego repozytorium Google, plik około 7 GB). Potem jedna komenda:
llama-server -m D:\AI\gguf\gemma-4-12b-it-qat-q4_0.gguf -ngl 99 -fa on -c 16384 --jinja
-ngl 99- wszystkie warstwy modelu na karcie graficznej (bez tego model liczy na procesorze i działa kilka razy wolniej),-fa on- szybszy mechanizm uwagi, który oszczędza pamięć karty,-c 16384- kontekst, czyli ile tekstu model widzi naraz; więcej kontekstu to więcej zajętej pamięci,--jinja- szablon rozmowy zapisany w pliku modelu, potrzebny do poprawnego formatu odpowiedzi i narzędzi.
Model 7 GB wczytał się u mnie w 4,6 sekundy. Potem otwierasz w przeglądarce adres http://127.0.0.1:8080 i masz czat, który pod każdą odpowiedzią pokazuje liczbę tokenów i szybkość.

Pułapka numer dwa: model, który myśli w nieskończoność
Gemma 4 ma wbudowany tryb rozumowania i llama-server z opcją --jinja włącza go domyślnie. W moim teście 13 zadań po polsku model z włączonym myśleniem wygenerował 54 093 tokeny w 570 sekund, a w trzech zadaniach nie oddał odpowiedzi wcale. Zamiast pisać, liczył słowa w swoim szkicu, aż wyczerpał limit. Po wyłączeniu myślenia te same 13 zadań zajęło 53 sekundy i 4710 tokenów, bez ani jednego pustego wyniku.
Myślenie wyłączysz, dopisując do komendy --chat-template-kwargs "{\"enable_thinking\": false}". Ten sam parametr działa w modelach Qwen 3.x. Dla GPT-OSS zamiast tego ustawia się reasoning_effort na low. Szerzej o tym zjawisku piszę w tekście AI myśli za długo po polsku.
Własne API zgodne z OpenAI
llama-server od razu wystawia adres http://127.0.0.1:8080/v1/chat/completions w tym samym formacie co API OpenAI. Każdy program, w którym da się zmienić adres serwera (skrypty w Pythonie, n8n, wtyczki do edytorów), może rozmawiać z lokalnym modelem bez klucza i bez opłat za tokeny. W ten sposób przepuściłem przez lokalne modele cały test 13 zadań po polsku. Odpowiedź zawiera też pole timings z szybkością generowania, co przydaje się do pomiarów.
Ile pamięci karty zajmie model
Poniżej rzeczywiste zajęcie pamięci karty w moim teście, z kontekstem 32 768 tokenów. Od wyniku odjąłem około 5-6 GB, które na tym komputerze zajmowały przeglądarka i system przed startem serwera.
| Model | Plik | Pamięć karty z kontekstem 32k | Szybkość odpowiedzi (CUDA) |
|---|---|---|---|
| Gemma 4 12B Q4_0 | 7,0 GB | ok. 8,2 GB | 104 tok/s |
| Bielik 11B v3 Q8_0 | 11,9 GB | ok. 17,0 GB | 72 tok/s |
| Qwen 3.8 27B Q4_K_M | 16,5 GB | ok. 17,4 GB | 50 tok/s |
Na karcie z 8 GB zmieścisz więc Gemmę 12B z krótszym kontekstem, a na 12-16 GB większość modeli do 14 miliardów parametrów. Więcej o doborze sprzętu jest w poradniku jaki komputer do lokalnego AI.
Gotowy skrypt: instalacja jednym poleceniem
Całą instalację z tego poradnika zamknąłem w jednym skrypcie PowerShell. Sam rozpoznaje kartę: przy Nvidii pobiera paczkę CUDA, a przy AMD i Intelu paczkę Vulkan. Potem pobiera Gemmę 4 12B i tworzy plik start-gemma.bat z ustawieniami z mojego testu, także z wyłączonym myśleniem. Sprawdziłem go 26.09.2026 na pustym folderze. Pobranie i rozpakowanie 624 MB paczek CUDA trwało około 35 sekund, a serwer z wygenerowanego pliku odpowiedział „17 * 23 = 391” bez ani jednego tokenu myślenia. Test wyłapał też pułapkę, o której nie piszą instrukcje: oznaczone jako „najnowsze” wydanie llama.cpp na GitHubie (v0.5.0) nie ma paczek dla Windowsa, więc skrypt szuka najnowszego wydania, które je ma.
- Pobierz: instaluj-llama-cpp.ps1 (5 KB) albo wszystkie 5 skryptów w jednym pliku ZIP (15 KB).
- Uruchom w PowerShell:
powershell -ExecutionPolicy Bypass -File .\instaluj-llama-cpp.ps1 - Opcje:
-Folder D:\AI\llama(inny folder),-BezModelu(sam silnik),-Vulkan(wymuszenie Vulkana). - Szybkość i koszt prądu swojego modelu zmierzysz skryptem zmierz-model.py (6 KB), opisanym w tekście lokalny model czy API.
Zanim uruchomisz jakikolwiek skrypt z internetu, przeczytaj go. Działa z twoimi uprawnieniami. Dlatego poniżej jest pełny kod, bez skracania, z komentarzami po polsku. Skrypty są na licencji MIT: możesz je zmieniać i używać także w firmie.
# instaluj-llama-cpp.ps1 - llama.cpp na Windowsie w wersji dopasowanej do karty (promptowy.com/llama-cpp/)
# Autor: Piotr Olszewski, promptowy.com. Licencja skryptu: MIT. Sprawdzone 26.09.2026 na Windows 11 + RTX 4090.
#
# Co robi:
# 1. Wykrywa kartę Nvidii (nvidia-smi). Jest - pobiera paczkę CUDA, nie ma - paczkę Vulkan (AMD, Intel).
# 2. Pobiera najnowsze oficjalne wydanie z github.com/ggml-org/llama.cpp i rozpakowuje do folderu docelowego.
# 3. Opcjonalnie pobiera model Gemma 4 12B (Q4_0, ok. 7 GB) i tworzy plik start-gemma.bat
# z ustawieniami z testu: cały model na karcie, kontekst 16k, myślenie wyłączone.
#
# Użycie (PowerShell):
# powershell -ExecutionPolicy Bypass -File .\instaluj-llama-cpp.ps1
# powershell -ExecutionPolicy Bypass -File .\instaluj-llama-cpp.ps1 -Folder D:\AI\llama -BezModelu
# powershell -ExecutionPolicy Bypass -File .\instaluj-llama-cpp.ps1 -Vulkan (wymuś Vulkan)
param(
[string]$Folder = "$env:USERPROFILE\AI\llama-cpp",
[switch]$BezModelu,
[switch]$Vulkan
)
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue' # przyspiesza Invoke-WebRequest w Windows PowerShell 5.1
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
function Info($t) { Write-Host "[llama.cpp] $t" -ForegroundColor Cyan }
# 1. Karta graficzna
$nvidia = $false
if (-not $Vulkan) {
try {
$gpu = & nvidia-smi --query-gpu=name,memory.total --format=csv,noheader 2>$null
if ($LASTEXITCODE -eq 0 -and $gpu) { $nvidia = $true; Info "Karta Nvidii: $gpu" }
} catch { }
}
if (-not $nvidia) { Info 'Nie wykryto karty Nvidii albo wybrano -Vulkan: pobieram wersję Vulkan.' }
# 2. Najnowsze wydanie z GitHuba
if ($nvidia) {
$wzory = @('^llama-.*-bin-win-cuda-12\.4-x64\.zip$', '^cudart-llama-bin-win-cuda-12\.4-x64\.zip$')
} else {
$wzory = @('^llama-.*-bin-win-vulkan-x64\.zip$')
}
# „latest” bywa wydaniem bez paczek dla Windowsa, więc bierzemy najnowsze, które ma wszystkie potrzebne pliki
Info 'Szukam najnowszego wydania z paczkami dla Windowsa...'
$lista = Invoke-RestMethod -Uri 'https://api.github.com/repos/ggml-org/llama.cpp/releases?per_page=15' -Headers @{ 'User-Agent' = 'promptowy-instalator' }
$rel = $lista | Where-Object { -not $_.draft } | Where-Object {
$r = $_; @($wzory | Where-Object { $w = $_; $r.assets | Where-Object { $_.name -match $w } }).Count -eq $wzory.Count
} | Select-Object -First 1
if (-not $rel) { throw 'Nie znalazłem wydania z paczkami dla Windowsa wśród 15 ostatnich.' }
Info "Wydanie: $($rel.tag_name)"
New-Item -ItemType Directory -Force -Path $Folder | Out-Null
$tmp = Join-Path $env:TEMP "llama-cpp-$($rel.tag_name)"
New-Item -ItemType Directory -Force -Path $tmp | Out-Null
foreach ($w in $wzory) {
$a = $rel.assets | Where-Object { $_.name -match $w } | Select-Object -First 1
if (-not $a) { throw "Nie znalazłem pliku pasującego do $w w wydaniu $($rel.tag_name). Sprawdź stronę wydań ręcznie." }
$zip = Join-Path $tmp $a.name
if (-not (Test-Path $zip) -or (Get-Item $zip).Length -ne $a.size) {
Info ("Pobieram {0} ({1:N0} MB)..." -f $a.name, ($a.size / 1MB))
Invoke-WebRequest -Uri $a.browser_download_url -OutFile $zip -UseBasicParsing
}
Info "Rozpakowuję $($a.name)..."
Expand-Archive -Path $zip -DestinationPath $Folder -Force
}
$srv = Get-ChildItem -Path $Folder -Recurse -Filter 'llama-server.exe' | Select-Object -First 1
if (-not $srv) { throw 'Po rozpakowaniu nie ma llama-server.exe - przerwane.' }
$bin = $srv.DirectoryName
Info 'Urządzenia widoczne dla llama.cpp:'
$ErrorActionPreference = 'Continue' # programy llama.cpp piszą komunikaty na stderr
$urz = & (Join-Path $bin 'llama-server.exe') --list-devices 2>&1 | ForEach-Object { "$_" }
$ErrorActionPreference = 'Stop'
$urz | Where-Object { $_ -match 'CUDA\d|Vulkan\d|Available' } | ForEach-Object { Write-Host " $_" }
# 3. Model i plik startowy
if (-not $BezModelu) {
$modele = Join-Path $Folder 'modele'
New-Item -ItemType Directory -Force -Path $modele | Out-Null
$plik = Join-Path $modele 'gemma-4-12b-it-qat-q4_0.gguf'
$url = 'https://huggingface.co/google/gemma-4-12B-it-qat-q4_0-gguf/resolve/main/gemma-4-12b-it-qat-q4_0.gguf'
if (-not (Test-Path $plik)) {
Info 'Pobieram Gemma 4 12B (ok. 7 GB, przerwane pobieranie wznowi się przy ponownym uruchomieniu)...'
$ErrorActionPreference = 'Continue' # curl pokazuje postęp na stderr
& curl.exe -L -C - --fail -o $plik $url
$ErrorActionPreference = 'Stop'
if ($LASTEXITCODE -ne 0) { throw 'Pobieranie modelu nie powiodło się. Uruchom skrypt ponownie - pobieranie wznowi się.' }
}
$bat = Join-Path $Folder 'start-gemma.bat'
$linia = '"' + (Join-Path $bin 'llama-server.exe') + '" -m "' + $plik + '" -ngl 99 -fa on -c 16384 --jinja --chat-template-kwargs "{\"enable_thinking\": false}" --port 8080'
Set-Content -Path $bat -Encoding ASCII -Value @('@echo off', 'echo Czat: http://127.0.0.1:8080 (zamknij okno, zeby zatrzymac)', $linia)
Info "Gotowe. Uruchom: $bat i otwórz http://127.0.0.1:8080"
} else {
Info "Gotowe. Silnik jest w: $bin"
}
Najczęstsze pytania
Nie przepłacaj za te subskrypcje
Prowadzę sklep z rocznymi dostępami do narzędzi AI - te same konta, o których piszę wyżej, tylko taniej niż w cenniku producenta.
Czy llama.cpp jest darmowy?
Tak. llama.cpp jest na licencji MIT, nie wymaga konta ani klucza i działa bez internetu po pobraniu modelu. Licencję ma też każdy model osobno: Gemma 4, Bielik v3, Qwen 3.8 i GPT-OSS są na Apache 2.0, więc można ich używać komercyjnie.
llama.cpp, LM Studio czy Ollama?
Wszystkie trzy korzystają z tego samego silnika. LM Studio daje okienkowy program z wyszukiwarką modeli, Ollama prostą obsługę z terminala, a llama.cpp pełną kontrolę nad parametrami i najnowsze funkcje od razu po wydaniu.
Skąd mam wiedzieć, czy model liczy na karcie graficznej?
Uruchom llama-server --list-devices i sprawdź, czy karta jest na liście, a w komendzie ustaw -ngl 99. Przy pracy na karcie Menedżer zadań pokazuje wzrost zajętej pamięci GPU o rozmiar pliku modelu.
Czy zadziała na karcie AMD?
Tak, przez Vulkan, czyli wersję z winget albo paczkę „win-vulkan” z GitHuba. Moje pomiary dotyczą karty Nvidii. Na AMD Vulkan jest naturalnym wyborem, a porównanie z CUDA nie ma tam zastosowania.
Źródła i data sprawdzenia
Pomiary własne: RTX 4090 24 GB, Windows 11, llama.cpp 11149 (winget, Vulkan) i b11194 (win-cuda-12.4), llama-bench -p 512 -n 128 -r 3. Wydania i licencja: github.com/ggml-org/llama.cpp. Licencje modeli: karty modeli na Hugging Face (Gemma 4) i Bielik v3. Sprawdzone 26 września 2026.
Cały tydzień w AI, w jednym mailu
Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.
Zapisz się za darmo →Najczęstsze pytania
Jak zainstalować llama.cpp na Windowsie z obsługą CUDA?
Pobierz z GitHuba dwa pliki: llama-bXXXXX-bin-win-cuda-12.4-x64.zip (262 MB) i cudart-llama-bin-win-cuda-12.4-x64.zip (391 MB), a następnie rozpakuj oba do jednego folderu. Nie musisz instalować całego CUDA Toolkit - biblioteki CUDA są zawarte w drugiej paczce.
Jak sprawdzić, czy llama.cpp działa na karcie graficznej, a nie na procesorze?
Uruchom komendę llama-server --list-devices i sprawdź, czy na liście widnieje "CUDA0" (Nvidia) albo "Vulkan0". Przy aktywnej pracy na karcie Menedżer zadań pokazuje wzrost zajętej pamięci GPU o rozmiar pliku modelu.
Ile pamięci GPU potrzebuję, żeby uruchomić modele w llama.cpp?
Na karcie z 8 GB zmieści się Gemma 4 12B Q4_0 z krótszym kontekstem, która przy kontekście 32k zajmuje około 8,2 GB. Modele do 14 miliardów parametrów działają na kartach 12-16 GB, a Qwen 3.8 27B Q4_K_M zajął w teście około 17,4 GB.
Jak wyłączyć tryb myślenia w llama.cpp przy modelu Gemma 4?
Do komendy uruchamiającej serwer dopisz --chat-template-kwargs "{"enable_thinking": false}". Ten sam parametr działa w modelach Qwen 3.x, a dla GPT-OSS zamiast tego ustawia się reasoning_effort na low.
