Подтвердить что ты не робот

Dyld: библиотека не загружена: @rpath/libcudart.8.0.dylib, при создании shadoworflow на Mac OSX

Я создаю shadoworflow на своем Mac (хакинтош, поэтому у меня есть графический процессор и уже установлен CUDA8.0. Он отлично работает со зданием caffe, поэтому я уверен, что он работает.) Я уже установил переменные окружения следующим образом (я поставил их в .zshrc, .bash_profile и .bashrc):

export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$CUDA_HOME/lib"
export PATH="$CUDA_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$CUDA_HOME/lib:$CUDA_HOME/extras/CUPTI/lib"

./configure работает отлично. Затем я начинаю строить с помощью команды bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package. Затем я получил эту ошибку:

    ERROR: /Development/tensorflow/tensorflow/python/BUILD:572:1: Executing genrule //tensorflow/python:array_ops_pygenrule failed: bash failed: error executing command /bin/bash -c ... (remaining 1 argument(s) skipped): com.google.devtools.build.lib.shell.AbnormalTerminationException: Process terminated by signal 5.
dyld: Library not loaded: @rpath/libcudart.8.0.dylib
  Referenced from: /private/var/tmp/_bazel_zarzen/bdf1cb43f3ff02468b610730bd03f348/execroot/tensorflow/bazel-out/host/bin/tensorflow/python/gen_array_ops_py_wrappers_cc
  Reason: image not found
/bin/bash: line 1: 92702 Trace/BPT trap: 5       bazel-out/host/bin/tensorflow/python/gen_array_ops_py_wrappers_cc @tensorflow/python/ops/hidden_ops.txt 1 > bazel-out/local_darwin-opt/genfiles/tensorflow/python/ops/gen_array_ops.py
Target //tensorflow/tools/pip_package:build_pip_package failed to build

Я могу убедиться, что пропущенная библиотека есть. И я также попробовал установить предварительно построенный двоичный файл (я знаю, что он поддерживает только CUDA7.5, поэтому я установил PATH, чтобы указать на CUDA7.5, но он не работает. Когда я пытаюсь import tensorflow, аналогичная ошибка Library not loaded: @rpath/libcudart.7.5.dylib, изменился только номер версии).

Я не знаю, почему он не может найти lib. Кто-нибудь может помочь? или любые предложения?

4b9b3361

Ответ 1

Ниже следует исправление ошибки.

Найдите файл "genrule-setup.sh". Файл должен находиться в

<tensorflow source dir>/bazel-tensorflow/external/bazel_tools/tools/genrule/

Если временная метка этого файла изменится, bazel build не сможет сказать, что файл поврежден. Поэтому, прежде чем изменять этот файл, отметьте отметку времени

stat genrule-setup.sh

Вы должны получить такой вывод:

16777220 25929227 -rwxr-xr-x 1 user wheel 0 242 "Oct 12 23:46:28 2016" "Oct 10 21:49:39 2026" "Oct 12 21:49:39 2016" "Oct 12 21:49:38 2016" 4096 8 0 genrule-setup.sh

Запишите вторую временную метку "10 октября 21:49:39 2026" из вышеприведенного вывода

отредактировать файл genrule-setup.sh

nano genrule-setup.sh

и добавьте конфигурацию среды в конец файла

export DYLD_LIBRARY_PATH=/usr/local/cuda/lib

сохранить и закрыть редактор.

Затем измените метку времени на исходную временную метку

touch -t YYYYMMDDhhmm.SS genrule-setup.sh

например.

touch -t 202610102149.39 genrule-setup.sh

Наконец, создайте символическую ссылку, чтобы избежать ошибки "Ошибка сегментации: 11"

ln -sf /usr/local/cuda/lib/libcuda.dylib /usr/local/cuda/lib/libcuda.1.dylib

Теперь перезапустите сборку

bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

Ответ 2

При запуске. /configure убедитесь, что вы указали правильную версию cuda. Вы можете найти это, выполнив:

/usr/local/cuda/bin/nvcc --version

Вы можете передавать переменные окружения в bazel во время сборки с использованием флага action_env.

bazel build -c opt --config=cuda \
    --action_env=DYLD_LIBRARY_PATH=/usr/local/cuda/lib \
    //tensorflow/tools/pip_package:build_pip_package

https://bazel.build/designs/2016/06/21/environment.html