'Библиотека не загружена: @rpath/libcudart.7.5.dylib' Ошибка TensorFlow на Mac
Я использую OS X El Capitan (10.11.4).
Я только что загрузил TensorFlow, используя инструкции по установке pip здесь.
Все прошло довольно гладко, хотя я получил несколько предупреждающих сообщений вроде:
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.
Затем, когда я тестировал TensorFlow в Python, я получил ошибку:
>>> 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?
Ответы
Ответ 1
Это сообщение об ошибке отображается, если вы устанавливаете версию Mac OS TensorFlow с поддержкой графического процессора (доступную начиная с версии 0.10) на компьютере, на котором не установлено CUDA.
Чтобы исправить ошибку, установите версию CPU для Python 2.7 или 3.x следующим образом:
# 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
Чтобы добавить к @mrry answer, если у вас уже установлен 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*"
Ответ 3
Конечно, установка CUDA имеет важное значение, а также гарантирует правильность всех путей. Я бегу:
- TensorFlow 0.12r0
- OSX 10.12.1
- python 2.7 из brew
- virtualenv для разделения моих сред python
- CUDA 8.0.55
- cudnn-8,0-OSX-64-v5.1
В моей системе у меня также были дополнительные проблемы, когда, похоже, проблема возникает из динамических библиотек, которые внутренне ссылаются на относительные пути.
Чтобы узнать, что @rpath
ссылается на _pywrap_tensorflow.so
, запускается следующий код:
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/[email protected]_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)
Можно видеть, что динамическая библиотека пытается найти библиотеки CUDA в моей виртуальной среде, где я установил TensorFlow с pip. Он не смотрит в мои пути системной среды.
Решение проблемы заключается в том, чтобы динамически связывать библиотеки CUDA со своим местоположением /usr/local/cuda/lib
в пакеты сайта, где 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 из виртуальной среды.
Я думаю, что все это возвращается к исходной компиляции TensorFlow, которая выполняется для установки pip, и я понятия не имею, как отправить исправление, или даже если я прав. Возможно, исходная компиляция Tensorflow должна быть более динамичной, а не статической.
Удачи!
Ответ 4
Эта проблема возникла у меня в macOS, когда я попытался импортировать pyTorch. Я нашел решение на японском сайте, который не может сделать из головы и хвоста, который просто дал решение как brew install libomp
. Ура! Извините за публикацию в старой теме, но я подумал, что это необходимо.