TensorFlow编译失败

5
尝试从源代码编译TensorFlow时出现以下错误。有什么想法可以帮忙吗?
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasGemmEx@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasZhpmv_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cufftExecD2Z@libcufft.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasSrotg_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cufftExecR2C@libcufft.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasSsyrk_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasDgemm_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cufftSetWorkArea@libcufft.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasChemm_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasZher2k_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cufftExecC2C@libcufft.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `curandSetStream@libcurand.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `cublasDrotm_v2@libcublas.so.9.0'
bazel-out/host/bin/_solib_local/_U_S_Stensorflow_Spython_Cgen_Unn_Uops_Upy_Uwrappers_Ucc___Utensorflow/libtensorflow_framework.so: undefined reference to `curandSetPseudoRandomGeneratorSeed@libcurand.so.9.0'
4个回答

22

我们的构建似乎存在一个 bug,我在我的机器上复现了相同的问题。看起来在 bazel 构建过程中,LD_LIBRARY_PATH 的值并没有始终得到正确传递。在我的情况下,当我使用这个命令时,成功进行了构建:

bazel build  --config=opt --config=cuda tensorflow/tools/pip_package:build_pip_package --action_env="LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"

1
在我看来,这可能是bazel或TF BUILD文件的问题。由于某种原因,当bazel尝试链接依赖于其他共享库的库时,它不会传递-L <library location>。依靠LD_LIBRARY_PATH(旨在供运行时链接器使用)来编译时链接器以便找到依赖项只是掩盖了这个问题。如果用户指定外部库作为依赖项,则构建系统应提供所有必要的标志以成功地与该库链接。 - ArtemB
这对我来说在cuda 9.0、cudnn 9.1和tensorflow r1.8上不起作用,使用git cherry-pick e489b60。 - Hakaishin

2
昨天我在尝试使用看似有效的cuda 9.0构建tensorflow源代码时遇到了相同的错误。在我的情况下,无论如何组合git cleanaction_env都没有帮助-通过bazel的ld一直拒绝承认cuda库。
最终我按照此帖子中的说明进行操作:以root身份创建一个名为/etc/ld.so.conf.d/cuda.conf的文件,并在其中添加一行内容。
/usr/local/cuda/lib64

假设您的 /usr/local/cuda/ 已链接到您具体的 cuda 目录,例如 /usr/local/cuda-9.0/
然后输入 sudo ldconfig。这样,构建就可以运行,并且 tensorflow 将使用您的 GPU。

0

在错误发生后,我将/usr/local/cuda/lib64附加到LD_LIBRARY_PATH中,但是没有起作用。然后我再次使用build --action_env LD_LIBRARY_PATH=...修改了.tf_configure.bazelrc。重新编译项目并通过!


0
为了更容易搜索此问题:我收到的错误消息也包括在顶部: libcublas.so.9.0,bazel-out/[...]/libtensorflow_framework.so所需,未找到(尝试使用-rpath或-rpath-link) libcudnn等也是如此。
当我遇到这个问题时,我首先将/usr/local/cuda/lib64和/usr/local/cuda/extras/CUPTI/lib64添加到我的LD_LIBRARY_PATH中,并尝试重新构建(不使用--action_env)。但没有成功。
然后我进行了干净的重新配置和构建,同样没有使用--action_env,它起作用了。我通过git clean -xdf清理了我的存储库,需要注意的是,这将删除存储库中所有未知于git的文件。 :)
也许--action_env可以避免进行干净的重建,我不知道。但如果在第一次构建之前将库添加到您的LD_LIBRARY_PATH中,则不需要--action_env。

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