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
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).
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
.
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
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
On dirait que vous êtes sur un ordinateur portable avec Nvidia Optimus, avez-vous basculé vers nvidia avec prime-select nvidia
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.