在Mac上的TensorFlow错误:“Library not loaded: @rpath/libcudart.7.5.dylib”

20

我正在使用OS X El Capitan(10.11.4)。

我按照此处的pip安装说明下载了TensorFlow。

一切都很顺利,尽管我收到了一些警告消息,例如:

The directory '/Users/myusername/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.

You are using pip version 6.0.8, however version 8.1.2 is available.即使我刚刚安装了pip。

然后,在Python中测试TensorFlow时,我遇到了错误:

>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/__init__.py", line 23, in <module>
    from tensorflow.python import *
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/python/__init__.py", line 48, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
    _pywrap_tensorflow = swig_import_helper()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/imp.py", line 243, in load_module
    return load_dynamic(name, filename, file)
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/python/_pywrap_tensorflow.so, 10): Library not loaded: @rpath/libcudart.7.5.dylib
  Referenced from: /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/python/_pywrap_tensorflow.so
  Reason: image not found

现在,当我尝试执行pip uninstall tensorflow-0.10.0rc0时,它告诉我它没有安装。

我发现最接近这个问题的是TensorFlow GitHub文档中的这个问题(我还没有尝试)。

我应该如何卸载掉已安装的任何内容,并正确地运行TensorFlow?


2
你是否安装了启用GPU的版本,但没有安装CUDA? - mrry
@mrry 非常可能。CUDA是什么?我该如何安装它? - Pro Q
在指南中有没有告诉我安装CUDA,我是不是错过了? - Pro Q
@mrry 哦!我明白了,它在一个标有*(可选,Linux)*的部分底部,所以我忽略了它。谢谢! - Pro Q
4个回答

35

如果您在没有安装CUDA的计算机上安装了启用GPU的Mac OS版本的TensorFlow(从版本0.10开始提供),则会显示此错误消息。

要解决此错误,请按照以下方式安装Python 2.7或3.x的CPU版本:

# Mac OS X, CPU only, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.0-py2-none-any.whl
$ sudo pip install --upgrade $TF_BINARY_URL

# Mac OS X, CPU only, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.0-py3-none-any.whl
$ sudo pip3 install --upgrade $TF_BINARY_URL

查看tensorflow版本:https://www.tensorflow.org/versions/


2
我正要发布一篇文章,说将仅CPU版本安装在其上可以起作用。谢谢! - Pro Q
为什么不安装CUDA?我想利用我的GPU。那不是更快吗? - williamcodes
1
如果您有一张支持CUDA的GPU,那么您绝对应该安装CUDA!请注意,大多数最近的Mac内置GPU不支持CUDA,但您可以通过按照这些说明来检查您的GPU是否支持。 - mrry

3

补充 @mrry的答案,如果您已经安装了CUDA,但仍然遇到错误,可能是因为CUDA库不在您的路径上。请将以下内容添加到您的 ~/.bashrc 或 ~/.zshrc 中:

# export CUDA_HOME=/Developer/NVIDIA/CUDA-7.5 ## This is the default location on macOS
export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$CUDA_HOME/lib:$DYLD_LIBRARY_PATH"
export PATH="$CUDA_HOME/bin:$PATH"

请取消注释其中任意一个CUDA_HOME,或者修改它以包含您的CUDA安装路径。如果您不知道其安装在哪里,请尝试:

find / -name "*libcudart*"

看起来比那复杂得多!请参阅此博客文章 https://metakermit.com/2017/compiling-tensorflow-with-gpu-support-on-a-macbook-pro/ - Gant Laborde

2
当然,安装CUDA是必要的,确保所有路径正确也很重要。我正在运行:
  • TensorFlow 0.12r0
  • OSX 10.12.1
  • python 2.7 from brew
  • virtualenv用于分离我的python环境
  • CUDA 8.0.55
  • cudnn-8.0-osx-x64-v5.1
在我的系统上,我还遇到了进一步的问题,看起来问题源自内部引用相对路径的动态库。
为了发现从_pywrap_tensorflow.so引用的@rpath,运行以下代码:
otool -l /Users/norman_h/.virtualenvs/env_name/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so

其中包括以下内容:

Load command 15
      cmd LC_RPATH
      cmdsize 128
      path $ORIGIN/../../_solib_darwin/_U@local_Uconfig_Ucuda_S_Scuda_Ccudart___Uexternal_Slocal_Uconfig_Ucuda_Scuda_Slib (offset 12)
Load command 16
      cmd LC_RPATH
      cmdsize 48
      path ../local_config_cuda/cuda/lib (offset 12)
Load command 17
      cmd LC_RPATH
      cmdsize 56
      path ../local_config_cuda/cuda/extras/CUPTI/lib (offset 12)

可以看到,动态库试图在我使用pip安装TensorFlow的虚拟环境中查找CUDA库,而不是在系统环境路径中查找。
一个解决方法是将CUDA库从其/usr/local/cuda/lib位置动态链接到pip在我的虚拟环境中安装的TensorFlow的site-packages中。
mkdir /Users/norman_h/.virtualenvs/env_name/lib/python2.7/site-packages/tensorflow/local_config_cuda

cd /Users/norman_h/.virtualenvs/env_name/lib/python2.7/site-packages/tensorflow/local_config_cuda

ln -s /usr/local/cuda .

当pip在虚拟环境中升级TensorFlow时,需要重新链接。

我认为这一切都与pip安装时对TensorFlow的原始编译有关,我不知道该如何提交修复,甚至不确定自己是否正确。也许Tensorflow的原始编译需要更加动态而不是静态。

祝好运!


0

当我尝试导入pyTorch时,这个问题在我的macOS上出现了。我在一个日本网站上找到了解决方案,但是很难理解,它只是简单地给出了解决方案:brew install libomp。干杯!抱歉发帖到一个旧的线程,但我认为这是必要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接