it-swarm.com.de

CUDA-Laufzeit-API-Fehler 38: Es wurde kein CUDA-fähiges Gerät erkannt

Die Situation

Ich habe einen 2-gpu-Server (Ubuntu 12.04), auf dem ich einen Tesla C1060 mit einer GTX 670 umgeschaltet habe. Dann habe ich CUDA 5.0 über 4.2 installiert. Danach habe ich alle Beispiele für simpleMPI ohne Fehler kompiliert. Wenn ich jedoch ./devicequery starte, erhalte ich folgende Fehlermeldung:

[email protected]:~/NVIDIA_CUDA-5.0_Samples/bin/linux/release$ ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected

Was ich versucht habe

Um dieses Problem zu lösen, habe ich alle von CUDA-fähigen Geräten empfohlenen Gedanken ausprobiert, aber ohne Erfolg:

  • /dev/nvidia* ist dort und die Berechtigungen sind 666 (crw-rw-rw-) und der Besitzer root: root

     [email protected]:/dev$ ls -l nvidia*
     crw-rw-rw- 1 root root 195,   0 Oct 24 18:51 nvidia0
     crw-rw-rw- 1 root root 195,   1 Oct 24 18:51 nvidia1
     crw-rw-rw- 1 root root 195, 255 Oct 24 18:50 nvidiactl
    
  • Ich habe versucht, den Code mit Sudo auszuführen

  • CUDA 5.0 installiert gleichzeitig Treiber und Bibliotheken

PShier ist lspci | grep -i nvidia: 

[email protected]:/dev$ lspci | grep -i nvidia
03:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 670] (rev a1)
03:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation G94 [Quadro FX 1800] (rev a1)

[Update]

[email protected]:~/NVIDIA_CUDA-5.0_Samples/bin/linux/release$  nvidia-smi -a
NVIDIA: API mismatch: the NVIDIA kernel module has version 295.59,
but this NVIDIA driver component has version 304.54.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.
Failed to initialize NVML: Unknown Error

Wie könnte das sein, wenn ich mit dem CUDA 5.0-Installationsprogramm gleichzeitig Treiber und Bibliotheken installiere. Könnte die alte 4.2-Version, die noch herumliegt, die Dinge durcheinander bringen?

15
Framester

Ich bin auf dieses Problem gestoßen und bin gerannt

nvidia-smi

informierte mich über eine API-Abweichung. Das Problem war, dass meine Linux-Distribution Updates installiert hatte, die einen Neustart des Systems erforderten. Daher wurde das Problem durch einen Neustart behoben.

10
cratonica

Siehe diese Stapelüberlauf-Frage Installation von cuda 5-Beispielen in Ubuntu 12.10 .

  1. Ubuntu 12 ist (noch) keine unterstützte Linux-Distribution. Referenz siehe Versionshinweise zu CUDA 5.0 Toolkit und Errata

    ** Derzeit unterstützte Distributionen 

    Distribution       32 64  Kernel                 GCC         GLIBC        
    -----------------  -- --  ---------------------  ----------  -------------
    Fedora 16          X  X   3.1.0-7.fc16           4.6.2       2.14.90      
    ICC Compiler 12.1     X                                                   
    OpenSUSE 12.1         X   3.1.0-1.2-desktop      4.6.2       2.14.1       
    Red Hat RHEL 6.x      X   2.6.32-131.0.15.el6    4.4.5       2.12         
    Red Hat RHEL 5.5+     X   2.6.18-238.el5         4.1.2       2.5          
    SUSE SLES 11 SP2      X   3.0.13-0.27-pae        4.3.4       2.11.3       
    SUSE SLES 11.1     X  X   2.6.32.12-0.7-pae      4.3.4       2.11.1       
    Ubuntu 11.10       X  X   3.0.0-19-generic-pae   4.6.1       2.13         
    Ubuntu 10.04       X  X   2.6.35-23-generic      4.4.5       2.12.1    
    
  2. Wenn Sie es trotzdem auf Ubuntu 12 ausführen möchten, lesen Sie die Antwort von rpardo . Es sieht aus wie diese Distro, anstatt 64-Bit-Bibliotheken zu installieren, um /usr/lib64 sie in /usr/lib/x86_64-linux-gnu/ zu installieren.

Ich würde vorschlagen, nach allen Instanzen von libcuda.so und libnvidia-ml.so auf dem System zu suchen. Da der Treiber diese Distribution nicht unterstützt, wurden möglicherweise Bibliotheken in einem Pfad installiert, auf den nicht LD_LIBRARY_PATH verwiesen wird. Verschieben Sie dann die Bibliotheken und/oder ändern Sie den LD_LIBRARY_PATH so, dass er auf diese Position zeigt (es sollte der erste Pfad links sein). Wiederholen Sie dann nvidia-smi oder deviceQuery.

Viel Glück

3
Przemyslaw Zych

Ich habe Fehler 38 für cudaGetDeviceCount auf einer Windows-Maschine mit GTX980-GPU erhalten. Nachdem ich den neuesten Treiber für die GTX 980 von der NVIDIA-Site heruntergeladen, installiert und neu gestartet habe, ist alles in Ordnung. Sieht aus, als würde das CUDA-Installationsprogramm den neuesten Treiber nicht installieren.

1
Manu

Ich hatte ein sehr ähnliches Problem unter Debian und es stellte sich heraus, dass das geladene nvidia-Modul eine andere Version als libcuda1 hatte. 

Um zu überprüfen, ob das nvidia-Modul installiert ist, sollten Sie Folgendes tun: 

  $ Sudo modinfo nvidia-current | grep version
  version:        319.82

Wenn es nicht mit der Version von libcuda1 übereinstimmt, ist dies die Wurzel Ihrer Probleme. 

0
jb.

Führen Sie das Beispiel mit Sudo aus (oder setzen Sie "Sudo su" ein, setzen Sie LD_LIBRARY_PATH auf den Pfad der cuda-Bibliotheken und führen Sie das Beispiel aus, während es sich als root befindet). Da Sie wahrscheinlich CUDA 5.0 mit Sudo installiert haben, laufen die Beispiele offensichtlich nicht mit normalen Benutzern. Wenn Sie jedoch ein Sample mit root ausführen, können Sie auch Samples mit dem regulären Benutzer ausführen! Ich habe das System noch nicht neu gestartet, um zu sehen, ob die Samples auch nach einem Neustart mit normalen Benutzern funktionieren, oder Sie sollten jedes Mal mindestens eine CUDA-Anwendung mit root ausführen.

Das Problem verschwindet möglicherweise vollständig, wenn Sie CUDA TookKit ohne Sudo installieren.

0
hedayat