python - TensorFlow 实际使用的 CUDA 库

标签 python tensorflow cuda

我已经使用命令 pip3.6 install tensorflow-gpu 安装了(我认为)具有 CUDA 支持的 TF , 每个 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 .

最佳答案

是的,这很正常。
libcuda used 绝对应该是 GPU 驱动程序提供(安装)的那个。它绝对不应该是 stubs 中的那个目录。
stubs中的那个目录(或 /usr/local/cuda... 路径中的任何内容)用于不同的目的,基本上与某些场景中的应用程序构建有关,而不是用于运行任何应用程序。

对于正在运行的应用程序(如 Tensorflow),需要使用驱动程序提供的共享对象,对于 libcuda图书馆。

(libcuda.so目录下的stubs是为你安装了CUDA工具包但没有安装GPU驱动,你想构建GPU应用程序,但不运行它们的场景提供的,当然这样的场景可能存在例如在计算集群中的头节点/登录节点上。在这种情况下,登录节点/构建节点可能没有安装GPU,但您可能仍然想构建CUDA驱动程序API应用程序。此类应用程序需要构建即链接针对驱动程序 API 库,该库由 libcuda.so 提供。因此,对于这种情况,提供了“ stub ”库。“ stub ”库具有 API 链接过程所需的一切,但在其他方面不起作用。 )

关于python - TensorFlow 实际使用的 CUDA 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784333/

相关文章:

python - Tensorflow backprop 通过 rnn ValueError

functional-programming - 对GPU的纯函数式编程

python - 将 csv 数据绘制为 map - Python

python - 在 Xlwings 中设置图表名称

python - 如何在 Colab 中检查预处理时间/速度?

python - 如何从 TensorFlow 中的 SparseTensor 中选择一行?

python - 将 JSON 文件转换为具有定义格式的 Dataframe

python - Python Django 中的 Websocket 握手错误

c - CUDA 中的简单缩减程序

c++ - 为什么cuda内核可以访问主机内存?