Start / Poradniki / Rozwiązywanie problemów / Windows
WindowsLinux
Autor: Jakub Rusinowski · Ostatnia aktualizacja: 22 czerwca 2026
Edukator AI i prowadzący warsztaty z wdrażania lokalnych modeli LLM
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)
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”.
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.
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ć.
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.
# 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> /FPrzy 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.
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:
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:TrueJeś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.
# llama.cpp: keep 20 layers on the GPU, the rest on CPU
./llama-cli -m model.gguf --n-gpu-layers 20Dotyczy także: Linux
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.
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ę.
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.
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.