我在我的Mac上构建张量流(一个hackintosh,所以我有一个GPU,并且已经安装了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
。有人可以帮忙吗?或任何建议?
答案 0 :(得分:9)
以下内容应修正错误。
找到文件“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月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
最后,创建一个符号链接以避免“Segmentation fault: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
答案 1 :(得分:0)
运行./configure时,请确保指定正确的cuda版本。你可以通过运行来找到它:
/usr/local/cuda/bin/nvcc --version
您可以使用action_env
标记在构建期间将环境变量传递给bazel。
bazel build -c opt --config=cuda \
--action_env=DYLD_LIBRARY_PATH=/usr/local/cuda/lib \
//tensorflow/tools/pip_package:build_pip_package