CPU数量与内核中CPU总数不同的sbatch脚本



我习惯于在集群中启动sbatch脚本,其中节点有32个CPU,我的代码需要2个处理器的功率。

例如,我这样做:

#SBATCH -N 1
#SBATCH -n 16
#SBATCH --ntasks-per-node=16

#SBATCH -N 2
#SBATCH -n 64
#SBATCH --ntasks-per-node=32

然而,我现在需要使用一个不同的集群,其中每个节点有40个CPU。目前,我只使用一个节点和32个进程来进行测试:

#SBATCH --ntasks=32
#SBATCH --ntasks-per-node=32

(我后来从集群的文档中得到了这个脚本。他们在这个例子中没有使用#SBATCH -N行,我不知道为什么,但可能是因为这是一个例子(

然而,我现在需要用512个处理器进行更大的模拟。我需要使用的节点数量越接近,则为13个(即40*13=520个处理器(。现在的问题是,每个节点的任务数量(从技术上讲(不会是一个整数。

我认为一个解决方案是要求13个节点,其中我将完全使用12个,只有我不会完全使用最后一个。

我的问题是我该怎么做?,有没有其他方法可以在不更改代码的情况下做到这一点?(这将不可能更改代码,这是一个巨大的代码(。

一个512进程的模拟至少需要10个小时,所以一个32进程的大型模拟需要一周的时间。我现在不仅需要一个模拟,而且至少需要20个。

另一种解决方案是要求16个节点(32*16=512(,并且每个节点只使用32个proc。然而,这将浪费处理器和我在集群中被允许的小时数。

好的,答案很简单,但取决于您使用的机器。但我认为它应该每次都有效。

在第二个集群的情况下,我不需要指定行--ntasks-per-node=512。我只需要告诉机器我总共需要多少任务--tasks=512,机器就会自动分配完成这些任务所需的相应数量的节点。

重要提示:如果您的ntasks不是每个节点处理器的倍数,那么最后一个节点将不会完全使用。例如,在我的情况下,我需要512个任务,这相当于13个节点=520个处理器。前12个处理器已完全使用,但最后一个处理器未使用,剩下8个处理器为空。

注意,这可能会在一些代码中引起一些优化问题,因为最后一个节点上的进程将需要与其他节点中的大多数进程进行通信。对我来说,这不是问题,但我知道另一个代码存在问题。

最新更新