TensorFlow2运行TF1程序并解决GPU无法使用的问题

TensorFlow2运行TF1程序并解决GPU无法使用的问题

实验室机器预装了CUDA11.0,可以兼容最新的PyTorch1.8和TensorFlow2,但因为复现一些论文,需要运行TensorFlow1的代码。

环境:

  • Ubuntu18.04
  • CUDA11.0
  • TensorFlow2.4.1

在上述背景下先后出现三个问题:

  1. TF2相较TF1修改了一系列接口,TF1代码所使用的接口很多在TF2被废弃
  2. 出现报错:RuntimeError:tf.placeholder() is not compatible with eager execution
  3. TF1本身并不能兼容CUDA11.0,导致无法使用GPU

问题1.新版本废弃了旧版本接口

首先,TensorFlow官方给出了TF2运行TF1程序的旧版本接口:

// 在引入模块时,将原本的
import tensorflow as tf
// 改为
import tensorflow.compat.v1 as tf

这样旧版本接口都可以使用。


问题2.RuntimeError:tf.placeholder() is not compatible with eager execution

这一类错误的原因是虽然使用了TF1的接口,但底层部分代码的运行逻辑仍然是新版本的TF2,因此有下面两个解决办法:(此处参考了这篇博客

  1. 小范围解决,仅针对RuntimeError:tf.placeholder() is not compatible with eager execution报错。找到报错所在的代码行,在其上方添加这样一行代码:
    tf.disable_eager_execution()
    
    关闭紧急执行后上面的报错就可以消失。
  2. 大范围解决,针对所有因为TF2底层运行特性不兼容旧版本接口的问题。在引入模块之后加入禁用TF2新特性:
    import tensorflow.compat.v1 as tf
    tf.disable_v2_behavior()
    
    但这种方式的缺陷在于,可能引入开篇提到的第三个问题,即TF1无法兼容CUDA11.0导致不能使用GPU。

问题3.改用TF1后无法使用GPU

如上文分析,TF1无法兼容CUDA11.0,此时有两种解决方案,一是直接安装TF1能够兼容的CUDA版本,在Ubuntu下不同的CUDA版本可以并存,通过修改软连接可以切换。详细的步骤请自行查阅其他博客,在此不叙述。

比较简单的方法二,非常魔幻,只需要在TF1程序运行前使用TF2接口调用GPU检查即可,具体原理不详:

import tensorflow.compat.v1 as tf
import tensorflow as tf2
tf2.test.is_gpu_available()

开头会打印一些GPU的信息,而整个程序里TF1代码也开始使用GPU运行。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值