PyCharm 远程解释器和 Tensorflow -> 无法导入 Cudart.so

Posted

技术标签:

【中文标题】PyCharm 远程解释器和 Tensorflow -> 无法导入 Cudart.so【英文标题】:PyCharm remote interpreter and Tensorflow -> can not import Cudart.so 【发布时间】:2017-07-12 22:13:55 【问题描述】:

我正在使用 PyCharm 进行远程调试,客户端 Win10,服务器 Ubuntu 16。在 Ubuntu 机器上,我正确安装了 Cuda 8.0,以及 python 2.7 和 tensorflow 1.0.0。 TensorFlow 在服务器上完美运行(ssh + 调用 python、导入 tensorflow 等)。

在 PyCharm 中,我为我的服务器机器设置了一个远程调试器,但现在导入 tensorflow 会导致错误:

Traceback (most recent call last):
  File "/home/*****/*****/********/*******.py", line 24, in <module>
    import tensorflow as tf
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 60, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
    _pywrap_tensorflow = swig_import_helper()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory


Error importing tensorflow.  Unless you are using bazel,
you should not try to import tensorflow from its source directory;
please exit the tensorflow source tree, and relaunch your python interpreter
from there.

我试过了:

为 sys.path 变量添加正确的路径

将 LD_LIBRARY_PATH 添加到 os.environ 和/或 PyCharm 环境变量

没有成功!

我记得前段时间我能够毫无问题地进行调试,但我不知道出了什么问题。有什么建议吗?

更新 1 重启后,错误变成了这个

ssh://****@192.168.***.***:22/usr/bin/python -u /home/*****/.pycharm_helpers/pydev/pydevd.py --multiproc --qt-support --client '0.0.0.0' --port 35523 --file /home/*/*/*/*/test.py
warning: Debugger speedups using cython not found. Run '"/usr/bin/python" "/home/*/.pycharm_helpers/pydev/setup_cython.py" build_ext --inplace' to build.
pydev debugger: process 1913 is connecting

Connected to pydev debugger (build 163.10154.50)
Traceback (most recent call last):
  File "/home/*/.pycharm_helpers/pydev/pydevd.py", line 1596, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/home/*/.pycharm_helpers/pydev/pydevd.py", line 974, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/home/*/*/*/*/test.py", line 1, in <module>
    import tensorflow
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 72, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 61, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
    _pywrap_tensorflow = swig_import_helper()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory


Failed to load the native TensorFlow runtime.

See https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md#import_error

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

Process finished with exit code 1

更新 2 / 已解决 正如我之前尝试过的,解决方案是在 pycharm 上将 LD_LIBRARY_PATH 添加到配置面板上的环境变量中。我认为在名称(-> 'LD_LIBRARY_PATH')之后的空格不起作用之前。这里的解决方案: solution

【问题讨论】:

【参考方案1】:

解决方法是在Pycharm环境面板中添加正确的路径:

LD_LIBRARY_PATH='/usr/local/cuda/lib64'

或适合您配置的那个。

【讨论】:

【参考方案2】:

您收到的错误消息是“请退出 tensorflow 源代码树,然后从那里重新启动您的 python 解释器。”。

如果您下载 tensorflow 源,手动编译等安装它,然后启动 python 并导入 tensorflow,但仍在源文件夹中,通常会收到此错误消息。

您可以尝试阻止此错误的方法: - 检查 tensorflow 源是否在您运行远程应用程序的文件夹中(您是否按照类似的方法使其工作?http://www.pinchofintelligence.com/faster-writing-and-testing-machine-learning-applications/) - 尝试查找并删除 tensorflow 源文件夹 - 重新启动您的电脑(这会清除您可能正在其中运行您的东西的 /tmp 文件夹)

希望其中一项能奏效,让我知道!

【讨论】:

我尝试了您的建议,请参阅更新 1。我从 pip (sudo pip install tensorflow-gpu) 安装了 tensorflow,我确保更新 protobuf 并删除任何以前安装的 TF 版本(cpu 和显卡)。我在目录中没有源代码。还有什么想法吗?我想强调一点,如果我通过 SSH 连接到服务器,那么 python 和“导入 tensorflow”可以完美运行,而启动表单 PyCharm 则不能。 PyCharm的配置方式或者调用tensorflow的方式肯定有问题吧? 同样的问题,但我没有 TF 源,所以问题类似于 UPDATE 1。这可能有非常简单的错误消息,但我一直忘记将环境变量添加到 PyCharm 项目设置中。【参考方案3】:

远程 nvidia-docker 案例

我花了几个小时来解决类似的问题。实际上,我多次阅读 *** 并毫不费力地添加了所有这些环境变量。

因此,如果您有远程 nvidia-docker 并打开了 ssh,请阅读此线程: https://github.com/bethgelab/docker/issues/5

当您使用 ssh 连接时,nvidia-docker 无法正确启动终端。

Pycharm实际上是使用ssh连接进行远程调试,所以也无法启动tensorflow-gpu

【讨论】:

以上是关于PyCharm 远程解释器和 Tensorflow -> 无法导入 Cudart.so的主要内容,如果未能解决你的问题,请参考以下文章

PyCharm导入tensorflow包报错的问题

PyCharm - 无法使用远程解释器

PyCharm 配置远程python解释器和在本地修改服务器代码

如何在pycharm中远程执行bash脚本?

Pycharm 2017.1 EAP Python 控制台和远程 Docker 解释器不能一起工作

Docker远程上的Pycharm远程解释器:[Errno 2]没有这样的文件或目录