使用 Docker 工具箱安装 SyntaxNet 耗尽虚拟内存
Exhausted Virtual Memory Installing SyntaxNet Using Docker Toolbox
我在尝试使用 Docker 工具箱安装 SyntaxNet from this Dockerfile 时耗尽了我的虚拟内存。我在编译 Docker 文件时收到此消息:
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
我觉得这可以通过使用(例如)--jobs=1
更改 Bazel 的默认作业限制来解决,但是我不确定我会把它放在 Docker 文件中的什么位置。
有两种可能性:您可以修改 Dockerfile,使其创建一个包含以下文本的 ~/.bazelrc
:
build --jobs=1
请注意,即使 Dockerfile 运行 bazel test
(而不是 bazel build
),这仍然有效,因为 .bazelrc
中的 build
标志也适用于 Bazel 的 test
命令。
另一种可能性是修改 Dockerfile 中的 RUN
命令以包含 --jobs=1
参数,例如RUN [...] && bazel test --jobs=1 --genrule_strategy=standalone [...]
.
然后 Bazel 在构建过程中生成的子进程不应超过一个。您可以通过主机上的 运行 "ps axuf" 并查看容器的进程树来验证这一点。如果您修改了 RUN
cmd,您还应该在 Bazel 的命令行上看到 --jobs=1
参数。
我在尝试使用 Docker 工具箱安装 SyntaxNet from this Dockerfile 时耗尽了我的虚拟内存。我在编译 Docker 文件时收到此消息:
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
我觉得这可以通过使用(例如)--jobs=1
更改 Bazel 的默认作业限制来解决,但是我不确定我会把它放在 Docker 文件中的什么位置。
有两种可能性:您可以修改 Dockerfile,使其创建一个包含以下文本的 ~/.bazelrc
:
build --jobs=1
请注意,即使 Dockerfile 运行 bazel test
(而不是 bazel build
),这仍然有效,因为 .bazelrc
中的 build
标志也适用于 Bazel 的 test
命令。
另一种可能性是修改 Dockerfile 中的 RUN
命令以包含 --jobs=1
参数,例如RUN [...] && bazel test --jobs=1 --genrule_strategy=standalone [...]
.
然后 Bazel 在构建过程中生成的子进程不应超过一个。您可以通过主机上的 运行 "ps axuf" 并查看容器的进程树来验证这一点。如果您修改了 RUN
cmd,您还应该在 Bazel 的命令行上看到 --jobs=1
参数。