„No CUDA-capable device is detected” — jak to naprawić
GPU stoi w komputerze, a CUDA twierdzi, że nie ma żadnego urządzenia
Autor Jakub Rusinowski
Błąd
RuntimeError: No CUDA-capable device is detected
Kiedy się pojawia
Twój kod albo środowisko w ogóle nie znajduje GPU — torch.cuda.is_available() zwraca False, a wszystko, co potrzebuje CUDA, poddaje się natychmiast. Karta fizycznie jest, ale stos programowy jej nie widzi.
Co się właściwie dzieje
W przeciwieństwie do błędu braku pamięci ten dotyczy widoczności, nie pojemności. Coś w łańcuchu — sterownik NVIDII, środowisko uruchomieniowe CUDA, build frameworka z obsługą CUDA albo zmienna środowiskowa — jest zepsute lub niedopasowane, więc GPU nigdy nie trafia do twojego procesu. Typowe przyczyny: brakujący lub przestarzały sterownik, instalacja PyTorcha wyłącznie na CPU, CUDA_VISIBLE_DEVICES ustawione na pustą wartość albo praca w kontenerze bez przepuszczonego GPU.
Jak to naprawić
- 1
Sprawdź, czy sterownik widzi GPU
Zacznij od dołu stosu.
nvidia-smirozmawia bezpośrednio ze sterownikiem — jeśli wypisuje twoją kartę, sterownik jest w porządku, a problem leży wyżej: we frameworku albo w toolkicie. Jeśli samonvidia-smizawodzi lub nic nie pokazuje, najpierw zainstaluj albo zaktualizuj sterownik NVIDII; nic powyżej nie zadziała, dopóki to nie działa.nvidia-smi - 2
Zainstaluj build frameworka z obsługą CUDA
Zwykłe
pip install torchpotrafi ściągnąć wheel tylko na CPU, który nigdy nie zobaczy GPU. Zainstaluj ponownie build CUDA pasujący do twojego sterownika. Po instalacji sprawdź z poziomu Pythona, czy CUDA jest już dostępna.# example: CUDA 12.1 build of PyTorch pip install torch --index-url https://download.pytorch.org/whl/cu121 python -c "import torch; print(torch.cuda.is_available())" - 3
Sprawdź CUDA_VISIBLE_DEVICES
Jeśli ta zmienna jest ustawiona na pusty ciąg albo na nieistniejący indeks, CUDA ukrywa wszystkie karty. Usuń ją (albo wpisz poprawny indeks) i spróbuj ponownie.
echo $CUDA_VISIBLE_DEVICES # if empty-string or wrong, fix it: unset CUDA_VISIBLE_DEVICES - 4
W Dockerze przepuść GPU do kontenera
Kontenery domyślnie nie dostają GPU. Potrzebujesz NVIDIA Container Toolkit zainstalowanego na hoście oraz flagi
--gpus allprzydocker run— inaczej kontener nie zobaczy żadnego urządzenia CUDA.docker run --gpus all <image> - 5
Gdy CUDA już działa, sprawdź, czy model się mieściNajczęstsze rozwiązanie
Kiedy GPU wreszcie staje się widoczne, następną ścianą jest zwykle pamięć — model okazuje się za duży na kartę. Warto załatwić to od razu: sprawdź, który model i która kwantyzacja mieszczą się w twoim VRAM-ie, żeby nie zamienić błędu widoczności na błąd braku pamięci.
Sprawdź, co pasuje do Twojego sprzętugdy GPU jest już wykrywane, sprawdź, które modele zmieszczą się w jego VRAM-ieOtwórz kalkulator VRAM →
Powiązane
Najczęściej zadawane pytania
Czy „No CUDA-capable device is detected” oznacza usterkę sprzętu?
Rzadko. Prawie zawsze chodzi o oprogramowanie i widoczność: brakujący lub niedopasowany sterownik, build frameworka wyłącznie na CPU albo ustawienie środowiska czy kontenera. Zacznij od nvidia-smi — jeśli on widzi kartę, ze sprzętem wszystko jest w porządku.
`nvidia-smi` działa, a PyTorch dalej nie widzi urządzenia. Dlaczego?
To wskazuje na instalację PyTorcha tylko na CPU albo na złą wersję CUDA. Zainstaluj ponownie build CUDA pasujący do sterownika i sprawdź torch.cuda.is_available() jeszcze raz.
Czy muszę mieć zainstalowany pełny CUDA Toolkit?
Przy większości gotowych frameworków (PyTorch, Ollama, wydania llama.cpp) wystarczy w miarę nowy sterownik NVIDII — środowisko uruchomieniowe CUDA jest w pakiecie. Pełny toolkit jest potrzebny głównie wtedy, gdy sam kompilujesz kod CUDA.