(如何)在高负载下保持我的电脑可用?

(如何)在高负载下保持我的电脑可用?

我的具体情况是,我正在一个系统上训练神经网络,我也想用这个系统来做其他工作。在训练某些模型的过程中,我的电脑有时会几秒钟没有响应,即使是相对较轻的程序(如我的网络浏览器)的帧速率也会变得低得令人难以忍受,以至于电脑几乎无法使用。

这以前不是什么大问题,因为我用的模型很小,10 分钟就能训练完,期间我可以休息一下。但现在我遇到一个问题,我需要训练几天的模型,而在此期间我的电脑几乎无法使用。

期望的行为是,我的“正常”进程(例如使用我的 IDE、文本编辑器或浏览器)获得完全优先权,而训练神经网络的任务只获得剩余的计算时间。

这在 Ubuntu 中是否可行(我正在使用20.04 LTS如果这很重要,那怎么办?

答案1

我首先想到的有三个选择:

  1. 好的⇢ 运行具有修改后的调度优先级的程序
  2. 雷尼塞⇢ 改变已运行进程的优先级
  3. cputool⇢ 限制进程可以访问的 CPU 使用量

选项 1 — 不错

这是一个简单的工具,自 90 年代以来几乎每个版本的 Linux 都内置了它,它允许您设置进程的优先级(优先级)。有 40 个值可供选择,范围从-20(最高优先级!其他一切都等待!)到20(这可以等待)。

要设置进程的良好度,可以使用以下语法:

nice -n niceness-value [command args] 

因此,例如,如果您要gzip压缩一个大文件但不需要尽快完成,您可以执行以下操作:

sudo nice -n 10 gzip -9 really_big_database_export.sql

这会将 niceness 设置为10,这在堆栈中的位置相当靠后。

选项 2 — renice

这使您可以更改已运行进程的优先级:

renice -n -15 -p 9999

-n是 niceness,是进程 ID 或 PID。您可以使用、、和/或-p来查找进程的 PID 。有很多工具可以显示此数字。tophtopglancesps -eo pid,ppid,ni,comm

选项 3 — cputool

这个与nice和 有点不同renice,它允许您指定已运行进程可用的资源。例如,如果您发现您的建模经常达到 100% CPU,您可以执行以下操作:

  1. 使用topstopglances和/或ps获取 PID
  2. 称呼cputool
cputool --cpu-limit 33 -p 9999 

这将限制 PID9999仅使用 33% 的 CPU。

如果你的机器上还没有安装cputool,你可以使用以下命令安装:

sudo apt install cputool

希望这能给你提供一点处理能力。

答案2

如果您从终端启动进程,您可以使用nice以较低的优先级启动它(请参阅man nice)。如果您从 GUI 启动它,您可以使用renice更改正在运行的进程的优先级。

请注意,要降低进程优先级,您需要更高的 nice/renice 值。

但基本上,根据瓶颈是什么(您可以使用top它),解决方案通常是增加内存(RAM)和/或更快的磁盘(可能是 SSD)。此外,如果系统内存不足,更快的磁盘将有助于提高交换/分页的速度。

相关内容