问题描述
我正在尝试测试在交互式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