暑假在实验室里做实验,安装 环境时遇到不少困难,做个记录。
实验配置:Ubuntu18.042 + 两块1080ti + cuda9.0 + cudnn7.5.0+anaconda3
PS:查看版本的命令行:

cuda: nvcc -V
cudnn:`$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2`
tensorflow:终端输入:
                    python
                    import tensorflow as tf
                    tf.__version__(这里是双下划线)

遇到的困难:
鉴于有GPU,自然优先考虑用GPU跑数据。代码中包含以三句:

> 	config = tf.ConfigProto()
>  config.gpu_options.allow_growth = True
>  with tf.Session(config=config) as sess:

但是通过命令行查看GPU使用率发现两块GPU都是0使用率

于是
1.第一步,考虑是代码自身逻辑错误跳过了上述调用GPU的代码:
于是采用断点执行,单步调试发现确确实实是执行的了上述代码。因此排除。
2.第二步,考虑是因为tensorflow装的是CPU版本,无法调用GPU:
于是卸载当前tensorflow

$pip3 uninstall tensorflow
再重新下载pgu版本:
$pip3 install tensorflow-gpu
PS:
期间发生了一个意外情况,当我使用下述命令时,在终端调用python可以执行import tensorflow
sudo pip install tensorflow-gpu
 但是在pycharm中却报错"No moudle named tensorflow"说明tensorflow没有安装。 那是为什么呢?网上的说法是,pip命令和pip3命令下载的包存放地方不一样,pip3下载才会是存放到anaconda的pyhton3.x的site-package中,才会被检索引用到。
 因此用上面的pip3命令才是正确的3.然而GPU还是没有调用,第三步,考虑是不是GPU没有装好?
 但是,同实验室还有两组实验是可以用GPU完成的,虽然用的是caffe2,但说明GPU是正常的。
 4.既然GPU是正常,tensorflow-gpu调用GPU的代码也是正确的,这些代码也确确实实执行了,
 那会不会是cuda,cudnn,tensorflow之间不兼容呢?
 首先检查自己各个部件的版本,参照上面。cuda9.0,cudnn7.5.0,tensorflow1.13.
 然后网上查版本发现
 参考:tensorflow-gpu v1.9.0 | cuda9.0 | cuDNN7.1.4可行 | 备注:7.0.4/ 7.0.5/ 7.1.2不明确
 tensorflow-gpu v1.8.0 | cuda9.0 | cuDNN 不明确 | 备注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
 tensorflow-gpu v1.7.0 | cuda9.0 | cuDNN 不明确 | 备注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
 tensorflow-gpu v1.6.0 | cuda9.0 | cuDNN 不明确 | 备注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
 tensorflow-gpu v1.5.0 | cuda9.0 | cuDNN 不明确 | 备注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
 tensorflow-gpu v1.4.0 | cuda8.0 | cuDNN 6.0 | 备注:6.0正常使用, 7.0.5不能用,5.1未知
 tensorflow-gpu v1.3.0 | cuda8.0 | cuDNN 6.0 | 备注:6.0正常使用, 7.0.5不能用,5.1未知
 tensorflow-gpu v1.2.0 | cuda8.0 | cuDNN 5.1 | 备注:5.1正常使用, 6.0/ 7.0.5 未知
 tensorflow-gpu v1.1.0 | cuda8.0 | cuDNN 5.1 | 备注:5.1正常使用, 6.0/ 7.0.5 未知

于是,确定是tensorflow的版本问题,考虑到避免最新版不稳定,我先选择了tensorflow-gpu1.6版本,结果还是不能用,再一查,发现,cuda虽然是9.0,但是cudnn是7.5.0可以说是非常新的版本了,那就两种办法:(1)降低cudnn版本(2)提升tensorflow版本 我选了后者,安装tensorflow-gpu1.8,之前的错误消失,说明版本符合。但此时,又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又又报错了,真的是很折磨人啊!!! 好事多磨,好事多磨,耐着性子,继续看bug。

libcublas.so.9.0: cannot open shared object file: No such file or directory

就是说,没有找到这个什么鬼9.0文件,一搜,这是cuda9.0的一个文件。只有两种可能:
(1)cuda没装好,或者说缺少文件,总之不完整。
(2)cuda的环境变量没配置好

5.既然实验室别的组能用,那肯定是已经配置好了,只可能是环境变量的问题,但是,说实话,实验室的机器,又是在linux环境下,真的不好也不敢随便配置。
可以参考:
https://www.jianshu.com/p/6c649b1969c7

总之我是不敢直接配置的,于是继续找啊找,发现了一个好方法,但是可能只适用于pycharm:

按文章添加pycharm内的环境变量值即可成功运行。

8.12更新,由于一些蜜汁操作,又不能用gpu跑了,经过一番调整,还是总结下吧:

  1. 查看代码是否有逻辑bug
  2. 首先判断cuda,cudnn,tensorflow-gpu的版本是否匹配
  3. 其次,判断是否配置好了环境变量(上面提供了一种很简便的,在pycharm内部设置临时环境变量的方法)
  4. 查看代码,往往在首部,os.environ[‘device’]=‘0’(对应着分配GPU-0使用)是否设置好,不能为空字符串,这里是告诉系统将GPU0分配给这个py文件以待调用
  5. 上述都无误的话,建议使用这个代码调用方式
config = tf.ConfigProto() config.gpu_options.allow_growth = True with tf.Session(config=config) as sess: for d in ['/gpu:0']: with tf.device(d):