Jeśli Ollama liczy modele na CPU zamiast na GPU, najczęstsze przyczyny to brak sterowników CUDA/ROCm, za mało VRAM na załadowanie modelu albo Ollama w Dockerze bez przekazanego GPU. Sprawdź ollama ps - kolumna PROCESSOR pokaże CPU czy GPU. Poniżej naprawa krok po kroku dla NVIDIA, AMD i Dockera.
W skrócie: to prawie nigdy nie jest awaria samej Ollamy - problem siedzi warstwę niżej, w sterowniku, konfiguracji kontenera albo w za małej pamięci karty. Najpierw daję Ci szybką diagnozę, potem uporządkowaną ścieżkę objaw - przyczyna - rozwiązanie dla każdej platformy. Na końcu podpowiadam, co zrobić, gdy karta jest po prostu za słaba na model, którego potrzebujesz - i którą kartę albo serwer wtedy wybrać.
Szybka diagnoza - czy Ollama w ogóle widzi GPU
Sprawdź: zanim cokolwiek zmienisz, ustal fakty. Kolejność diagnozy jest zawsze taka sama - najpierw co Ollama realnie robi, potem czy system widzi kartę, na końcu logi.
# 1. Co Ollama realnie robi? Kolumna PROCESSOR: 100% GPU / 100% CPU / split (np. 48%/52%)
ollama ps
# 2. Czy system widzi kartę NVIDIA i czy proces "ollama" jest na liście procesów GPU
nvidia-smi
# 3. Logi usługi Ollama (Linux, systemd) - szukaj błędów ładowania CUDA i warstw
journalctl -u ollama -f
# 4. Szczegółowy log detekcji GPU i offloadu warstw
OLLAMA_DEBUG=1 ollama serve
Kluczowa jest kolumna PROCESSOR w ollama ps. Trzy możliwe stany: 100% GPU (wszystko liczy karta - jest dobrze), 100% CPU (karta w ogóle nieużywana - problem ze sterownikiem lub Dockerem) oraz split w rodzaju 48%/52% CPU/GPU (model nie zmieścił się w całości w VRAM). Ten trzeci stan mylnie wygląda jak "działa, ale wolno" - w praktyce to sygnał za małej pamięci karty, nie brak GPU.
| Objaw | Prawdopodobna przyczyna | Idź do sekcji |
|---|---|---|
100% CPU mimo karty NVIDIA |
brak lub nieaktualny sterownik NVIDIA / CUDA | Naprawa NVIDIA |
| Ollama w kontenerze liczy na CPU | brak NVIDIA Container Toolkit lub flagi --gpus all |
Ollama w Dockerze |
nvidia-smi działa, Ollama dalej na CPU po aktualizacji |
Secure Boot blokuje moduł, moduł nieprzebudowany | Secure Boot i DKMS |
| Split CPU/GPU, działa wolno | model nie mieści się w VRAM | Model nie mieści się w VRAM |
| Karta AMD ignorowana | brak lub niewspierany ROCm | Naprawa AMD i Apple |
Dlaczego to ważne - CPU kontra GPU w inferencji LLM
Konkret: różnica między liczeniem modelu na CPU a na GPU to nie kilka procent, to rząd wielkości. Inferencja na samym procesorze jest kilka do kilkunastu razy wolniejsza - odpowiedź generuje się mozolnie, słowo po słowie, podczas gdy ta sama karta wypluwa tekst płynnie. Dokładne tokeny na sekundę zależą od karty i modelu, ale kierunek jest zawsze ten sam: do wygodnej pracy z lokalnym LLM GPU jest praktycznie obowiązkowe. Jeśli dziś czekasz na odpowiedź kilkanaście sekund, po przeniesieniu modelu na kartę dostaniesz ją niemal od razu.
Skąd bierze się split CPU/GPU. Ollama ładuje na kartę tyle warstw modelu (layers), ile zmieści się w pamięci VRAM, a resztę liczy na CPU. Dlatego pojawia się stan pośredni - część modelu na GPU, część na procesorze. Im więcej warstw wyląduje na CPU, tym wolniej. Dwie dźwignie, które to zmieniają, to ilość dostępnego VRAM oraz kwantyzacja modelu (wariant Q4_K_M zajmuje mniej pamięci niż Q8), o czym za chwilę.
Wymagania wstępne - czy Twój sprzęt uciągnie akcelerację
Zanim zaczniesz naprawiać, sprawdź, czy karta w ogóle kwalifikuje się do akceleracji. Zgodnie z dokumentacją Ollama (docs.ollama.com/gpu):
- NVIDIA - wymagana compute capability na poziomie 5.0 lub wyższym, zainstalowane sterowniki oraz CUDA. To pokrywa zdecydowaną większość kart z ostatnich lat, od serii GeForce GTX 900 wzwyż.
- AMD - wsparcie przez ROCm, ale tylko dla kart z oficjalnej listy wspieranych GPU. Dla modeli spoza listy istnieje obejście, które pokazuję w sekcji o AMD.
- Apple Silicon - akceleracja Metal działa out-of-the-box, bez instalowania sterowników.
Reguła VRAM (orientacyjnie): pamięć zajmowana przez model to mniej więcej rozmiar pliku modelu plus narzut na kontekst. Model klasy 7B w kwantyzacji Q4 potrzebuje orientacyjnie 5-6 GB VRAM, a 13B około 9-10 GB. To punkt startowy, nie sztywna reguła - dokładne wymagania per model i wariant kwantyzacji sprawdzisz w rankingu modeli pod dostępny VRAM sterownik potrafi się rozjechać i wymaga ponownej instalacji.
- Zrestartuj usługę Ollama i sprawdź ponownie.
# Restart usługi po naprawie sterownika (Linux, systemd)
systemctl restart ollama
# Weryfikacja: kolumna PROCESSOR powinna teraz pokazać GPU
ollama ps
Pro tip admina: jeśli nvidia-smi działa poprawnie, ale Ollama nadal upiera się przy CPU, przejrzyj logi startu przez OLLAMA_DEBUG=1 ollama serve. Tam zobaczysz, na jakim etapie detekcji GPU coś się wykłada - najczęściej to brakująca biblioteka CUDA albo konflikt wersji. Druga częsta pułapka na laptopach: po uśpieniu i wybudzeniu systemu Ollama gubi kartę - wtedy pomaga restart usługi.
Ollama z GPU w Dockerze i docker compose
Trade-off Dockera: dostajesz izolację i przenośność, ale kontener domyślnie nie widzi karty hosta. Musisz mu ją jawnie przekazać. To najczęstszy powód, dla którego Ollama w kontenerze uparcie liczy na CPU - kontener po prostu nie ma dostępu do GPU.
Dwa warunki muszą być spełnione: na hoście zainstalowany NVIDIA Container Toolkit, a kontener uruchomiony z przekazaniem GPU. Dla docker run służy do tego flaga --gpus all:
# Uruchomienie kontenera Ollama z przekazaniem wszystkich GPU hosta
docker run --gpus all -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Przy uruchamianiu przez docker compose odpowiednikiem jest sekcja deploy.resources.reservations.devices:
# docker-compose.yml - rezerwacja GPU dla usługi Ollama
services:
ollama:
image: ollama/ollama
ports:
- "11434:11434" # port API Ollama
volumes:
- ollama:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama:
Sprawdź, czy kontener realnie widzi kartę - komenda musi zwrócić tabelę nvidia-smi z wnętrza kontenera:
# Weryfikacja dostępu do GPU wewnątrz kontenera
docker exec -it ollama nvidia-smi
Jeśli ta komenda zwraca błąd, GPU nie zostało przekazane - wróć do flagi --gpus all albo sekcji devices i upewnij się, że Container Toolkit jest zainstalowany na hoście. Pełny setup kontenera wraz z instalacją NVIDIA Container Toolkit rozkładam w osobnym wpisie Ollama w Dockerze krok po kroku i Apple Silicon (Metal)
Karty AMD działają z Ollamą przez ROCm, ale tylko te z oficjalnej listy wspieranych GPU. Konkret: jeśli Twoja karta jest nowsza lub nieco spoza listy, a mimo to opiera się na obsługiwanej architekturze (jak RDNA2 w Radeonach serii RX 6000), można wymusić rozpoznanie zmienną środowiskową:
# Wymuszenie wersji architektury GPU dla kart AMD spoza oficjalnej listy ROCm
# Wartość dobierz do swojej karty wg dokumentacji ROCm
export HSA_OVERRIDE_GFX_VERSION=10.3.0
systemctl restart ollama
Aktualną listę wspieranych kart AMD oraz właściwą wartość HSA_OVERRIDE_GFX_VERSION dla Twojego modelu znajdziesz w dokumentacji na docs.ollama.com - lista rośnie z kolejnymi wersjami ROCm, więc zawsze bierz ją z pierwszej ręki. Gdy ROCm nie wchodzi w grę, nowsze karty potrafią liczyć przez backend Vulkan - to sensowny plan awaryjny.
Apple Silicon (M1 i nowsze) używa Metal automatycznie. Jeśli mimo to inferencja idzie wolno na CPU, najczęstsza przyczyna to zbyt stary macOS albo uruchomienie wersji x86 pod emulacją Rosetta zamiast natywnej aplikacji arm64. Rozwiązanie: zaktualizuj system i pobierz natywny build arm64. Możesz też sterować liczbą warstw ładowanych na GPU zmienną OLLAMA_NUM_GPU albo parametrem num_gpu w Modelfile - przydatne, gdy chcesz świadomie ograniczyć obciążenie karty.
Model nie mieści się w VRAM - tuning i kompromisy
To najczęstszy powód, dla którego "GPU działa, ale wolno". W ollama ps widzisz split, na przykład 40%/60% CPU/GPU. Oznacza to, że model jest za duży na Twoją pamięć karty i Ollama część warstw zrzuciła na CPU. Cztery dźwignie, które to naprawiają, od najprostszej:
- Niższa kwantyzacja. Wybierz wariant Q4 zamiast Q5 lub Q8. Kwantyzacja to najszybszy sposób zmieszczenia większego modelu w całości na GPU - kosztem drobnej utraty jakości odpowiedzi.
- Mniejszy model. Zejdź o klasę niżej (na przykład 8B zamiast 14B). Mniejszy model w całości na GPU zwykle bije większy liczony w splicie.
- Krótszy kontekst. Parametr
num_ctxzmniejsza narzut pamięci na okno kontekstu - mniej tokenów kontekstu to mniej zajętego VRAM. - Zwolnij VRAM. Zamknij procesy zjadające pamięć karty - przeglądarkę z wieloma kartami, grę, inne załadowane modele.
Pro tip admina: jeśli chcesz z góry wiedzieć, czy dany model w ogóle wejdzie w Twoją kartę, pomaga porównanie LM Studio i Ollamy zmieniają się szybko.
| Karta | VRAM | Pod jakie modele |
|---|---|---|
| GeForce RTX 4060, RTX 3060 Ti | 8 GB | modele do ~7-8B w Q4, krótszy kontekst |
| GeForce RTX 3060 (wariant 12 GB) | 12 GB | komfortowo 7-8B, 13B w splicie |
| GeForce RTX 4060 Ti (16 GB), RTX 4070 Ti SUPER | 16 GB | 13-14B w Q4 w całości na GPU |
| GeForce RTX 3090, RTX 4090 | 24 GB | modele klasy 30B, sweet spot selfhostingu |
| RTX A6000 | 48 GB | duże modele i praca profesjonalna |
Trade-off: nowa karta z dużym VRAM to wydatek rzędu kilku tysięcy złotych, a używana z rynku wtórnego bywa dwa razy tańsza przy tej samej pamięci - kosztem gwarancji. Realny koszt (3 lata): do tego dolicz rachunek za prąd, bo model liczony 24/7 na mocnej karcie potrafi zauważalnie podbić fakturę za energię.
Ścieżka B - serwer albo VPS z GPU. To sensowniejsze niż zakup topowej karty, gdy potrzebujesz pracy 24/7, większych modeli niż uciągnie domowy sprzęt albo dostępu dla całego zespołu. Trade-off: nie zamrażasz kilku tysięcy w karcie, która za rok będzie za słaba - płacisz za moc wtedy, kiedy jej używasz, i skalujesz w górę bez wymiany sprzętu. Rozwiązuje to też problem prądu i hałasu przy całodobowej inferencji na własnym biurku.
Jeśli lokalna karta nie wyrabia, a nie chcesz kupować drogiego GPU pod okazjonalne zadania, rozsądnie jest wynająć maszynę z kartą w chmurze. Ważne: zwykły hosting współdzielony ani klasyczny VPS nie mają GPU - potrzebujesz dostawcy chmury GPU rozliczanego za godzinę pracy karty, na przykład RunPod, Vast.ai albo Lambda. Płacisz tylko za czas realnego liczenia, bez inwestycji w sprzęt.
Ceny sprawdzaj w aktualnej ofercie, bo konfiguracje z GPU zmieniają się szybko. Zanim wybierzesz kartę albo serwer, dopasuj model do budżetu pamięci w rankingu modeli pod VRAM albo Secure Boot blokuje moduł.
- Dwie instancje Ollamy - jedna na hoście, druga w Dockerze, walczą o port 11434 i o VRAM. Zatrzymaj zbędną.
OLLAMA_NUM_GPU=0w środowisku - ktoś kiedyś wymusił CPU i zostawił zmienną. Usuń ją z env.- WSL2 na Windows - passthrough GPU wymaga zainstalowania dedykowanego sterownika NVIDIA dla WSL, nie zwykłego sterownika Windows.
Jak zapobiec: po każdej aktualizacji systemu zrób krótki test - ollama ps na dowolnym modelu i sprawdzenie kolumny PROCESSOR. Wyłapiesz zniknięcie GPU, zanim zrobi się z tego problem w środku pracy. Jeśli dopiero zaczynasz z narzędziem, zacznij od kompletnego przewodnika po Ollamie. Dla pewności sprawdź jeszcze nvidia-smi - proces ollama powinien być widoczny na liście procesów korzystających z karty.
Dlaczego Ollama działa na CPU mimo karty NVIDIA?
Najczęściej brakuje działających sterowników NVIDIA lub CUDA - zacznij od nvidia-smi. Jeśli komenda nie działa, przeinstaluj sterownik i CUDA. Częsty przypadek to karta znikająca po aktualizacji jądra (potrzebna przebudowa modułu DKMS) albo Secure Boot blokujący niepodpisany moduł. Po naprawie wykonaj systemctl restart ollama.
Jak uruchomić Ollamę z GPU w Dockerze?
Zainstaluj NVIDIA Container Toolkit na hoście i uruchom kontener z flagą --gpus all. W docker compose użyj sekcji deploy.resources.reservations.devices z driver: nvidia i capabilities: [gpu]. Sprawdź dostęp komendą docker exec -it ollama nvidia-smi - jeśli zwróci tabelę karty, kontener widzi GPU poprawnie.
Ile VRAM potrzebuje Ollama?
Zależy od modelu i jego kwantyzacji. Orientacyjnie model 7B w wariancie Q4 potrzebuje około 5-6 GB VRAM, a 13B około 9-10 GB. Jeśli karta ma mniej pamięci, Ollama część warstw zrzuci na CPU (split), co spowalnia pracę. Dokładne wymagania per model sprawdzisz w rankingu modeli pod VRAM.
Czy Ollama wspiera karty AMD?
Tak, przez ROCm, ale tylko karty z oficjalnej listy wspieranych GPU. Dla modeli spoza listy, które opierają się na obsługiwanej architekturze, można wymusić rozpoznanie zmienną HSA_OVERRIDE_GFX_VERSION dobraną do karty. Aktualną listę wspieranych kart i właściwą wartość znajdziesz w dokumentacji na docs.ollama.com.
Lepiej kupić mocniejszą kartę czy wynająć serwer z GPU?
To zależy od obciążenia. Do okazjonalnej pracy i mniejszych modeli opłaca się mocniejsza karta lokalnie - pod LLM liczy się głównie ilość VRAM, a używany RTX 3090 z 24 GB daje dużo pamięci za rozsądne pieniądze. Do pracy całodobowej, dużych modeli lub dostępu zespołowego rozsądniejszy bywa wynajem serwera z GPU, bo nie inwestujesz w sprzęt, który szybko się zestarzeje, i płacisz za moc wtedy, gdy jej używasz.