减少bazel内存使用量

时间:2015-12-20 15:06:30

标签: bazel

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

我已尝试通过~/.bazelrc

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

但这没有帮助。这些因素如何被理解?我应该随便试一下其他人吗?

4 个答案:

答案 0 :(得分:16)

其他一些可能有用的标志:

  • public class Node { public string Group { get; set; } public int SequenceNumber { get; set; } public override string ToString() { return string.Format("This is the Node.ToString() method!"); } } [TestMethod] public void Test() { var unsortedNodes = new List<Node>() { new Node { Group = "A", SequenceNumber = 1 }, new Node { Group = "A", SequenceNumber = 2 }, new Node { Group = "A", SequenceNumber = 3 }, new Node { Group = "B", SequenceNumber = 11 }, new Node { Group = "B", SequenceNumber = 12 }, new Node { Group = "C", SequenceNumber = 20 }, }; var query = unsortedNodes.OrderBy(n => n.Group).GroupBy(n => n.Group).SelectMany(g => g.OrderBy(n => n.SequenceNumber)); var _nodes = query.ToList(); Assert.IsTrue(_nodes.ToList().All(n => n.ToString() == "This is the Node.ToString() method!")); } 可用于通过设置--host_jvm_args和/或-Xms来设置JVM应使用的内存量,例如-Xmxdocs
  • bazel --host_jvm_args=-Xmx4g --host_jvm_args=-Xms512m build //foo:bar--local_resources标志(docs)一起使用。
  • --ram_utilization_factor(或其他一些低号,默认为200),例如--jobs=10docs)。

请注意,bazel build --jobs=2 //foo:bar是一个启动选项,所以它之前命令(--host_jvm_args)和build是“正常的“构建选项,以便命令后

答案 1 :(得分:2)

对我来说,来自@ 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'.

答案 2 :(得分:1)

只想在@ sashoalm的评论中说--jobs=1标志是让bazel构建最终起作用的原因。

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

$ bazel build tensorflow/examples/label_image:label_image

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

答案 3 :(得分:0)

我在k8s群集中的bazel构建失败时遇到了很多不稳定因素。

除了--jobs=1之外,请尝试以下操作: https://docs.bazel.build/versions/master/command-line-reference.html#flag--local_resources 例如。 --local_resources=4096,2.0,1.0