Python 在(!)TensorFlow使用一次后切换CPU/GPU/重置TensorFlow

Python 在(!)TensorFlow使用一次后切换CPU/GPU/重置TensorFlow,python,tensorflow,Python,Tensorflow,我试图比较GPU和CPU上TensorFlow图的运行时 我知道我可以通过更改环境变量CUDA\u VISIBLE\u DEVICES来启用/禁用GPU的使用。然而,如果我之前已经处理过任何TensorFlow计算,这个更改不会影响任何东西 所以我可能需要重置TensorFlow。不过,无论是session.close()还是tf.reset\u default\u graph()都没有帮助 最后,我知道我可以用类似于 with tf.Session() as sess: with

我试图比较GPU和CPU上TensorFlow图的运行时

我知道我可以通过更改环境变量
CUDA\u VISIBLE\u DEVICES
来启用/禁用GPU的使用。然而,如果我之前已经处理过任何TensorFlow计算,这个更改不会影响任何东西

所以我可能需要重置TensorFlow。不过,无论是
session.close()
还是
tf.reset\u default\u graph()
都没有帮助

最后,我知道我可以用类似于

 with tf.Session() as sess:
      with tf.device("/cpu:0"):
,但这只在本地有帮助,因此需要更改许多代码部分。相反,我正在寻找一个全局解决方案,它不需要我启动一个全新的Python会话


非常感谢您的帮助

旧版本的驱动程序可能存在问题?否则,如果您使用的是最新版本的everything,并且Session.close无法释放GPU资源,请提交一个bug(通过简单的复制)。使用Python的多处理将是一个解决方法。谢谢您的帮助。我刚刚将驱动程序和TensorFlow更新到最新版本。但问题仍然存在。我不确定这是否被认为是一个bug:
session.close()
确实释放了GPU资源。但是,下次启动新会话时,将再次分配资源,而不会注意环境变量
CUDA\u VISIBLE\u DEVICES
的最新值,而是使用原始值。你可能会争辩说这是应该的方式。。使用Python的多处理可能确实是一个很好的解决方法。不确定对
CUDA\u VISIBLE\u设备的更改是否会在创建流程后影响任何内容(它不是TensorFlow选项,而是一个CUDA选项,用于确定TensorFlow AFAIK可以看到哪些设备)。