耗尽的虚拟内存使用Docker Toolbox安装SyntaxNet

时间:2017-02-28 16:39:08

标签: docker tensorflow bazel syntaxnet docker-toolbox

尝试使用Docker Toolbox从此SyntaxNet安装Dockerfile时,我耗尽了虚拟内存。我在编译Dockerfile时收到了这条消息:

listA
    .GroupJoin(listB, a => a.Code, b => b.Code, (a, g) => new {Parent = a, Childs = g})
    .SelectMany(arg => arg.Childs.DefaultIfEmpty(), 
                   (arg1, c) => new {arg1.Parent, Child = c ?? arg1.Parent})
    .ToList();

我有一种感觉可以通过更改Bazel的默认作业限制(例如)ERROR: /root/.cache/bazel/_bazel_root/5b21cea144c0077ae150bf0330ff61a0/external/org_tensorflow/tensorflow/core/kernels/BUILD:1921:1: C++ compilation of rule '@org_tensorflow//tensorflow/core/kernels:svd_op' failed: gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE '-D_FORTIFY_SOURCE=1' -fstack-protector -Wall -Wl,-z,-relro,-z,now -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-canonical-system-headers ... (remaining 115 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1. virtual memory exhausted: Cannot allocate memory ____Building complete. ____Elapsed time: 8548.364s, Critical Path: 8051.91s 来解决这个问题,但是我不知道我会把它放在Dockerfile中。

1 个答案:

答案 0 :(得分:2)

有两种可能性:您可以修改Dockerfile,以便创建包含以下文本的~/.bazelrc

build --jobs=1

请注意,即使Dockerfile运行bazel test(而不是bazel build),这仍然有效,因为build中的.bazelrc标志也适用于Bazel&#39}。 s test命令。

另一种可能性是修改Dockerfile中的RUN命令以包含--jobs=1参数,例如RUN [...] && bazel test --jobs=1 --genrule_strategy=standalone [...]

然后,Bazel应该在构建期间生成不超过一个子进程。您可以通过运行" ps axuf"来验证这一点。在您的主机上,查看容器的进程树。如果您修改了RUN cmd,则还应该在Bazel的命令行中看到--jobs=1参数。