概述
TensorFlow2运行TF1程序并解决GPU无法使用的问题
实验室机器预装了CUDA11.0,可以兼容最新的PyTorch1.8和TensorFlow2,但因为复现一些论文,需要运行TensorFlow1的代码。
环境:
- Ubuntu18.04
- CUDA11.0
- TensorFlow2.4.1
在上述背景下先后出现三个问题:
- TF2相较TF1修改了一系列接口,TF1代码所使用的接口很多在TF2被废弃
- 出现报错:RuntimeError:tf.placeholder() is not compatible with eager execution
- 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,因此有下面两个解决办法:(此处参考了这篇博客)
- 小范围解决,仅针对RuntimeError:tf.placeholder() is not compatible with eager execution报错。找到报错所在的代码行,在其上方添加这样一行代码:
关闭紧急执行后上面的报错就可以消失。tf.disable_eager_execution()
- 大范围解决,针对所有因为TF2底层运行特性不兼容旧版本接口的问题。在引入模块之后加入禁用TF2新特性:
但这种方式的缺陷在于,可能引入开篇提到的第三个问题,即TF1无法兼容CUDA11.0导致不能使用GPU。import tensorflow.compat.v1 as tf tf.disable_v2_behavior()
问题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运行。
最后
以上就是感性豆芽为你收集整理的TensorFlow2运行TF1程序并解决GPU无法使用的问题的全部内容,希望文章能够帮你解决TensorFlow2运行TF1程序并解决GPU无法使用的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复