标签: bazel

Bazel和Gradle有什么区别?

谷歌只是开源其构建工具Bazel.这个工具和Gradle有什么区别?Gradle不能做什么,它做得更好,Gradle做得更好?

build-process build-tools gradle bazel

134
推荐指数
3
解决办法
3万
查看次数

Tensorflow 编译运行时间长

所以我试图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)

关于这里发生了什么的任何想法?

python compilation bazel tensorflow

56
推荐指数
1
解决办法
6602
查看次数

必须指定Xcode版本才能使用Apple CROSSTOOL

我尝试使用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 tensorflow tensorflow-serving

37
推荐指数
3
解决办法
8702
查看次数

Bazel构建详细的编译器命令记录

如何增加构建过程的详细程度?Bazel似乎只在构建期间出现问题时才打印编译器命令.

我想看看哪个编译器命令cc_library规则触发,即使一切似乎都很好,也可以调试链接问题.我已经尝试了各种bazel命令行参数,但没有给我编译器命令:(

c++ bazel

27
推荐指数
2
解决办法
2万
查看次数

运行Tensorflow单元测试

有没有办法手动运行Tensorflow单元测试?我想在修改TF源代码时执行完整性检查.

我看到有很多_test.py文件,其中的类执行许多测试操作,我无法弄清楚如何运行它们.应该有一个简单的方法吗?

testing unit-testing bazel tensorflow

22
推荐指数
2
解决办法
9274
查看次数

如何在Travis-CI上为TensorFlow构建共享库

我正在协助为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上的人成功实现了这一点: …

ruby travis-ci bazel tensorflow

20
推荐指数
1
解决办法
904
查看次数

给定张量流模型图,如何查找输入节点和输出节点名称

我在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 bazel tensorflow

19
推荐指数
3
解决办法
2万
查看次数

在Android上运行Tensorflow模型

我正在尝试找出在Android上培训和部署Tensorflow模型的工作流程.我知道在StackOverflow上有类似于这个的其他问题,但它们似乎都没有解决我遇到的问题.

在研究了Tensorflow存储库中的Android示例后,我认为这应该是工作流程:

  1. 在Python中构建和训练Tensorflow模型.
  2. 创建一个新图,并将所有相关节点(即不是负责培训的节点)传输到这个新图.训练有素的权重变量作为常量导入,以便C++ API可以读取它们.
  3. 使用Java开发Android GUI,使用native关键字来存根对Tensorflow模型的调用.
  4. 运行javah以生成Tensorflow本机调用的C/C++存根代码.
  5. 使用Tensorflow C++ API填写存根,读入并访问训练/序列化模型.
  6. 使用Bazel构建Java应用程序,本机Tensorflow接口(作为.so文件),并生成APK.
  7. 使用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的某些方面我不理解.任何帮助赞赏.

谢谢!

编辑:

我最终做了几件事可能有助于图书馆建设成功:

  1. 我升级到了最新的Bazel.
  2. 我从源头重建了TensorFlow.
  3. 我在下面实现了推荐的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)

android bazel tensorflow

18
推荐指数
1
解决办法
7763
查看次数

如何查看Bazel版本?

我试图找出我的计算机上目前有哪个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 tensorflow

17
推荐指数
2
解决办法
2万
查看次数

如何获取Bazel执行的命令

我想知道是否有办法让Bazel列出,输出,显示等所有可以从命令行执行的命令,这些命令在清理后的构建期间运行.我不在乎输出是否在屏幕上,文件中等等.如有必要,我会将其按到可用的形式.

我在Bazel运行期间捕获了屏幕输出,这让我知道正在做什么,但它没有给我一个命令,我可以在命令行上执行.该命令必须包含所有命令选项而不是显示变量.

如果这是不可能的,因为Bazel是开源的,代码中的代码是表示要运行的命令的行,以便我可以修改Bazel以输出可执行命令.

我知道Bazel中的查询命令,并使用它生成依赖关系图.如果这可以作为查询命令完成,那就更好了.

TLDR;

我的目标是在Windows上使用Bazel构建TensorFlow.是的我知道所有问题和原因没有这样做,并且已经通过虚拟机或Docker在Windows上成功安装了TensorFlow.我没有采取射击在Windows上建立巴泽勒开始使用Cygwin,但开始失控,因为我用它来使用包安装和Cygwin不玩包不错,所以后来我就开始尝试手工打造巴泽尔那变成了一个泥潭.所以我现在试图在Windows上手动构建TensorFlow,复制Bazel在Linux上构建TensorFlow的方法.

command bazel

16
推荐指数
1
解决办法
5040
查看次数