Ollama CUDA out of memory na Linux — jak naprawić błąd alokacji VRAM

Błąd CUDA out of memory lub cudaMalloc failed w Ollamie zatrzymuje lokalne modele AI. Sprawdź 4 metody strojenia pamięci VRAM i Modelfile na systemach Linux.

Błąd „CUDA out of memory” lub „cudaMalloc failed” w Ollamie na Linuxie oznacza, że model językowy wraz z buforem kontekstu (KV cache) przekroczył dostępną fizyczną pamięć VRAM karty graficznej. Najszybszą naprawą jest ograniczenie wielkości kontekstu (num_ctx), włączenie Flash Attention (OLLAMA_FLASH_ATTENTION=1) lub ręczne zdefiniowanie liczby warstw ładowanych do GPU za pomocą parametru num_gpu.

Dlaczego Ollama rzuca błąd CUDA out of memory?

Podczas ładowania modelu LLM (np. Llama-3, Bielik 11B czy DeepSeek-Coder) Ollama dynamicznie kalkuluje, ile warstw sieci neuronowej zmieści się w pamięci VRAM GPU, a ile musi trafić do pamięci RAM procesora (tzw. CPU offloading). Błąd alokacji CUDA pojawia się, gdy:

  • Rozmiar bufora kontekstu (Context Window) dynamicznie rośnie podczas długich zapytań (KV cache pochłania gigabajty pamięci VRAM).
  • Inne procesy na serwerze (np. desktop, przeglądarka lub inny kontener) zajmują VRAM bez wiedzy Ollamy.
  • Ollama próbuje uruchomić równoległe zapytania (OLLAMA_NUM_PARALLEL > 1) bez odpowiedniego zapasu pamięci.

4 sprawdzone metody eliminacji błędu VRAM w Ollamie

1. Włączenie Flash Attention (Oszczędność 30–50% VRAM)

Flash Attention optymalizuje alokację pamięci dla mechanizmu uwagi (attention mechanism), dramatycznie zmniejszając zapotrzebowanie na pamięć VRAM przy długich promptach.

Dodaj zmienną środowiskową do usługi systemd Ollamy (/etc/systemd/system/ollama.service.d/override.conf):

[Service]
Environment="OLLAMA_FLASH_ATTENTION=1"

Zastosuj zmiany poleceniami:

sudo systemctl daemon-reload
sudo systemctl restart ollama

2. Kontrola wielkości kontekstu (num_ctx) w Modelfile

Domyślny kontekst nowoczesnych modeli (często 8k, 32k lub 128k tokenów) potrafi zająć więcej VRAM niż same wagi modelu. Jeśli nie analizujesz całych książek naraz, ogranicz kontekst do realnych potrzeb (np. 4096 tokenów):

FROM bielik:latest
PARAMETER num_ctx 4096

Zbuduj zoptymalizowany model poleceniem:

ollama create bielik-fast -f Modelfile

3. Ograniczenie liczby równoległych sesji (OLLAMA_NUM_PARALLEL)

Domyślnie nowsze wersje Ollamy potrafią alokować pamięć pod 4 równoległe zapytania jednocześnie. Na kartach z 6GB–12GB VRAM prowadzi to natychmiast do błędu cudaMalloc failed.

Ustaw limit równoległych zapytań na 1:

[Service]
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_MAX_LOADED_MODELS=1"

4. Precyzyjne sterowanie podziałem warstw (num_gpu) przez API

Jeśli model rzuca błąd przy pełnym załadowaniu do karty graficznej, możesz wymusić zrzucenie kilku ostatnich warstw do pamięci systemowej RAM procesora. W zapytaniu API podaj parametr num_gpu:

curl http://localhost:11434/api/generate -d '{
  "model": "bielik:latest",
  "prompt": "Podsumuj logi serwera:",
  "options": {
    "num_gpu": 24,
    "num_ctx": 4096
  }
}'

Diagnostyka na żywo

Podczas pracy z modelem monitoruj realne zużycie VRAM w osobnym oknie terminala za pomocą:

watch -n 1 nvidia-smi
ollama ps

Polecenie ollama ps pokaże Ci dokładnie, jaki procent modelu został zaalokowany w 100% GPU, a jaki trafił do CPU RAM.

Często zadawane pytania

Co oznacza błąd cudaMalloc failed w logach Ollamy? +
Oznacza to, że sterownik NVIDIA odrzucił żądanie przydziału kolejnego bloku pamięci fizycznej VRAM, ponieważ karta jest zapełniona lub pamięć uległa fragmentacji.
Czy Ollama może działać wyłącznie na pamięci RAM procesora (CPU)? +
Tak, jeśli GPU nie ma wystarczającej pamięci, Ollama potrafi uruchomić model w 100% na procesorze CPU, jednak czas generowania odpowiedzi będzie kilkukrotnie dłuższy.
Jak sprawdzić, ile pamięci VRAM wymaga dany model przed uruchomieniem? +
Przyjmuje się regułę: rozmiar pliku modelu GGUF (w GB) + 1.5–2 GB zapasu na pamięć kontekstu (KV cache przy 4k tokenów). Np. model 8B Q4 wymaga około 5.5 GB VRAM.

Masz podobny problem do rozwiązania?

Napisz — wycenię i powiem szczerze czy warto.

Skontaktuj się →