我正在我的ubuntu 16.04机器上安装最新的Tensorflow库。 为此,我下载并安装了最新的Cuda工具包和Cuda nn库。
安装完成后,我使用以下命令检查了它。
(/home/naseer/anaconda2/) naseer@naseer-Virtual-Machine:~/anaconda2$ python
Python 2.7.13 |Anaconda 4.3.1 (64-bit)| (default, Dec 20 2016, 23:09:15)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:102] Couldn't open CUDA library libcudnn.so. LD_LIBRARY_PATH: /usr/local/cuda-8.0.61/lib64
I tensorflow/stream_executor/cuda/cuda_dnn.cc:2259] Unable to load cuDNN DSO
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
以上输出是什么意思?这是否意味着Tensorflow将在我的Nvidia GPU系统上正确运行,还是需要做其他事情?
我的本地目录结构:
我添加了以下屏幕截图,显示了我本地目录中的各种库路径。
我的理解
我觉得它正试图在路径/usr/local/cuda-8.0.61/lib64中打开CUDA库,而实际上有/usr/local/cuda-8.0/lib64和/ usr / local的路径/ CUDA / lib64下。 Itried重命名那条路但仍然无法工作?
更新(目录结构冲突)
答案 0 :(得分:1)
要运行TensorFlow,您有来安装cuDNN。有两种可能的方式:
这是official TensorFlow documentation描述的方式。
在这里,cuDNN安装在文件夹/usr/local/cuda
中。这样,cuDNN可以被该计算机上的所有用户使用。说明来自TensorFlow文档:
解压缩.tgz
文件。打开终端,导航到下载cuDNN的文件夹,然后调用
tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz
注意:这只是一个示例,请在调用之前检查文件名。
这将创建一个名为cuda
的新文件夹,其中包含两个子文件夹include
和lib64
,其中包含所有cuDNN文件。
将下载的文件移至/usr/local/cuda
。您需要sudo
权限!
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
那已经是它了。 TensorFlow现在应该按预期工作。
如果您没有管理员权限,或者您希望在计算机上安装不同的cuDNN版本,则可以将cuDNN安装到您选择的任何文件夹,然后正确设置路径。此方法在this answer on StackOverflow中提出,并在官方NVIDIA安装说明中进行了解释。
步骤1和2与上述相同。
cuda
文件夹移动到您选择的位置。将此目录添加到$LD_LIBRARY_PATH
环境变量中。在终端中,您可以通过调用
export LD_LIBRARY_PATH=/path/to/cudnn/lib64:$LD_LIBRARY_PATH
其中/path/to/cudnn
是您在上一步中移动cuDNN的位置。请注意最后的lib64
!
通常,您必须在每次启动TensorFlow之前调用此方法。为避免这种情况,您可以编辑文件~/.bashrc
并在文件底部添加此行。每次启动终端窗口时,这都会自动将cuDNN添加到路径中。
有了这个,TensorFlow将能够找到cuDNN并按预期工作。
答案 1 :(得分:1)
要运行支持GPU的TensorFlow 1.4,您应首先安装CUDA 8(+ patch 2)和cuDNN v6.0,您可能会发现这个step-by-step installation guide很有用。
安装CUDA 8驱动程序后,您需要安装cuDNN v6.0:
下载cuDNN v6.0驱动程序。该驱动程序可以从here下载,请注意您需要先注册。
将驱动程序复制到远程计算机(scp -r -i ...)
提取cuDNN文件,将它们复制到目标目录并从.tgz文件中提取文件:
tar xvzf cudnn-8.0-linux-x64-v6.0.tgz
sudo cp -P cuda / include / cudnn.h / usr / local / cuda / includesudo
cp -P cuda / lib64 / libcudnn * / usr / local / cuda / lib64
sudo chmod a + r /usr/local/cuda/include/cudnn.h 的/ usr /本地/ CUDA / lib64下/ libcudnn *
更新您的bash文件
nano~ / .bashrc
将以下行添加到bash文件的末尾:
导出CUDA_HOME = / usr / local / cuda export LD_LIBRARY_PATH = $ {CUDA_HOME} / lib64:$ LD_LIBRARY_PATH export PATH = $ {CUDA_HOME} / bin:$ {PATH}
安装libcupti-dev库
sudo apt-get install libcupti-dev
安装pip
sudo apt-get install python-pip
sudo pip install -upgrade pip
安装TensorFlow
sudo pip install tensorflow-gpu
通过在Python命令行中运行以下命令来测试安装:
来自tensorflow.python.client的导入device_lib
def get_available_gpus():
local_device_protos = device_lib.list_local_devices()
如果x.device_type =='GPU',则在local_device_protos中返回[x.name for x]
get_available_gpus()
对于单个GPU,输出应类似于:
2017-11-22 03:18:15.187419:我 tensorflow / core / platform / cpu_feature_guard.cc:137]您的CPU支持 指示此TensorFlow二进制文件未编译使用: SSE4.1 SSE4.2 AVX AVX2 FMA
2017-11-22 03:18:17.986516:我 tensorflow / stream_executor / cuda / cuda_gpu_executor.cc:892]成功 从SysFS读取的NUMA节点具有负值(-1),但必须存在 至少有一个NUMA节点,因此返回NUMA节点零
2017-11-22 03:18:17.986867:我 tensorflow / core / common_runtime / gpu / gpu_device.cc:1030]找到设备0 具有属性:
名称:特斯拉K80专业:3小调:7 memoryClockRate(GHz):0.8235
pciBusID:0000:00:1e.0
totalMemory:11.17GiB freeMemory:11.10GiB
2017-11-22 03:18:17.986896:我 tensorflow / core / common_runtime / gpu / gpu_device.cc:1120]创建 TensorFlow设备(/ device:GPU:0) - > (设备:0,名称:特斯拉K80,pci 总线ID:0000:00:1e.0,计算能力:3.7)
[U” /设备:GPU:0']