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

'Library not loaded: @rpath/libcudart.7.5.dylib' TensorFlow Error on Mac

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

我刚刚使用 pip 安装说明下载了 TensorFlow here

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

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 文档中的 this issue(我还没有尝试过)。

我怎样才能卸载它安装的任何东西并正确启动 TensorFlow 和 运行?

如果您在未安装 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/

添加到 ,如果您已经安装了 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*"

当然安装 CUDA 是必不可少的,确保所有路径都是正确的。我是 运行宁:

  • 张量流 0.12r0
  • OSX 10.12.1
  • python 2.7 来自 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 位置动态 link 到我的虚拟环境中 pip 安装 TensorFlow 的站点包中。

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 时,将需要重新link。

我认为这一切都可以追溯到为 pip 安装完成的 TensorFlow 原始编译,我不知道如何提交修复,即使我是正确的。或许Tensorflow的原始编译需要更加动态而不是静态。

祝你好运!

当我尝试导入 pyTorch 时,我的 macOS 上出现了这个问题。我在 japanese site 中找到了解决方案,它无法做出正面和反面的结果,只是将解决方案给出为 brew install libomp 。干杯!抱歉发帖到旧线程,但我认为有必要。