Библиотека CUDA, фактически используемая TensorFlow - PullRequest
0 голосов
/ 12 октября 2018

Я установил (я думаю) TF с поддержкой CUDA, используя команду pip3.6 install tensorflow-gpu, для каждой страницы установки TF.

Моя локальная установка CUDA - CUDA 9.0 и CUDNN 7.3.1 в /usr/local/cuda-9.0.

По совету https://github.com/tensorflow/tensorflow/issues/10827 Я проверяю библиотеки, используемые TF (в virtualenv):

% python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib() + "/python/_pywrap_tensorflow_internal.so")' | xargs ldd
linux-vdso.so.1 (0x00007fff57eb8000)
libtensorflow_framework.so => /home/mark/projects/bench/venvs/ve_tf/lib/python3.6/site-packages/tensorflow/python/../libtensorflow_framework.so (0x00007ff29fa25000)
libcublas.so.9.0 => /usr/local/cuda-9.0/lib64/libcublas.so.9.0 (0x00007ff29bda8000)
libcusolver.so.9.0 => /usr/local/cuda-9.0/lib64/libcusolver.so.9.0 (0x00007ff2971ad000)
libcudart.so.9.0 => /usr/local/cuda-9.0/lib64/libcudart.so.9.0 (0x00007ff296f40000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff296d3c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff296b1f000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007ff2968f2000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff2965ee000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff2963e6000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff296064000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff295e4d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff295aae000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff2cb7c7000)
libcuda.so.1 => /usr/lib/x86_64-linux-gnu/libcuda.so.1 (0x00007ff294f0e000)
libcudnn.so.7 => /usr/local/cuda-9.0/lib64/libcudnn.so.7 (0x00007ff282bd5000)
libcufft.so.9.0 => /usr/local/cuda-9.0/lib64/libcufft.so.9.0 (0x00007ff27ab34000)
libcurand.so.9.0 => /usr/local/cuda-9.0/lib64/libcurand.so.9.0 (0x00007ff276bd0000)
libnvidia-fatbinaryloader.so.390.77 => /usr/lib/x86_64-linux-gnu/libnvidia-fatbinaryloader.so.390.77 (0x00007ff276984000)

libcudnn.so, похоже, указывает на правильную библиотеку, однако для libcuda.soУ меня есть сомнения:

libcuda.so.1 => /usr/lib/x86_64-linux-gnu/libcuda.so.1 (0x00007ff294f0e000)

% readlink -f /usr/lib/x86_64-linux-gnu/libcuda.so.1 
/usr/lib/x86_64-linux-gnu/libcuda.so.390.77

ОК, так что, по-видимому, это приводит к использованию библиотеки CUDA / предоставляемой драйвером устройства NVIDIA ...

Это нормально?Разве он не должен использовать libcuda.so в /usr/local/cuda-9.0?

У меня есть один: /usr/local/cuda-9.0/lib64/stubs/libcuda.so.

1 Ответ

0 голосов
/ 12 октября 2018

Да, это нормально.

Используемая libcuda должна определенно быть той, которая предоставлена ​​(установлена) драйвером графического процессора.Это определенно не должно быть в каталоге stubs.

Элемент в каталоге stubs (или что-либо в пути /usr/local/cuda...) предназначен для другой цели, в основном связанной со сборкой приложений в определенных сценариях, а не для запуска каких-либо приложений.

Для запуска приложений (например, Tensorflow) необходимо использовать общий объект, предоставленный драйвером, для библиотеки libcuda.

(предоставляется libcuda.so в каталоге stubsдля сценария, в котором у вас установлен инструментарий CUDA, но не установлен драйвер GPU, и вы хотите создавать приложения GPU, но не запускать их, конечно. Такой сценарий может существовать на головном узле / узле входа в систему, например, в вычислительном кластереВ этом сценарии на узле входа в систему / узле сборки может не быть установлен графический процессор, но вы все равно можете собирать приложения CUDA driver API . Такие приложения должны создавать, например, ссылку на библиотеку API драйвера, иэта библиотека предоставляется libcuda.so. Поэтому для этого сценария предоставляется библиотека-заглушка. Библиотека-заглушкаУ ry есть все необходимое для процесса связывания API, но в остальном он не работает.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...