在交互式HPC节点上的单个核心上生成了叉子

问题描述

我正在尝试测试在交互式HPC节点上本地开发的脚本,而我一直在运行一个奇怪的问题,即mclapply仅在单个内核上运行。我看到htop中产生了几个R进程(与内核数一样多),但是它们都只占用一个内核。

这是我获取交互式节点的方式:

srun -n 16 -N 1 -t 5 --pty bash -il 

我是否缺少设置?我该如何工作?我可以检查什么?

P.S。我刚刚进行了测试,并且依赖分叉进行并行处理的其他程序(例如pigz)也遇到了相同的问题。看来,那些依赖MPI和消息传递的功能可以正常工作。

解决方法

是,您缺少设置。试试:

srun -N 1 -n 1 -c 16 -t 5 --pty bash -il

问题是您正在在单个内核上分配的bash shell中运行并行命令,因此bash进程仅在srun请求的一个内核上产生。

否则,您可以首先使用salloc分配资源,一旦获得资源,请运行实际命令。例如:

salloc -N 1 -n 1 -c 16 -t 5
srun pigz file.ext