Tensorflow仅在CPU上运行CUDA版本
问题描述:
我在群集上运行tensorflow。我安装了CUDA版本。它工作没有任何问题。要使用GPU,我必须请求资源。现在,我只想在CPU上运行而不请求GPU资源。Tensorflow仅在CPU上运行CUDA版本
On import tensorflow as tf, I get the error:
ImportError: /home/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: undefined symbol: cuDevicePrimaryCtxRetain
Failed to load the native TensorFlow runtime.
See https://www.tensorflow.org/install/install_sources#common_installation_problems
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
我意识到我必须只在CPU上运行,并设置环境变量CUDA_VISIBLE_DEVICES=""
。我通过bash上的export
以及python脚本完成了它。我仍然得到同样的错误。
如何才能在CPU上使用tensorflow的GPU版本?可能吗?其他一些页面例如Run Tensorflow on CPU建议更改会话配置参数。但是,由于我在import
本身出现错误,我认为这不适用或有帮助。
堆栈跟踪:
File "<FileNameReplaced>", line 10, in <module>
import tensorflow as tf
File "/home/***/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/__init__.py", line 24, in <module>
from tensorflow.python import *
File "/home/***/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 51, in <module>
from tensorflow.python import pywrap_tensorflow
File "/home/***/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 52, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "/home/***/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 41, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/home/***/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/home/***/.pyenv/versions/2.7.13/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
附加信息:
版本:1.1.0
答
您可以在TensorFlow回购,在这个问题讨论一下issue #2175。对我有效的是设置CUDA_VISIBLE_DEVICES="-1"
,而不是""
,跟在documentation of CUDA environment variables之后。当您第一次创建会话时,它可能会产生一些警告,但计算应该可以正常工作。如果你正在使用bash或类似的,你可以通过运行程序之前导出它做到这一点,像你说的,或者只是:
$ CUDA_VISIBLE_DEVICES="-1" python my_program.py
或者,可能更轻便的解决方案是让Python本身设置环境可变之前 TensorFlow被任何模块的输入:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
import tensorflow as tf
另一位用户提出创建以下列方式会话:
import tensorflow as tf
session_conf = tf.ConfigProto(
device_count={'CPU' : 1, 'GPU' : 0},
allow_soft_placement=True,
log_device_placement=False
)
with tf.Session(config=session_conf) as sess:
sess.run(...)
这应该允许您进行更细粒度的控制(例如,我有两个GPU,但只想让TensorFlow使用其中的一个)。
这不起作用。张量流的版本是否重要?它是1.1.0。我会看看github链接。 – Dinesh
@edit对于环境变量,版本应该没有关系,因为它是CUDA的事情。对于'tf.ConfigProto',它可能,老实说我没有用过我自己。 – jdehesa
是的,我试过环境变量。问题是我得到分段错误:如果我确实: 进口操作系统 os.environ [“CUDA_VISIBLE_DEVICES”] =“-1” 导入tensorflow为tf 它引发Segmentation故障并退出python命令行。 – Dinesh