SLURM 集群中的错误 - 检测到 1 个 oom-kill 事件:如何改进 运行 个工作

Error in SLURM cluster - Detected 1 oom-kill event(s): how to improve running jobs

我在 SLURM 集群中工作,我同时 运行 多个进程(在多个输入文件上),并使用相同的 bash 脚本。

在作业结束时,进程被终止,这是我得到的错误。

slurmstepd: error: Detected 1 oom-kill event(s) in step 1090990.batch cgroup.

我的猜测是内存有问题。但是我怎样才能知道更多呢? 我没有提供足够的内存吗?或者作为用户,我请求的内容超出了我的访问权限?

有什么建议吗?

这里OOM代表"Out of Memory"。当 Linux 内存不足时,它将 "oom-kill" 一个进程来保持关键进程 运行。看起来 slurmstepd 检测到您的进程被 oom-killed。 Oracle有a nice explanation这种机制。

如果您请求的内存超出允许的范围,则进程不会分配给节点,计算也不会开始。看来您需要申请更多内存。

批准的答案是正确的,但更准确地说,是错误的

slurmstepd: error: Detected 1 oom-kill event(s) in step 1090990.batch cgroup.

表示您 Linux 的 CPU RAM 内存不足 .

例如,如果您运行在 GPU 上进行一些计算,请求比可用内存更多的 GPU 内存将导致如下错误(PyTorch 示例):

RuntimeError: CUDA out of memory. Tried to allocate 8.94 GiB (GPU 0; 15.90 GiB total capacity; 8.94 GiB already allocated; 6.34 GiB free; 0 bytes cached)

查看此 article 中的说明了解更多详情。

解决方法: 增加或添加脚本参数 --mem-per-cpu.

1) 如果您正在使用 sbatch: sbatch your_script.sh 到 运行 您的脚本,请在其中添加以下行:

#SBATCH --mem-per-cpu=<value bigger than you've requested before>

2) 如果您正在使用 sransran python3 your_script.py 添加此参数,如下所示:

sran --mem-per-cpu=<value bigger than you've requested before> python3 your_script.py

我错过了 scheduler="processes" 参数。

mean_squared_errors = dask.compute(*delayed_results, scheduler="processes")

我也在 SLURM 集群上,修复这个疏忽解决了我的问题。