我正在使用LuaTorch训练模式。最近,我遇到了一个恼人的问题。随着时间的推移,程序运行越来越慢!当我执行
sudo sysctl -w vm.drop_caches=3
然后程序运行得更快。然而,大约一天之后,它再次放缓。我使用top
检查缓冲区和缓存,发现它们非常高。
第一个问题:如果我在训练模型时使用该命令释放缓冲区和缓存,这是否重要? 我最初的想法是检查每个纪元经过的时间,并在经过时间长于预设值时调用cmd命令。
if time_elapse > time_out then
os.execute('sudo sudo sysctl -w vm.drop_caches=3')
end
然而,它需要你第一次调用passwd的manuly输入。如何使用lua代码来避免手动代码输入?
答案 0 :(得分:1)
直接回答您的问题:允许您的用户在不输入密码的情况下执行sysctl -w vm.drop_caches=3
命令。
如果名为naruto
的用户正在运行您的lua脚本,请将以下行添加到/etc/sudoers
(或者更好的是,在/etc/sudoers.d
中为其创建一个文件)。
naruto ALL=(ALL) NOPASSWD: /usr/sbin/sysctl -w vm.drop_caches=3
这将允许naruto
以root身份执行确切的命令而不提供密码。
至于潜在的问题,这里还有更多内容需要研究。您通常不会想要删除页面缓存。它只是一个缓存,并没有实际使用该内存。请仔细阅读http://www.linuxatemyram.com/上非常有用的页面,特别是请参阅最后的警告标志部分(请参阅下面的内容):
您可能想要的真正低内存情况的警告标志 看看:
- 可用内存(或“free + buffers / cache”)接近零交换
- 使用增加或波动
- dmesg | grep oom-killer在工作中显示theOutOfMemory-killer
答案 1 :(得分:1)
sysctl -w vm.drop_caches=3
可能会通过强制交换的页面重新进入主内存来加速您的进程。这可能意味着您的系统配置为过于积极地交换。您可以通过修改vm.swappiness
来配置swappiness。许多Linux发行版将此值默认为60
。尝试将其减少到10
以鼓励内核将进程保留在内存中。 swappiness Wikipedia entry有更详细的修改说明。这并没有回答你的直接问题,迈克指出了这一点,但它可能有助于解决你的根本问题。