在 ubuntu 16.04 上安装 Tensorflow gpu 时出现 Cuda nn 路径问题

Cuda nn path issues in installing Tensorflow gpu on ubuntu 16.04

我正在我的 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。我尝试重命名该路径但仍然无法工作?

更新(目录结构冲突)

要 运行 TensorFlow,您必须 安装 cuDNN。有两种可能的方法:

1。为所有用户安装 cuDNN:

这是official TensorFlow documentation描述的方式。 在这里,cuDNN 安装在文件夹 /usr/local/cuda 中。这样,该机器上的所有用户都可以使用 cuDNN。说明摘自 TensorFlow 文档:

  1. 下载正确的 cuDNN 版本。对于 TensorFlow r1.1,对于 CUDA 8.0,这将是 cuDNN v5.1。
  2. 解压缩 .tgz 文件。打开终端,导航到下载 cuDNN 的文件夹,然后调用

    tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz
    

    注意:这只是一个示例,调用前请检查文件名。

    这将创建一个名为 cuda 的新文件夹,其中包含两个子文件夹 includelib64,其中包含所有 cuDNN 文件。

  3. 将下载的文件移动到/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 现在应该可以正常工作了。

2。在本地安装 cuDNN:

如果您没有管理员权限,或者您想在您的机器上安装不同的 cuDNN 版本,您可以将 cuDNN 安装到您选择的任何文件夹,然后正确设置路径。此方法在this answer on Whosebug中提出,在NVIDIA官方安装说明中有说明。

步骤一、二同上

  1. 将提取的 cuda 文件夹移动到您选择的位置。
  2. 将此目录添加到 $LD_LIBRARY_PATH 环境变量。在终端中,您可以通过调用

    export LD_LIBRARY_PATH=/path/to/cudnn/lib64:$LD_LIBRARY_PATH
    

    其中/path/to/cudnn是你在上一步移动cuDNN的地方。注意最后的lib64

    通常,您必须在每次启动 TensorFlow 之前调用它。为避免这种情况,您可以编辑文件 ~/.bashrc 并在文件底部添加此行。这将在每次启动终端时自动将 cuDNN 添加到路径 window.

这样,TensorFlow 将能够找到 cuDNN 并按预期工作。

要 运行 启用 GPU 的 TensorFlow 1.4,您应该首先安装 CUDA 8(+补丁 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/local/cuda/lib64/libcudnn*

更新您的 bash 文件

nano ~/.bashrc

将以下行添加到 bash 文件的末尾:

export 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 命令行中执行以下命令来测试安装:

from tensorflow.python.client import device_lib

def get_available_gpus():

  • local_device_protos = device_lib.list_local_devices()

  • return [x.name for x in local_device_protos if x.device_type == ‘GPU’]

get_available_gpus()

对于单个 GPU,输出应类似于:

2017-11-22 03:18:15.187419: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2017-11-22 03:18:17.986516: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2017-11-22 03:18:17.986867: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:

name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235

pciBusID: 0000:00:1e.0

totalMemory: 11.17GiB freeMemory: 11.10GiB

2017-11-22 03:18:17.986896: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:00:1e.0, compute capability: 3.7)

[u’/device:GPU:0′]