2017-08-11 311 views
2

我在群集上运行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

回答

1

您可以在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使用其中的一个)。

+0

这不起作用。张量流的版本是否重要?它是1.1.0。我会看看github链接。 – Dinesh

+0

@edit对于环境变量,版本应该没有关系,因为它是CUDA的事情。对于'tf.ConfigProto',它可能,老实说我没有用过我自己。 – jdehesa

+0

是的,我试过环境变量。问题是我得到分段错误:如果我确实: 进口操作系统 os.environ [“CUDA_VISIBLE_DEVICES”] =“-1” 导入tensorflow为tf 它引发Segmentation故障并退出python命令行。 – Dinesh