使用更多 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>i
、j
、k
。
要 运行 它,您必须使用 chmod u+x filename.sh
使主文件可执行,然后在您要创建作业时使用 ./filename.sh
。
这绝不是一个完美的解决方案,但实施起来非常快。如果您有太多任务要 运行,请不要使用它,因为您可能会使作业调度程序不堪重负。
我是 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>i
、j
、k
。
要 运行 它,您必须使用 chmod u+x filename.sh
使主文件可执行,然后在您要创建作业时使用 ./filename.sh
。
这绝不是一个完美的解决方案,但实施起来非常快。如果您有太多任务要 运行,请不要使用它,因为您可能会使作业调度程序不堪重负。