TensorFlow 从源代码构建,不能包含贡献

Posted

技术标签:

【中文标题】TensorFlow 从源代码构建,不能包含贡献【英文标题】:Tensorflow build from source, cannot include contrib 【发布时间】:2018-04-25 15:55:50 【问题描述】:

我正在从源代码构建 TF,并且在 python 中包含 contrib 没有问题。当我尝试访问此模块时出现段错误并出现以下错误:

error: _single_image_random_dot_stereograms.so debug map object file '/private/var/tmp/_bazel_mattmurphy/7ec540cd2482edb7e06749c20652a791/execroot/org_tensorflow/bazel-out/darwin-dbg/bin/tensorflow/contrib/image/_objs/python/ops/_single_image_random_dot_stereograms.so/tensorflow/contrib/image/kernels/single_image_random_dot_stereograms_ops.o' has changed (actual time is 2018-04-23 12:26:04.000000000, debug map time is 2018-04-21 20:47:03.000000000) since this executable was linked, file will be ignored
error: _single_image_random_dot_stereograms.so debug map object file '/private/var/tmp/_bazel_mattmurphy/7ec540cd2482edb7e06749c20652a791/execroot/org_tensorflow/bazel-out/darwin-dbg/bin/tensorflow/contrib/image/_objs/python/ops/_single_image_random_dot_stereograms.so/tensorflow/contrib/image/ops/single_image_random_dot_stereograms_ops.o' has changed (actual time is 2018-04-23 12:26:05.000000000, debug map time is 2018-04-21 20:47:02.000000000) since this executable was linked, file will be ignored
Process 58138 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x48)
    frame #0: 0x0000000131682290 _single_image_random_dot_stereograms.so`google::protobuf::internal::Mutex::Lock(this=0x0000000000000048) at common.cc:376
   373  
   374
   375  void Mutex::Lock() 
-> 376    int result = pthread_mutex_lock(&mInternal->mutex);
   377    if (result != 0) 
   378      GOOGLE_LOG(FATAL) << "pthread_mutex_lock: " << strerror(result);
   379    
Target 0: (python) stopped.

看起来问题与 protobuf 相关,但这很难诊断。

【问题讨论】:

【参考方案1】:

我在使用 Xcode 9.3 在 MacOS 10.13.4 上编译时发现了同样的问题。

问题在于protobuf 静态链接到libtensorflow_framework.so,但也链接到_single_image_random_dot_stereograms.solibforestprotos.so,它们在contrib 被导入时被加载。

这里有一个相关的protobuf issue。

该问题中的一条评论说,使用 Xcode 8.3 或更高版本编译时会出现问题,因此我假设官方 tensorflow 二进制文件有效,因为它是使用旧版本构建的。

作为解决方法,我已在本地删除了 /tensorflow/tensorflow/tensorflow/contrib/image/BUILD/tensorflow/tensorflow/tensorflow/contrib/tensor_forest/BUILD 中出现的两个“@protobuf_archive//:protobuf”。

对于我在 python 中进行本地实验的用例,这似乎并没有破坏任何东西。

【讨论】:

以上是关于TensorFlow 从源代码构建,不能包含贡献的主要内容,如果未能解决你的问题,请参考以下文章

不怕学不会 | 使用TensorFlow从零开始构建卷积神经网络

从源代码构建 Tensorflow 时,编译是从头开始还是在修复错误后恢复?

从源代码构建 TensorFlow 时,生成 `gen_io_ops.py` 文件的 bazel 规则在哪里?

Spark发布了MLflow 0.2 内置TensorFlow 继承

算法工程师想进一步提高竞争力?向TensorFlow开源社区贡献你的代码吧

Tensorflow從源碼編譯