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.