tensorflow没有调用GPU的问题排查

暑假在实验室里做实验,安装 环境时遇到不少困难,做个记录。
实验配置: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.
然后网上查版本发现
参考:https://blog.csdn.net/yeler082/article/details/80943040

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://blog.csdn.net/qq_34374211/article/details/81018320
https://www.jianshu.com/p/6c649b1969c7
https://blog.csdn.net/u014561933/article/details/79995536

总之我是不敢直接配置的,于是继续找啊找,发现了一个好方法,但是可能只适用于pycharm:https://blog.csdn.net/qq_15192373/article/details/81231095
https://www.cnblogs.com/sddai/p/11050947.html
按文章添加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):

至此,折磨了我好几天的问题终于得以解决,其中远不止博客中这些问题,兜兜转转走了不少弯路,好在事在人为,算是解决了一个任务。这些看起来没有必要的问题,其实很锻炼人的查找资料能力,很多资料在github上,都是英文的;锻炼人的分析思考能力,以及设计试验并验证的能力。总之,算是有所收获吧,希望能为一些小伙伴提供解决思路。

  • 18
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值