Artykuł Technologie

Ollama nie używa GPU - jak naprawić i przyspieszyć modele

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.

  1. 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_ctx zmniejsza 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=0 w ś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.