减少 bazel 内存使用

Decrease bazel memory usage

我在一台有 4 GB RAM 的计算机上使用 bazel(编译 tensorflow 项目)。但是,Bazel 没有考虑我拥有的内存量,并产生了太多作业,导致我的机器交换并导致更长的构建时间。

我已经尝试通过 ~/.bazelrc

中的以下行设置 the ram_utilization_factor flag
build --ram_utilization_factor 30
test --ram_utilization_factor 30

但这并没有帮助。无论如何,如何理解这些因素?我应该随机尝试其他一些吗?

其他一些可能有帮助的标记:

  • --host_jvm_args 可用于设置 JVM 应使用多少内存,通过设置 -Xms and/or -Xmx,例如 bazel --host_jvm_args=-Xmx4g --host_jvm_args=-Xms512m build //foo:bar (docs).
  • --local_resources 结合 --ram_utilization_factor 标志 (docs).
  • --jobs=10(或其他一些小数,默认为 200),例如bazel build --jobs=2 //foo:bar (docs).

请注意 --host_jvm_args 是一个 启动选项 所以它在 之前 命令 (build) 并且--jobs 是一个 "normal" 构建选项,因此它在 命令 之后。

对我来说,@kristina 的回答中的 --jobs 论点有效:

bazel build --jobs=1 tensorflow:libtensorflow_all.so

注意:必须在--jobs=1之后,不能在build之前,否则bazel无法识别。如果您输入 bazel --jobs=1 build tensorflow:libtensorflow_all.so,您将收到此错误消息:

Unknown Bazel startup option: '--jobs=1'.

只是想附和@sashoalm 的评论,即 --jobs=1 标志是使 bazel build 最终起作用的原因。

作为参考,我是 Lubuntu 17.04 上的 运行 bazel,运行 作为 VirtualBox 来宾,具有大约 1.5 GB RAM 和两个 Intel i3 内核(我是 运行 Thinkpad T460)。我正在关注 O'Reilly 的 TensorFlow 教程 (https://www.oreilly.com/learning/dive-into-tensorflow-with-linux),运行 在以下步骤遇到了麻烦:

$ bazel build tensorflow/examples/label_image:label_image

将此更改为 bazel build --jobs=1 tensorflow/... 就成功了。

我 运行 在我的 k8s 集群中 bazel 构建失败导致相当多的不稳定。

除了--jobs=1,试试这个: https://docs.bazel.build/versions/master/command-line-reference.html#flag--local_resources 例如。 --local_resources=4096,2.0,1.0