首先说明一下cuda和cuDNN的概念

CUDA的官方文档(参考资料1)是这么介绍CUDA的:a general purpose parallel computing platform and
programming model that leverages the parallel compute engine in NVIDIA GPUs to
solve many complex computational problems in a more efficient way than on a CPU.
换句话说CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,
而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。

接下来这段话摘抄自资料2。在 CUDA 的架构下,一个程序分为两个部份:host 端和 device 端。Host 端是指在 CPU 上执行的部份,而
device 端则是在显示芯片上执行的部份。Device 端的程序又称为 “kernel”。通常 host
端程序会将数据准备好后,复制到显卡的内存中,再由显示芯片执行 device 端程序,完成后再由 host 端程序将结果从显卡的内存中取回。



接下来这段话摘抄自资料2。在 CUDA 架构下,显示芯片执行时的最小单位是thread。数个 thread 可以组成一个block。一个 block 中的
thread 能存取同一块共享的内存,而且可以快速进行同步的动作。每一个 block 所能包含的 thread 数目是有限的。不过,执行相同程序的
block,可以组成grid。不同 block 中的 thread 无法存取同一个共享的内存,因此无法直接互通或进行同步。因此,不同 block 中的
thread 能合作的程度是比较低的。不过,利用这个模式,可以让程序不用担心显示芯片实际上能同时执行的 thread
数目限制。例如,一个具有很少量执行单元的显示芯片,可能会把各个 block 中的 thread 顺序执行,而非同时执行。不同的 grid
则可以执行不同的程序(即 kernel)。




----------------------------------------------------------------------------------------

这里说明服务器对应的cuda和cudnn版本。

cuda一般安装在 /usr/local/cuda/ 路径下,该路径下有一个version.txt文档,里面记录了cuda的版本信息
cat /usr/local/cuda/version.txt 
同理,cudnn的信息在其头文件里
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2


所以这里是CUDA9.0.176 和cudnn7.0.5。


----------------------------------------------------------------------------------------

最近跑一个项目,安装了tensorflow_gpu==1.3.0的版本,但是运行的时候总是报错误。

内容如:ImportError: libcusolver.so.8.0: cannot open shared object file: No such
file or directory

最初我想到的是可能在我的环境变量当中没有做出相应的配置,因此我做出了如下的配置。
$ vim ~/.bashrc  $ export
LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/cuda/lib64” #添加该行 $ export
CUDA_HOME=/usr/local/cuda #添加该行 $ source ~/.bashrc #添加结束后执行,使得配置生效
接着我依然尝试了下虚拟环境下tensorflow的导入,依然是上面的错误,既然找不到libcusolver.so.8.0,我们就去看看到底有没有。

所以执行命令:
$ ls /usr/local/cuda/lib64/


是真的就没有该文件,这个时候我想到两种办法,第一种是在cuda和cudnn上改动,第二种办法就是更换tensorflow的版本。

实际上,2017.12的时候,tensorflow
1.4及以下的不支持cuda9.0,且tensorflow1.0版本以上是不支持cuda8.0以下的。tensorflow-gpu1.5以后不支持使用CUDA8.0。cuda8.0对应的cuDNN必须是6.0版的。由于前面我安装的tensorflow是1.3.0,所以很明显就不能用啦。

第一种变动很容易入坑,所以优先选择第二种。

还是要进入该项目的虚拟环境中执行操作,卸载tensorflow_gpu==1.3.0并安装tensorflow_gpu==1.5.0
$ pip uninstall tensorflow-gpu==1.3.0$ pip install tensorflow-gpu==1.5.0
接着当我们在虚拟环境中使用tensorflow就正常了,最后附上官网推荐对应版本,这里是官网版本链接
https://www.tensorflow.org/install/install_sources#tested_source_configurations
<https://www.tensorflow.org/install/install_sources#tested_source_configurations>