Start / Poradniki / Rozwiązywanie problemów / Windows

CUDA out of memory — dlaczego się pojawia i jak to naprawić

WindowsLinux

Autor: Jakub Rusinowski · Ostatnia aktualizacja: 22 czerwca 2026

Edukator AI i prowadzący warsztaty z wdrażania lokalnych modeli LLM

Komunikat błędu

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 2.00 GiB (GPU 0; 8.00 GiB total capacity; 7.21 GiB already allocated)

Kiedy się pojawia

Model zaczyna się ładować, wentylatory GPU ruszają — i nagle koniec, zwykle dokładnie w chwili, gdy wagi albo pierwsza partia danych trafiają na kartę. Zobaczysz to w PyTorchu, w text-generation-webui, w vLLM, a także pod spodem wielu zgłoszeń w stylu „po prostu się wysypało”.

Co się właściwie dzieje

Nie ma tu żadnej zagadki: model potrzebuje więcej pamięci GPU, niż ma twoja karta. Liczba po „Tried to allocate” plus to, co jest „already allocated”, przekracza wartość „total capacity”. Ta ostatnia to twój realny sufit VRAM-u — na większości kart konsumenckich 8, 12, 16 albo 24 GB. Wagi modelu, cache KV dla twojego kontekstu i własny narzut PyTorcha czerpią z tej samej puli.

Jak to naprawić

1. Weź mniejszy model albo niższą kwantyzację — to jest właściwe rozwiązanie Najczęstsze rozwiązanie

W dziewięciu przypadkach na dziesięć uczciwa odpowiedź brzmi: model jest po prostu za duży na tę kartę. Model 7B w pełnym FP16 potrzebuje około 14 GB na same wagi; ten sam model w Q4_K_M zmieści się w 4–5 GB, a przy większości zadań różnicy w jakości nie zauważysz. Zejście o jeden poziom kwantyzacji albo o jeden rozmiar modelu rozwiązuje problem na stałe, zamiast zamiatać go pod dywan. Najszybciej sprawdzisz, co faktycznie się mieści, porównując swoją kartę z biblioteką modeli, zamiast zgadywać.

Sprawdź, co zmieści się na twoim sprzęcie — sprawdź, która kwantyzacja twojego modelu zmieści się w twoim VRAM-ie
Otwórz kalkulator VRAM →

2. Zwolnij to, co już trzyma VRAM

Spójrz na wartość already allocated — jeśli jest wysoka, zanim jeszcze załadowałeś swój model, kartę okupuje coś innego: poprzedni proces, który nie zakończył się czysto, kernel Jupytera, przeglądarka korzystająca z GPU albo drugi egzemplarz twojego programu. Sprawdź, co siedzi w pamięci, i ubij maruderów.

multiple shells — see comments
# Linux / macOS (bash) — nvidia-smi lists the PIDs holding memory
nvidia-smi
kill <PID>

# Windows (PowerShell) — same list, then stop the process
nvidia-smi
Stop-Process -Id <PID>

# Windows (cmd)
taskkill /PID <PID> /F

3. Zmniejsz rozmiar wsadu i długość kontekstu

Przy treningu albo wnioskowaniu wsadowym to zwykle wsad przeważa szalę. Ustaw najpierw rozmiar wsadu na 1 i sprawdź, czy model w ogóle się ładuje. Drugim cichym pożeraczem pamięci jest długi kontekst — cache KV rośnie wraz z długością sekwencji, więc model, który bez problemu wchodzi przy 2K tokenów, przy 32K skończy na OOM. Przytnij max_seq_len albo --ctx-size do tego, czego naprawdę potrzebujesz.

4. Ogranicz fragmentację pamięci (PyTorch)

Czasem VRAM-u masz *wystarczająco*, ale jest pofragmentowany, przez co pojedyncza duża alokacja się nie udaje. Pozwolenie alokatorowi na powiększanie segmentów zwykle odzyskuje ten zapas. Ustaw to przed uruchomieniem skryptu:

bash
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

5. Przenieś część warstw na CPU (llama.cpp / Ollama)

Jeśli pracujesz na narzędziach GGUF i brakuje ci naprawdę niewiele, możesz przerzucić część warstw do RAM-u systemowego przez --n-gpu-layers. Będzie wolniej niż w całości na GPU, ale to różnica między „działa” a „nie działa”. Pamiętaj, że to obejście, a nie darmowy zysk — jeśli offloadujesz większość modelu, potrzebujesz po prostu mniejszego.

bash
# llama.cpp: keep 20 layers on the GPU, the rest on CPU
./llama-cli -m model.gguf --n-gpu-layers 20

Dotyczy także: Linux

Powiązane

Model, który mieści się na większości zestawów:
Zobacz model i wymagania →

Najczęstsze pytania

Czy „CUDA out of memory” oznacza, że moje GPU jest zepsute?

Nie. To zwyczajny, przewidziany komunikat, który mówi tylko tyle, że model potrzebował więcej VRAM-u, niż karta ma wolnego. Ze sprzętem wszystko w porządku — to model jest dla niego za duży w wybranym rozmiarze albo poziomie kwantyzacji.

Ile VRAM-u potrzebuję, żeby uniknąć CUDA out of memory?

To zależy wyłącznie od modelu i kwantyzacji. Z grubsza: model 7–8B w Q4 potrzebuje około 5–6 GB, model 13–14B mniej więcej 9–10 GB, a model 70B — ponad 40 GB albo agresywnej kwantyzacji. Zamiast opierać się na regule kciuka, sprawdź konkretny model i konkretną kartę, żeby dostać dokładną liczbę.

Czy niższa kwantyzacja pogorszy jakość?

Znacznie mniej, niż większość osób się spodziewa. Q4_K_M i Q5_K_M to złoty środek dla większości zastosowań lokalnych — spadek jakości względem FP16 jest niewielki i przy czacie, kodowaniu czy streszczaniu zwykle niezauważalny. Dopiero poniżej Q4 (Q3, Q2) degradacja staje się wyraźna.

Ustawiłem expandable_segments, a i tak się wysypuje. Co teraz?

To znaczy, że VRAM-u naprawdę brakuje, a sztuczka z fragmentacją nie wyczaruje pamięci, której nie ma. Zejdź o jeden rozmiar modelu albo o jeden poziom kwantyzacji — to jest trwałe rozwiązanie.