web-dev-qa-db-fra.com

Aucun périphérique compatible CUDA n'est détecté bien que les exigences soient installées

Problème

Je viens d'installer cuda en suivant le instructions d'installation officielles via le fichier .deb. En ce qui concerne section 6.2.2. (exécutant deviceQuery), je reçois le message qu'aucun périphérique compatible CUDA n'a été trouvé bien que je sois à peu près sûr que tout est correctement configuré:

$ ./bin/x86_64/linux/release/deviceQuery
./bin/x86_64/linux/release/deviceQuery Starting...

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

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected
Result = FAIL

Informations système

Voici quelques informations sur mon système:

$ uname -m && cat /etc/*release
x86_64
DISTRIB_RELEASE=16.04
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
VERSION="16.04.2 LTS (Xenial Xerus)"

$ uname -r
4.4.0-64-generic

$ lspci | grep -i nvidia
08:00.0 3D controller: NVIDIA Corporation GK208M [GeForce 920M] (rev a1)

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

J'ai également vérifié que les en-têtes du noyau sont installés:

$ Sudo apt-get install linux-headers-$(uname -r)
linux-headers-4.4.0-64-generic is already the newest version (4.4.0-64.85).

Installation de CUDA

Donc, mon système remplit toutes les conditions préalables. J'ai ensuite suivi les instructions pour le installation via apt-get (j'ai installé cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_AMD64.deb).

PATH et LD_LIBRARY_PATH sont configurés pour pointer vers les emplacements requis:

$ echo $PATH
/usr/local/cuda-8.0/bin:[...]

$ echo $LD_LIBRARY_PATH 
/usr/local/cuda-8.0/lib64

Notez que j’ai configuré manuellement LD_LIBRARY_PATH bien que cela ait été mentionné comme étant nécessaire uniquement pour l’installation du fichier d’exécution. Cependant, l'erreur persiste lors de la réinitialisation de LD_LIBRARY_PATH.

Les pilotes NVIDIA semblent également être à jour:

$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  367.57  Mon Oct  3 20:37:01 PDT 2016
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)

Informations sur le pilote du compilateur cuda:

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

Les instructions indiquent qu'il pourrait s'agir d'un problème d'autorisation de fichier:

Si un périphérique compatible CUDA et le pilote CUDA sont installés mais que deviceQuery signale qu'aucun périphérique compatible CUDA n'est présent, cela signifie probablement que les fichiers/dev/nvidia * sont manquants ou dotés des autorisations incorrectes.

Ces fichiers n'avaient pas l'indicateur d'exécution que j'ai ensuite ajouté:

$ ls -al /dev/nvidia*
crwxrwxrwx 1 root root 195,   0 Feb 27 13:17 /dev/nvidia0
crwxrwxrwx 1 root root 195, 255 Feb 27 13:17 /dev/nvidiactl
crwxrwxrwx 1 root root 195, 254 Feb 27 13:17 /dev/nvidia-modeset
crwxrwxrwx 1 root root 243,   0 Feb 27 13:17 /dev/nvidia-uvm
crwxrwxrwx 1 root root 243,   1 Feb 27 18:24 /dev/nvidia-uvm-tools

Cependant, après l'exécution de deviceQuery (qui échoue toujours), certaines des autorisations sont réinitialisées:

$ ls -al /dev/nvidia*
crwxrwxrwx 1 root root 195,   0 Feb 27 13:17 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Feb 27 13:17 /dev/nvidiactl
crwxrwxrwx 1 root root 195, 254 Feb 27 13:17 /dev/nvidia-modeset
crw-rw-rw- 1 root root 243,   0 Feb 27 13:17 /dev/nvidia-uvm
crw-rw-rw- 1 root root 243,   1 Feb 27 18:24 /dev/nvidia-uvm-tools

C'est un peu étonnant, surtout parce que j'utilise deviceQuery sans Sudo.

Peut-être lié

La construction des échantillons échoue

Lorsque j'essaie de générer les exemples cuda via make, l'un d'eux avec le message échoue

/usr/bin/ld: cannot find -lnvcuvid
collect2: error: ld returned 1 exit status
Makefile:381: recipe for target 'cudaDecodeGL' failed
make[1]: *** [cudaDecodeGL] Error 1

Ce qui semble effectivement manquer:

$ ls /usr/local/cuda-8.0/lib64/libnvcuvid
ls: cannot access '/usr/local/cuda-8.0/lib64/libnvcuvid': No such file or directory

Bien que le fichier d’en-tête correspondant soit là:

$ ls /usr/local/cuda-8.0/targets/x86_64-linux/include/nvcuvid.h 
/usr/local/cuda-8.0/targets/x86_64-linux/include/nvcuvid.h

Problème avec la liaison statique

L'erreur générée à partir de deviceQuery suggère un problème de liaison statique:

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

AFAIK LD_LIBRARY_PATH est uniquement responsable des liens dynamiques. J'ai trouvé cette question où une suggestion consiste à inclure /usr/lib/nvidia-current au chemin de l'éditeur de liens. Cependant ce répertoire n'existe pas dans mon installation:

$ ls /usr/lib/nvidia-current
ls: cannot access '/usr/lib/nvidia-current': No such file or directory
5
a_guest

On dirait que vous êtes sur un ordinateur portable avec Nvidia Optimus, avez-vous basculé vers nvidia avec prime-select nvidia

2
Artyom

Il convient également de noter qu'une autre cause possible de ce problème est si la variable d'environnement CUDA_VISIBLE_DEVICES a été définie sur vide.

J'ai rencontré des problèmes similaires et il s'est avéré que cela avait été accidentellement défini dans mes fichiers d'environnement bash.

1
PicoutputCls