TensorFlow实际使用的CUDA库

时间:2018-10-12 17:22:48

标签: python tensorflow cuda

在TF安装页面上,我已经使用命令pip3.6 install tensorflow-gpu安装了(我认为)具有CUDA支持的TF。

我的本​​地CUDA安装是/usr/local/cuda-9.0中的CUDA 9.0和CUDNN 7.3.1。

每一个提示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

确定,因此显然导致NVIDIA设备驱动程序使用/提供了CUDA库...

这正常吗?它不应该在libcuda.so中使用/usr/local/cuda-9.0吗?

我确实有一个:/usr/local/cuda-9.0/lib64/stubs/libcuda.so

1 个答案:

答案 0 :(得分:1)

是的,这很正常。

使用的libcuda绝对应该是GPU驱动程序提供(安装)的stubs。绝对不应该是stubs目录中的那个。

/usr/local/cuda...目录中的目录(或libcuda路径中的任何目录)的存在目的不同,基本上与某些情况下的应用程序构建有关,而不是与运行任何应用程序有关。 / p>

对于正在运行的应用程序(例如Tensorflow),必须使用驱动程序提供的共享对象(用于libcuda.so库。

stubs目录中的libcuda.so用于以下情况:您已安装CUDA工具包但未安装GPU驱动程序,并且您希望构建但不运行它们的GPU应用程序当然,这种情况可能存在于例如计算集群中的头节点/登录节点上,在这种情况下,登录节点/构建节点可能未安装GPU,但是您可能仍想构建CUDA driver API 应用程序。此类应用程序需要构建,即与驱动程序API库链接,并且该库由SELECT A.UserID, A.UserName, img1.ImageURL, img2.ImageURL FROM A INNER JOIN B as img1 ON img1.ImageID = A.Image1ID INNER JOIN B as img2 ON img2.ImageID = A.Image2ID WHERE A.UserID = @Parameter1; 提供。因此,在这种情况下,提供了“存根”库。库具有API链接过程所需的所有内容,但不起作用。)