使用更多 cpu 的 slurm 并行化作业

Parallelizing jobs using slurm using more cpu's

我是 slurm(也是 HPC)的新手,我已经编写了一个我想执行的脚本。我也非常小心,因为集群属于不同的研究所,我不想因为我的愚蠢而 break/destroy 事情。我的脚本要花很多时间,我想更快地完成。我在 wiki 上读到这些有时被称为令人尴尬的并行作业? (这意味着很容易将它们并行化)。

我应该如何修改脚本以使用更多 cpu 使其 运行 更快? (运行 i、j、k 的任何特定值需要 16 分钟)。我可以做一些事情,以便它采用一些值 i、j、k 并并行计算不同的 CPU 吗?非常感谢任何帮助。

#!/bin/sh -e 
#SBATCH -p hh
#SBATCH -o job.log
#SBATCH -e job.log
#SBATCH --exclusive
#SBATCH --job-name=myjob
#SBATCH --ntasks=1
#SBATCH -c 128
#SBATCH --hint nomultithread
#SBATCH --time=1-0
#SBATCH --exclude=hh003

for i in $(seq 1.0 0.05 3.65); do
    for j in $(seq 3 7); do
        for k in $(seq 0.01 0.01 0.08); do
                    do something
done
done
done

由于您似乎没有太多任务要 运行,一个超级快速和简单的解决方案是简单地制作一个 bash 脚本来生成作业请求。制作一个 bash 文件,例如 filename.sh,内容为:

#!/bin/sh -e
for i in $(seq 1.0 0.05 3.65); do
    for j in $(seq 3 7); do
        for k in $(seq 0.01 0.01 0.08); do
                    sbatch batch_request_filename.sh i j k
done
done
done

还有第二个文件(在本例中为 batch_request_filename.sh),其中包含您想要并行化的代码以及您需要的所有 #SBATCH 条目。其中,</code>、<code></code>分别对应<code>ijk

要 运行 它,您必须使用 chmod u+x filename.sh 使主文件可执行,然后在您要创建作业时使用 ./filename.sh

这绝不是一个完美的解决方案,但实施起来非常快。如果您有太多任务要 运行,请不要使用它,因为您可能会使作业调度程序不堪重负。