Ubuntu上TensorFlow的cpu与gpu版本共存问题

1.默认选择

一直比较疑惑,当Ubuntu上TensorFlow的cpu与gpu版本共存时,他会自动选择哪个呢?

测试当前使用cpu还是gpu方法,下面两种方法都可以

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

 

import tensorflow as tf
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

print(sess.run(c))

按照网友的说法,一般会自动选择gpu版本,因为gpu版本里实际上包含了gpu,当然也可以通过CUDA_VISIBLE_DEVICES的设置来进行指定。

假定这里gpu总共有八块,通过nvidia-smi查看发现5,6,7是空闲的(从0开始编号)

则运行命令修改为:CUDA_VISIBLE_DEVICES=5,6,7 python train.py

还有一种情况会自动选择cpu, 那就是当tf-gpu版本低于cpu版本时,这时可以采取gpu版本升级。

2.版本不对应

第二次安装的是cuda9.1的版本

直接pip3 install tf-gpu会下载最新的1.14.0,运行发现是CPU在工作,中间过程显示原因是GPU有些库打不开

具体的库是这些:

打开cuda 9.1

要求的是10.0,所以对不上,要将tf-gpu降级,用uninstall把tf-gpu 1.14.0的去掉

tf-cpu是1.12.0版本,import tf报错 libcublas.9.0 not found,于是uninstall tf-cpu 1.12.0(必须sudo),全部降为以下版本

还是不行,后来网上又说,是因为tf官方版本没有支持cuda9.1的,只支持9.0

mind/wheels是tiny mind开发的为Linux准备的特殊版本的tensorflow,包含支持CUDA9.1的tensorflow,在GitHub下载wheel文件

在whl所在路径下使用pip3 install xxx.whl

再尝试直接用pip install

3.cuda崩溃

我通过上面方法来测试,发现一直选择的是cpu,明明之前都使用gpu的呀,于是我去查原因。

首先检查cuda,发现以前通过测试的,现在又fail了

没出现之前的成功结果,而是报下面的错误

在论坛上搜原因,大家都提示用nvidia-smi命令进行检测,我也遇到了版本不匹配的问题

原因:应该是驱动版本的原因

于是我又去查解决办法

方案一:reboot(对我没用)

方案二:关掉驱动自动更新(没用)

方案三:reload kernel mod(没用)

方案四:安装高版本驱动(第一句不能正常执行)

#用su切换到root

add-apt-repository ppa:graphics-drivers/ppa
apt-get update
apt-get install nvidia-410

 

报错

 

方案5:重装cuda,这次选择安装驱动(自己突发奇想)

./deviceQuery测试通过,nvidia-smi也能正常显示

再export一下环境变量,再测试一下,发现就是GPU在工作了

终于成功了!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值