Przejdź do treści
Artykuły

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.

10 min czytania
llama.cpp na Windowsie: instalacja, czat w przeglądarce i test CUDA

👁 116 przeczytań

// w skrócie
  • 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.

104 tok/sGemma 4 12B na CUDA, RTX 4090
1,9-2,6xtyle wolniej generował Vulkan z winget
4,6 swczytanie modelu 7 GB z dysku
0 złlicencja MIT, bez konta i limitów

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:

  1. Wejdź na stronę wydań projektu na GitHubie (link w źródłach) i otwórz najnowsze wydanie.
  2. Pobierz dwa pliki: llama-bXXXXX-bin-win-cuda-12.4-x64.zip (u mnie 262 MB) i cudart-llama-bin-win-cuda-12.4-x64.zip (391 MB, biblioteki CUDA - nie musisz instalować całego CUDA Toolkit).
  3. Rozpakuj oba do jednego folderu, np. D:\AI\llama-cuda.
  4. 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 poleceniaCUDA: wczytanie polecenia
Gemma 4 12B, Q4_0 (7,0 GB)53,8 tok/s104,2 tok/s381 tok/s7667 tok/s
Bielik 11B v3, Q8_0 (11,9 GB)27,7 tok/s71,8 tok/s4418 tok/s7889 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ść.

Czat llama-server w przeglądarce z odpowiedzią Gemmy 4 12B po polsku i szybkością 99,5 tokena na sekundę
Wbudowany czat llama-server z Gemmą 4 12B: 111 tokenów w 1,1 s, czyli 99,5 tokena na sekundę (RTX 4090, 26.09.2026).

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.

ModelPlikPamięć karty z kontekstem 32kSzybkość odpowiedzi (CUDA)
Gemma 4 12B Q4_07,0 GBok. 8,2 GB104 tok/s
Bielik 11B v3 Q8_011,9 GBok. 17,0 GB72 tok/s
Qwen 3.8 27B Q4_K_M16,5 GBok. 17,4 GB50 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.

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.

Zobacz, co jest dostępne

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.

Google · Twoje źródłaPromptowy wyżej w Twoim Google - jednym kliknięciemDodaj do preferowanych źródeł →

Ź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.

// Newsletter

Cały tydzień w AI, w jednym mailu

Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.

Zapisz się za darmo →
Za darmo. Wypisujesz się jednym kliknięciem.

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.

// czytaj też

Podobne tematy na Promptowym

Piotr Olszewski

Piotr Olszewski

ADMINISTRATOR

Piotr Olszewski - twórca i autor Promptowego, polskiego serwisu o sztucznej inteligencji. Codziennie śledzi premiery modeli, narzędzia i regulacje AI, i tłumaczy je prostym, konkretnym językiem.

// mapa strony

🛒 Sklep Kinetyka Google AI Gemini Pro 170 zł CapCut Pro 460 zł/rok n8n Cloud Starter 320 zł/rok Zobacz wszystko →
promptowy w liczbach 0tekstów w archiwum0newsów z ostatnich 7 dni0modeli wideo w obserwatorium0zagadek w grach
× ‹ powiększenie ›