可以使用Slurm使用节点的所有CPU吗?

时间:2019-05-27 12:28:46

标签: parallel-processing cpu slurm

我使用的R函数不可并行化(它仅使用一个节点的一个CPU)。我使用多个节点来拆分我需要做的计算:因此,该函数在多个节点上使用,但是仅使用一个CPU。每个节点有32个CPU。目前,如果我使用10个节点,我想知道是否有可能仅在一个节点上拆分这10个作业,而每个作业将使用1个CPU?

我的意思是:从10个具有1个CPU /节点的节点上的10个作业更改此策略,以在一个使用10个CPU的节点上获得这10个作业?

谢谢

2 个答案:

答案 0 :(得分:0)

与此类似的脚本应该可以工作(假设您使用bash):

#!/bin/bash
#SBATCH -J JOB_NAME # job name
#SBATCH -N 1  # 1 Node cores/node)
#SBATCH -n 10 # 10 tasks

./job1 &
./job2 &
./job3 &
# ...

这将保留1个节点,其中包含10个任务并并行运行作业。根据您正在使用的环境,您可能需要调用一些包装器工具来运行二进制文件(并根据需要设置亲和力)。

答案 1 :(得分:0)

如果您知道工作的内存使用量,则可以多次提交以下内容:

!/bin/bash
#SBATCH --share
#SBATCH --mem=2000  # max. memory in MB
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1

./script_to_run

--share选项告诉分区分配共享选项允许的作业分配,以便与其他正在运行的作业共享资源,有关详细信息,请参见sbatch手册页:

  

默认的共享行为取决于系统配置,并且分区的“共享”选项优先于作业的选项。

如果分区设置允许共享,则作业将被提交到单个节点,直到内存或CPU耗尽。