【发布时间】:2015-11-08 15:46:43
【问题描述】:
我正在使用一个非常大的 (45Gb) 训练集运行 word2phrase.c。我的 PC 有 16Gb 的物理 RAM 和 4Gb 的交换空间。我已经把它训练了一夜(第二次tbh),我早上回来,看到它被“杀死”而没有进一步解释。当我的 RAM 用完时,我坐在那里看着它死去。
我设置在我的/etc/sysctl.conf
vm.oom-kill = 0
vm.overcommit_memory = 2
实际的源代码似乎并未将数据写入文件,而是将其保存在内存中,这会产生问题。
- 是否用于杀死 OOM 的总内存 (RAM + SWAP)?例如,如果我将 SWAP 增加到 32Gb,这种情况会停止吗?
- 我能否以降低性能为代价强制此进程使用 SWAP 而不是物理 RAM?
【问题讨论】:
-
如果 100% 的准确性并不重要,那么您就不能将您的设置分成 10 个块并手动编译结果吗?
-
@GradyPlayer 如果增加 SWAP 不能解决这个问题,我可能不得不这样做。不幸的是,这需要我进行在线培训,这可能是不可能的(我不知道网络模型究竟是如何工作的)。
-
@Alex - 如果不断分配和释放内存,则会出现潜在问题。虚拟页面最终会出现不可用的间隙。像 Microsoft 的 .net 框架这样的环境偶尔会暂停进程并重新打包内存页面以避免此问题。我不知道 Linux 的等价物是什么,这可能不是 word2phrase 内存不足的原因。
标签: c linux out-of-memory