我是靠谱客的博主 感性豆芽,最近开发中收集的这篇文章主要介绍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运行。

最后

以上就是感性豆芽为你收集整理的TensorFlow2运行TF1程序并解决GPU无法使用的问题的全部内容,希望文章能够帮你解决TensorFlow2运行TF1程序并解决GPU无法使用的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部