如何在lsf中启动多线程mpi进程?

时间:2013-06-25 14:22:40

标签: multithreading mpi openmp distributed-computing lsf

我想用LSF提交一份工作:

  • 在4个节点上并行运行
  • 每个节点都有一个mpi进程
  • 每个进程有12个线程

在没有LSF的情况下,我只需在4个节点上启动mpi,例如:

mpirun -hosts host1,host2,host3,host4 -np 4 ./myprocess --numthreads = 12

然而,在有LSF的情况下,我看不出怎么做?我确信这可能是一种非常标准的方法,但我对LSF来说还是个新手。我用Google搜索,但答案对我来说并不是很明显。我发现Hybrid MPI/OpenMP in LSF,但它似乎并不完全相同,似乎一次只需要一个主机。

2 个答案:

答案 0 :(得分:5)

您链接的另一个问题为您提供了所需的内容,但您必须稍微调整它,因为它是为OpenMP应用程序编写的,其线程数由OMP_NUM_THREADS环境变量控制。 / p>

以下是工作脚本中最重要的部分:

  • #BSUB -n 4 - 请求4个插槽
  • #BSUB -R "span[ptile=1]" - 请求每个节点分配一个插槽;此选项与前一个选项一起跨越4个不同节点的作业,并指示LSF在生成的主机文件中为每个主机放置一个插槽
  • #BSUB -x - 请求对节点的独占访问权

以上三个选项将指示LSF分配4个节点,并在每个节点上保留一个插槽。由于还要求独占访问,因此没有其他作业将与作业共享相同的节点,您可以为每个节点启动任意数量的线程。然后你只需要调用Open MPI的mpiexec,如果在你的Open MPI设置中编译了LSF集成,它将自动从LSF中获取主机列表并为每个节点启动一个进程。

示例LSF作业文件如下所示:

#BSUB -n 4
#BSUB -R "span[ptile=1]"
#BSUB -x

mpiexec -np 4 ./myprocess --numthreads=12

确保您还使用-W选项请求足够的运行时间,并使用-M选项请求足够的内存。 LSF(以及大多数其他分布式资源管理器)中的内存是每个插槽,因此您应该指定任何./myprocess实例将占用的最大内存量。

如果未在Open MPI发行版中编译LSF集成,则该过程涉及更多,因为您必须解析LSF主机文件并从前者创建Open MPI主机文件。

答案 1 :(得分:0)

虽然我已经接受了Hristo的答案作为正确的答案,但这是我最后所做的,这避免了使用'-x', - W和-M的问题,并且与我的系统管理员告诉我的内容一致:

#!/bin/bash

machinefile="$(mktemp)"
n=0
cmdstring="mpirun -machinefile ${machinefile} "
for host in $LSB_MCPU_HOSTS; do {
   if [[ $host != 12 ]]; then {
       echo $host>>$machinefile
       n=$(($n+1))
   } fi
} done

echo $n
echo $@

mpirun -machinefile ${machinefile} -np $n $@

你使用这个脚本,比方说它叫'lsfrun.sh':

bsub -n 48 -R "span[ptile=12]" ./lsfrun.sh ./myprocess --threads 12
相关问题