Я пытаюсь запустить некоторый код Tensorflow и получаю то, что кажется обычной проблемой:
$ LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64 python -c "import tensorflow; tensorflow.Session()"
2019-02-06 20:36:15.903204: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-02-06 20:36:15.908809: E tensorflow/stream_executor/cuda/cuda_driver.cc:300] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2019-02-06 20:36:15.908858: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:163] retrieving CUDA diagnostic information for host: tigris
2019-02-06 20:36:15.908868: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:170] hostname: tigris
2019-02-06 20:36:15.908942: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:194] libcuda reported version is: 390.77.0
2019-02-06 20:36:15.908985: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:198] kernel reported version is: 390.30.0
2019-02-06 20:36:15.909006: E tensorflow/stream_executor/cuda/cuda_diagnostics.cc:308] kernel version 390.30.0 does not match DSO version 390.77.0 -- cannot find working devices in this configuration
$
Ключевые части этого сообщения об ошибке:
[...] libcuda reported version is: 390.77.0
[...] kernel reported version is: 390.30.0
[...] kernel version 390.30.0 does not match DSO version 390.77.0 -- cannot find working devices in this configuration
Как установить совместимые версии?Откуда взялась эта версия libcuda?
Справочная информация
Несколько месяцев назад я пытался установить Tensorflow с поддержкой GPU, но версии либо сломали мой дисплей, либо не работали с Tensorflow.Наконец, я начал работать, следуя инструкции о том, как установить несколько версий библиотек CUDA на одном компьютере.Это работало в то время, но когда я вернулся к проекту через несколько месяцев, он перестал работать.Я предполагаю, что какой-то драйвер был обновлен за это время.
Расследование
Первое, что я попробовал, было посмотреть, какие у меня есть версии драйверов nvidia и пакета libcuda.
$ dpkg --list|grep libcuda
ii libcuda1-390 390.30-0ubuntu1 amd64 NVIDIA CUDA runtime library
Похоже, сейчас 390.30.Почему в сообщении об ошибке говорится, что libcuda сообщила о 390,77?
$ dpkg --list|grep nvidia
ii libnvidia-container-tools 1.0.1-1 amd64 NVIDIA container runtime library (command-line tools)
ii libnvidia-container1:amd64 1.0.1-1 amd64 NVIDIA container runtime library
rc nvidia-384 384.130-0ubuntu0.16.04.1 amd64 NVIDIA binary driver - version 384.130
ii nvidia-390 390.30-0ubuntu1 amd64 NVIDIA binary driver - version 390.30
ii nvidia-390-dev 390.30-0ubuntu1 amd64 NVIDIA binary Xorg driver development files
rc nvidia-396 396.44-0ubuntu1 amd64 NVIDIA binary driver - version 396.44
ii nvidia-container-runtime 2.0.0+docker18.09.1-1 amd64 NVIDIA container runtime
ii nvidia-container-runtime-hook 1.4.0-1 amd64 NVIDIA container runtime hook
ii nvidia-docker2 2.0.3+docker18.09.1-1 all nvidia-docker CLI wrapper
ii nvidia-modprobe 390.30-0ubuntu1 amd64 Load the NVIDIA kernel driver and create device files
rc nvidia-opencl-icd-384 384.130-0ubuntu0.16.04.1 amd64 NVIDIA OpenCL ICD
ii nvidia-opencl-icd-390 390.30-0ubuntu1 amd64 NVIDIA OpenCL ICD
rc nvidia-opencl-icd-396 396.44-0ubuntu1 amd64 NVIDIA OpenCL ICD
ii nvidia-prime 0.8.8.2 all Tools to enable NVIDIA's Prime
ii nvidia-settings 396.44-0ubuntu1 amd64 Tool for configuring the NVIDIA graphics driver
Опять же, все выглядит так, как будто это 390,30.Было несколько пакетов с версией 390.77, но они были в состоянии rc
.Думаю, я установил эту версию, а затем удалил ее, поэтому файлы конфигурации остались позади.Я удалил файлы конфигурации с помощью команд, подобных этой:
sudo apt-get remove --purge nvidia-kernel-common-390
Теперь с версией 390.77 нет пакетов.
$ dpkg --list|grep 390.77
$
Я попытался переустановить CUDA, чтобы проверить, была ли онабыл скомпилирован с неверной версией.
$ sudo sh cuda_9.0.176_384.81_linux.run --silent --toolkit --toolkitpath=/usr/local/cuda-9.0 --override
Это не имело никакого значения.
Наконец, я попытался запустить nvidia-smi.
$ LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64 nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
$
Всеэто работает на Ubuntu 18.04 с Python 3.6.7, и моя видеокарта - NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2).