【发布时间】:2021-02-11 17:31:27
【问题描述】:
我习惯于在节点有 32 个 CPU 且我的代码需要 2 个处理器的集群中启动 sbatch 脚本。
例如我这样做:
#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 proc 的模拟至少需要 10 小时,因此使用 32 proc 进行更大的模拟需要一周时间。而且我现在不仅需要一个模拟,而且至少需要 20 个。
另一种解决方案是请求 16 个节点 (32*16=512),每个节点仅使用 32 个 proc。但是,这将浪费处理器和集群中允许的小时数。
【问题讨论】:
-
不要指定
--ntasks-per-node。它要么冗余要么与-N和-n不兼容 -
只使用
#SBATCH -n 512,slurm 将为您分配满足您的工作所需的最少节点数,并且还将在节点之间对进程进行负载平衡,以便每个节点尽可能接近相同数量的进程。为了避免与其他用户共享节点的风险,您可以添加#SBATCH --exclusive -
好的,我会尝试只使用
-n 512。这听起来合乎逻辑,但因为我是使用 slurm 的新手,所以我不知道。因为在两个集群的示例中,他们都使用--ntasks-per-node我认为这是必须的 -
@Gilles 它有效,谢谢。我删除了
--ntasks-per-node行,只留下了-n 512,它就像一个魅力。我如何将您的评论作为答案? -
自己写一个答案并接受它。我很高兴你得到相应的代表:)
标签: parallel-processing mpi slurm sbatch