所以我试图TensorFlow从源代码编译(使用 2019 年 1 月 31 日从他们的 git 存储库中的克隆)。我从他们的 shell 脚本(https://github.com/bazelbuild/bazel/releases/download/0.21.0/bazel-0.21.0-installer-linux-x86_64.sh)安装了 Bazel 。
我./configure在 tensorflow 代码中执行并提供了默认设置,除了添加我的机器特定的 -m 选项(-mavx2 -mfma)并将 python 指向正确的 python3 位置(/usr/bin/py3)。然后我按照 tensorflow 指令运行以下命令:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package //tensorflow:libtensorflow_framework.so //tensorflow:libtensorflow.so
Run Code Online (Sandbox Code Playgroud)
现在它继续运行和运行,我还没有看到它完成(虽然我被限制让它运行最多大约 10 个小时)。它产生大量信息:有关有符号和无符号整数的警告以及控制到达非空函数的末尾。这些似乎都不是致命的。编译继续打勾,两个数字继续增长('[N,NNN / X,XXX] 4 个操作正在运行'),文件通过“编译”打勾。
这台机器是一个 EC2 实例,具有 ~16GiB 的 RAM,CPU 是“Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz”,我相信 4 核,大量的硬盘空间(尽管编译似乎吃掉了 QUITE一点,> 1GiB)
关于这里发生了什么的任何想法?
我尝试使用bazel构建tensorflow服务,但我在构建过程中遇到了一些错误
ERROR:/private/var/tmp/_bazel_Kakadu/3f0c35881c95d2c43f04614911c03a57/external/local_config_cc/BUILD:49:5: in apple_cc_toolchain rule @local_config_cc//:cc-compiler-darwin_x86_64: Xcode version must be specified to use an Apple CROSSTOOL.
ERROR: Analysis of target '//tensorflow_serving/sources/storage_path:file_system_storage_path_source_proto' failed; build aborted.
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用了bazel clean,bazel clean --expunge但它没有帮助,仍然Bazel没有看到我的xcode(我想)但它已经完全安装.我甚至重新安装它以确保一切正常,但错误并没有消失
我的Bazel版本是
Build label: 0.5.2-homebrew
Build target: bazel-out/darwin_x86_64-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Thu Jul 13 12:29:40 2017 (1499948980)
Build timestamp: 1499948980
Build timestamp as int: 1499948980
KakaduDevs-Mac-mini:serving Kakadu$
Run Code Online (Sandbox Code Playgroud)
操作系统是MacOS Sierra版本10.12.5
如何在bazel中指定Xcode版本以避免此错误?似乎错误是常见的,但我还没有找到如何制作bazel.PS我正在尝试安装tensorflow-服务如何解释这里的方式. https://tensorflow.github.io/serving/setup
如何增加构建过程的详细程度?Bazel似乎只在构建期间出现问题时才打印编译器命令.
我想看看哪个编译器命令cc_library规则触发,即使一切似乎都很好,也可以调试链接问题.我已经尝试了各种bazel命令行参数,但没有给我编译器命令:(
有没有办法手动运行Tensorflow单元测试?我想在修改TF源代码时执行完整性检查.
我看到有很多_test.py文件,其中的类执行许多测试操作,我无法弄清楚如何运行它们.应该有一个简单的方法吗?
我正在协助为TensorFlow构建一个Ruby-wrapper.明显.我们想要设置项目的自动测试,所以我正在努力配置Travis-CI来构建项目并在我自己的机器上运行测试(OSX El Capitan).
我的问题是:在.travis.yml-file中为TensorFlow 正确bazel build使用共享库(tensorflow.so)需要的魔力是什么?
据我所知,我已经成功安装了TensorFlow的依赖项,包括谷歌的构建工具Bazel,但Travis-CI仍然无法构建.在撰写本文时,bazel build命令失败并显示以下消息:
...
...
INFO: Building...
[1 / 13] Writing file external/gif_archive/libgif.so-2.params
[3 / 13] Compiling external/gif_archive/giflib-5.1.4/lib/egif_lib.c
ERROR: /home/travis/.cache/bazel/_bazel_travis/1a58902034d650eeef2a9da5b1248179/external/gif_archive/BUILD:14:1: C++ compilation of rule '@gif_archive//:gif' failed: namespace-sandbox failed: error executing command
(cd /home/travis/.cache/bazel/_bazel_travis/1a58902034d650eeef2a9da5b1248179/execroot/tensorflow && \
exec env - \
...
...
The command "bazel build --verbose_failures=1 @gif_archive//:gif" failed and exited with 1 during .
Run Code Online (Sandbox Code Playgroud)
https://travis-ci.org/chrhansen/tensorflow.rb/builds/145716589
注意:我注意到github.com/node-tensorflow/node-tensorflow上的人成功实现了这一点: …
我在Tensor flow Camera Demo中使用自定义模型进行分类.我生成了一个.bp文件,我可以显示它包含的巨大图表.要将此图转换为优化图,如[ https://www.oreilly.com/learning/tensorflow-on-android]中所述,可以使用以下过程:
$ bazel-bin/tensorflow/python/tools/optimize_for_inference \
--input=tf_files/retrained_graph.pb \
--output=tensorflow/examples/android/assets/retrained_graph.pb
--input_names=Mul \
--output_names=final_result
Run Code Online (Sandbox Code Playgroud)
这里是如何从图形显示中找到input_names和output_names.当我不使用专有名称时,我会遇到设备崩溃:
E/TensorFlowInferenceInterface(16821): Failed to run TensorFlow inference
with inputs:[AvgPool], outputs:[predictions]
E/AndroidRuntime(16821): FATAL EXCEPTION: inference
E/AndroidRuntime(16821): java.lang.IllegalArgumentException: Incompatible
shapes: [1,224,224,3] vs. [32,1,1,2048]
E/AndroidRuntime(16821): [[Node: dropout/dropout/mul = Mul[T=DT_FLOAT,
_device="/job:localhost/replica:0/task:0/cpu:0"](dropout/dropout/div,
dropout/dropout/Floor)]]
Run Code Online (Sandbox Code Playgroud) 我正在尝试找出在Android上培训和部署Tensorflow模型的工作流程.我知道在StackOverflow上有类似于这个的其他问题,但它们似乎都没有解决我遇到的问题.
在研究了Tensorflow存储库中的Android示例后,我认为这应该是工作流程:
使用adb来部署APK.
第6步是问题所在.Bazel很乐意编译一个本机(到OSX).dylib,我可以通过JNI从Java调用它.同样,Android Studio将生成一大堆XML代码,这些代码构成了我想要的GUI.但是,Bazel希望所有java应用程序代码都在'WORKSPACE'顶级目录(在Tensorflow repo中)中,并且Android Studio会立即链接到SDK中的各种外部库以生成GUI(我知道因为我的Bazel编译运行失败,因为它找不到这些资源).我可以找到迫使Bazel交叉编译.so文件的唯一方法是使其成为Android规则的依赖规则.直接交叉编译本机库是我更喜欢将我的AS代码移植到Bazel项目的.
我该怎么做?据说Bazel会编译Android代码,但Android Studio会生成Bazel无法编译的代码.来自Google的所有示例都只是从回购中提供代码,而不知道它是如何生成的.据我所知,Android Studio应用程序中的XML应该是生成的,而不是手工制作的.如果可以手工制作,我如何避免需要所有这些外部库?
也许我的工作流程出错了,或者Bazel/Android Studio的某些方面我不理解.任何帮助赞赏.
谢谢!
编辑:
我最终做了几件事可能有助于图书馆建设成功:
我在下面实现了推荐的Bazel BUILD文件,添加了一些内容(取自Android示例):
cc_binary(
name = "libName.so",
srcs = ["org_tensorflowtest_MyActivity.cc",
"org_tensorflowtest_MyActivity.h",
"jni.h",
"jni_md.h",
":libpthread.so"],
deps = ["//tensorflow/core:android_tensorflow_lib",
],
copts = [
"-std=c++11",
"-mfpu=neon",
"-O2",
],
linkopts = ["-llog -landroid -lm"],
linkstatic = 1,
linkshared = 1,
)
cc_binary(
name = "libpthread.so",
srcs = [],
linkopts = ["-shared"],
tags = [
"manual",
"notap",
],
) …Run Code Online (Sandbox Code Playgroud)我试图找出我的计算机上目前有哪个Bazel版本从源代码安装TensorFlow(它需要0.1.4版本)
evan@evan-box:~/Apps/tensorflow$ bazel --version
Unknown Bazel startup option: '--version'.
For more info, run 'blaze help startup_options'.
evan@evan-box:~/Apps/tensorflow$ bazel version
Build label: head (@125b349)
Build target: bazel-out/local_linux-fastbuild/bin/src/main/java/bazel-main_deploy.jar
Build time: Fri Nov 13 01:23:30 2015 (1447377810)
Build timestamp: 1447377810
Build timestamp as int: 1447377810
Run Code Online (Sandbox Code Playgroud)
那么版本究竟在哪里?
我想知道是否有办法让Bazel列出,输出,显示等所有可以从命令行执行的命令,这些命令在清理后的构建期间运行.我不在乎输出是否在屏幕上,文件中等等.如有必要,我会将其按到可用的形式.
我在Bazel运行期间捕获了屏幕输出,这让我知道正在做什么,但它没有给我一个命令,我可以在命令行上执行.该命令必须包含所有命令选项而不是显示变量.
如果这是不可能的,因为Bazel是开源的,代码中的代码是表示要运行的命令的行,以便我可以修改Bazel以输出可执行命令.
我知道Bazel中的查询命令,并使用它生成依赖关系图.如果这可以作为查询命令完成,那就更好了.
TLDR;
我的目标是在Windows上使用Bazel构建TensorFlow.是的我知道所有问题和原因没有这样做,并且已经通过虚拟机或Docker在Windows上成功安装了TensorFlow.我没有采取射击在Windows上建立巴泽勒开始使用Cygwin,但开始失控,因为我用它来使用包安装和Cygwin不玩包不错,所以后来我就开始尝试手工打造巴泽尔那变成了一个泥潭.所以我现在试图在Windows上手动构建TensorFlow,复制Bazel在Linux上构建TensorFlow的方法.
bazel ×10
tensorflow ×7
android ×2
build-tools ×1
c++ ×1
command ×1
compilation ×1
gradle ×1
python ×1
ruby ×1
testing ×1
travis-ci ×1
unit-testing ×1