我通常在大学的集群上处理数据。之前完成的大多数工作都基于并行批处理shell(将作业分成几个批次,然后并行提交)。这个shell的一个例子如下所示:
#! /bin/bash
#BSUB -J model_0001
#BSUB -o z_output_model_0001.o
#BSUB -n 8
#BSUB -e z_output_model_0001.e
#BSUB -q general
#BSUB -W 5:00
#BSUB -B
#BSUB -N
some command
这一次,我正在测试一些mpi作业(基于mpi4py)。代码已在我的笔记本电脑上进行单一任务测试(1个任务使用4个处理器运行)。现在我需要在集群上提交多任务(30)作业(1个任务使用8个处理器来运行)。我的设计是这样的:准备上面30个类似的shell文件。每个shell填充的命令是我的mpi命令(类似于“mpiexec -n 8 mycode.py args”)。每个外壳预留8个处理器。
我提交了这些工作。但我不确定我是否做得正确。它正在运行,但我不确定它是否基于mpi运行。我怎么检查?还有两个问题:
1)对于正常的并行作业,通常我可以为单个任务保留一个限制数 - 16.在16以上,我从未成功过。如果我使用mpi,我可以预订更多吗?因为mpi不同。基本上我不需要连续的记忆。
2)我认为集群有一个优先规则。对于普通的并行作业,通常当我为1个任务预留更多处理器(比如10个任务和每个任务16个处理器)时,它需要更多的队列等待时间,而不是为单个任务保留更少的处理器(比如将每个任务划分为8个子任务) -tasks(总共80个子任务)和每个子任务2个处理器)。如果我可以为mpi预留更多的处理器。它会影响这个规则吗?我担心我会永远等待......
答案 0 :(得分:0)
好吧,增加“#BSUB -n”正是你需要做的。该选项告诉您要保留多少执行“插槽”。因此,如果您想要运行20个等级的MPI作业,则需要
#BSUB -n 20
IIRC不需要在同一节点上分配执行槽,LSF将从需要满足请求的多个节点分配槽。但是我已经使用了LSF已经有一段时间了,我目前无法访问使用它的系统,所以我可能错了(它可能取决于本地集群LSF配置)。