TensorFlow в Jupyter не видит GPU

Oct 07, 2019 09:13

Столкнулся со странной проблемой: если запускать TensorFlow из консоли, то вот такой скрипт среди девайсов находит "/device:GPU:0":

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

а метод tf.test.gpu_device_name() корректно вовзращает '/device:GPU:0'.

Однако, если то же самое попытаться выполнить в jupyter, GPU:0 не находится, а tf.test.gpu_device_name() возвращает пустую строку. При этом в /var/log/syslog появляются странные ошибки про невозможность открыть файлы:

...
Oct 7 08:47:00 worker jupyter-notebook[3455]: pciBusID: 0000:01:00.0
Oct 7 08:47:00 worker jupyter-notebook[3455]: 2019-10-07 08:47:00.701700: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcudart.so.10.0'; dlerror: libcudart.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/lib/x86_64-linux-gnu:/usr/local/cuda/lib64/:/usr/local/cuda/extras/CUPTI/lib64
Oct 7 08:47:00 worker jupyter-notebook[3455]: 2019-10-07 08:47:00.701809: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcublas.so.10.0'; dlerror: libcublas.so.10.0: cannot open shared object file: No such file or directory;
...

На файловой системе эти файлы существуют и права на них выданы верные. Повторюсь, что в консоли GPU виден.

Чего только не пытался сделать, чтобы это починить: переставлял cuda, cudnn, пересобрал с нуля сам tensorflow, даже попробовал переустановить jupyter-notebook. Ничего из этого не помогало и Jupyter упорно отказывался видеть GPU.

Причину проблемы нашёл, выполнив команду:

sudo ldconfig

которая вернула ошибку:

/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 is not a symbolic link

Проверил этот файл и, действительно, он оказался не символической ссылкой, а обычным файлом. Удалил его и создал ссылку на правильный файл cudnn:

sudo rm libcudnn.so.7
sudo ln -s libcudnn.so.7.4.2 libcudnn.so.7

После этого в jupyter девайс GPU:0 начал обнаруживаться!

UPD от 28 января 2021г

Время бежит вперед, а проблемы все те же.
На Ubuntu 20.04 с установленной Cuda 11.2 воспроизводится похожим образом: в консоли работает, в Jupyter видит только CPU и при импорте tensorflow в syslog пишет:

Could not load dynamic library 'libcusolver.so.10'; dlerror: libcusolver.so.10: cannot open shared object file: No such file or directory

Все ссылки в папке с cuda проверил, все на месте.

Вот здесь нашел наводку как это починить. Нужно из ноутбука запустить:

!$(python3 -c "import tensorflow.python as x; print(x.__path__[0])")/libcusolver.so.10

и поглядеть, откуда он библиотеку пытается подтащить. В моем случае это оказалась папка /usr/local/lib/python3.8/dist-packages/tensorflow/python/

Создал в ней ссылку и все заработало

sudo ln -s /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcusolver.so.11 /usr/local/lib/python3.8/dist-packages/tensorflow/python/libcusolver.so.10

tensorflow, jupyter

Previous post Next post
Up