Ошибка API CUDA Runtime API 38: не обнаружено устройство с поддержкой CUDA
Ситуация
У меня есть сервер с двумя gpu (Ubuntu 12.04), где я переключил Tesla C1060 на GTX 670. Чем я установил CUDA 5.0 по сравнению с 4.2. Впоследствии я скомпилировал все примеры execpt для simpleMPI без ошибок. Но когда я запускаю ./devicequery
, я получаю следующее сообщение об ошибке:
[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
Что я пробовал
Чтобы решить эту проблему, я попробовал все мысли, рекомендованные устройством с поддержкой CUDA, но безрезультатно:
-
/dev/nvidia*
есть и разрешения 666 (crw-rw-rw-) и корень владельца: 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
-
Я попытался выполнить код с помощью sudo
-
CUDA 5.0 одновременно устанавливает драйвер и библиотеки
PS здесь 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)
[обновление]
[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
Как это может быть, если я использую установщик CUDA 5.0 для установки драйверов и библиотек одновременно. Может ли старая версия 4.2, которая все еще лежит вокруг беспорядка?
Ответы
Ответ 1
Я столкнулся с этой проблемой и запустил
nvidia-smi
сообщила мне о несоответствии API. Проблема заключалась в том, что в моем дистрибутиве Linux были установлены обновления, требующие перезагрузки системы, поэтому перезапуск устраняет проблему.
Ответ 2
См. этот вопрос Установка cuda 5 образцов в Ubuntu 12.10.
-
Ubuntu 12 - не поддерживаемый дистрибутив Linux (пока). Для справки см. Замечания и исправления к выпуску CUDA 5.0 Toolkit
** Поддерживаемые дистрибутивы
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
-
Если вы хотите, чтобы это выполнялось на Ubuntu 12 в любом случае, см. ответ rpardo. Похоже, что этот дистрибутив вместо установки 64-битных библиотек в /usr/lib64
устанавливает их в /usr/lib/x86_64-linux-gnu/
Я предлагаю искать все экземпляры libcuda.so
и libnvidia-ml.so
в системе. Поскольку драйвер не поддерживает этот дистрибутив, он мог бы установить библиотеки на путь, на который не указывает LD_LIBRARY_PATH
. Затем переместите библиотеки вокруг и/или измените LD_LIBRARY_PATH
, чтобы указать на это местоположение (это должен быть первый путь слева). Затем повторите попытку nvidia-smi
или deviceQuery
Удачи.
Ответ 3
Я получил ошибку 38 для cudaGetDeviceCount на машине Windows с GPU GTX980.
После того, как я загрузил последний драйвер для GTX 980 на сайт NVIDIA, установил его и перезапустил, все в порядке. Похоже, установщик CUDA не устанавливает последний драйвер.
Ответ 4
Попробуйте запустить образец с помощью sudo (или вы можете сделать "sudo su", установить LD_LIBRARY_PATH на путь библиотек cuda и запустить образец, будучи root). По-видимому, поскольку вы, вероятно, установили CUDA 5.0 с помощью sudo, образцы не запускаются с обычным пользователем. Тем не менее, если вы запустите образец с корнем, вы также сможете запускать образцы с обычным пользователем! Я еще не перезапустил систему, чтобы проверить, работают ли образцы с обычным пользователем даже после перезагрузки, или каждый раз, когда вы должны запускать хотя бы одно приложение CUDA с корнем.
Проблема может полностью исчезнуть, если вы установите CUDA TookKit без использования sudo.
Ответ 5
У меня была очень похожая проблема на Debian, и оказалось, что загруженный модуль nvidia
имел другую версию, чем libcuda1
.
Чтобы проверить установленный модуль nvidia
, вы должны сделать:
$ sudo modinfo nvidia-current | grep version
version: 319.82
Если он не соответствует версии libcuda1
, это корень ваших проблем.