Cluster computing 从一个文件运行多个MPI与多个文件运行

Cluster computing 从一个文件运行多个MPI与多个文件运行,cluster-computing,mpi,pbs,Cluster Computing,Mpi,Pbs,我使用的是一个较旧的群集,我不是该群集的管理员,并且处于锁定配置中,这导致了一些问题。系统使用原始的mpich,集群脚本是用Perl编写的,运行时使用parallel::mpi。这个蒙特卡罗脚本生成5000个要运行的测试用例,然后在集群上启动。我查看了原始代码,它花费了大约500(不是5000)的测试,并将它们放在三个文件中。然后,这些文件将它们一次最多传递到260个集群。我问系统管理员是否知道程序员为什么这样做,他说这是因为mpich(1)不允许一次发送超过260个作业。我不确定这是mpich

我使用的是一个较旧的群集,我不是该群集的管理员,并且处于锁定配置中,这导致了一些问题。系统使用原始的mpich,集群脚本是用Perl编写的,运行时使用parallel::mpi。这个蒙特卡罗脚本生成5000个要运行的测试用例,然后在集群上启动。我查看了原始代码,它花费了大约500(不是5000)的测试,并将它们放在三个文件中。然后,这些文件将它们一次最多传递到260个集群。我问系统管理员是否知道程序员为什么这样做,他说这是因为mpich(1)不允许一次发送超过260个作业。我不确定这是mpich1还是并行::mpi

因此,我重写了Perl程序,生成19个文件,每个文件包含大约250个案例,以运行所有5000个案例。我的问题是我通常有一个文件,我用pbs\u mpirun命令运行并启动它。最初的程序有三个独立的启动pbs文件。现在我有19个。我可以从同一个文件启动它们吗?我是否必须在mpirun命令之间设置某种类型的睡眠?集群队列的设置方式一次只能有一个用户在同一队列上运行一个作业。因此,如果我启动以启动多个队列n64的运行,一次只能运行一个,这很好,但我不想提交19个运行并填写qstat列表以完成一个蒙特卡罗(如果不需要的话)

这可能是一些常见的问题,但我从来没有处理过,所以任何建议都将不胜感激。下面是我的PBS文件,它启动了第一个Perl集群文件。Perl集群文件是mpi_wokernode_1.pl-mpi_workernode_19.pl

    #!/bin/sh
    ###Lines starting with "# " are comments, batch system configuration
    ###commands starting with "#PBS" 
    #PBS -l walltime= 12:00:00
    #PBS -N MONTE
    ### Declare job non-rerunable
    #PBS -r n
    ### Output files (overwritten in successive jobs)
    #PBS -e system1:/filearea
    #PBS -o system1:/filearea
    ### Return error and output on output stream
    #PBS -j oe
    ### Queue name (small, medium, long, verylong)
    #PBS -q n64@old_cluster
    #PBS -l select=64:ncpus=1
    #PBS -l place=free
    ##PBS -m e
    #PBS -W group_list=groupa

    cd /filearea
    # Count all available processors 
    NPROCS=`grep -v "\#" $PBS_NODEFILE | wc -l` 
    pbs_mpirun mpi_workernode_1.pl
    pbs_mpirun mpi_workernode_2.pl

这听起来像是一个特定于您的系统的问题,因此在这里可能很难获得有用的建议。但是,如果计算机上有主目录,通常可以在其中安装自己的MPI并启动它。您只需将
--prefix=$HOME/
添加到
/configure
行,就可以开始了。您可能需要修改PBS脚本,以便它使用您的MPI而不是默认的MPI。这可能只是将最后两行合并成如下所示:

/path/to/mpiexe -n <num_procs> /path/to/mpi_program
/path/to/mpiexe-n/path/to/mpi\u程序
这假设了两种情况

  • 您已经为您的主目录设置了某种NFS共享。否则,您将不得不将MPI可执行文件复制到系统中的所有节点,这是一个难题
  • 您可以访问原始MPI程序,并且可以在不使用包装器脚本的情况下直接执行它。如果你这样做的话,这将使整个过程更容易
  • 你的系统没有做一些让你无法运行自己的MPI的坏事。我过去使用过一些系统,这些系统使您很难/不可能用自己的MPI库替换默认的MPI库。您的系统可能不是这样的,但您必须进行实验才能找到答案

  • 这看起来像是将OP的困惑提高一个数量级的秘方。是否私人安装MPI?这是如何回答问题的,还是使运行大量似乎需要的作业变得更容易?绕过现有的作业管理系统不会产生另一个集群,它更有可能在现有集群中加载当前作业管理系统不知道的工作。我看不出这会提高系统的吞吐量。如果有人能找到OP问题的解决方案,欢迎他们提交另一个答案。这个答案是你不同意的有效答案。我同意这不是一个很好的解决方案,但是如果您没有管理员权限来更新现有的安装,并且需要比MPICH 1.0更新的功能,这是一种解决问题的方法。欢迎你投反对票。韦斯利,谢谢你的意见。我真希望我能一起升级mpich。但是,我的主目录中的mpich不是一个选项。这个脚本将由来自不同团队的一群人运行,因此链接到我的主目录是不可行的。幸运的是,这个旧集群不会以这种方式设置两个月,因为我将把它转换成一个测试集群。现在,虽然我仍然坚持我所拥有的。我只是没有看到任何人从同一个pbs脚本执行多个mpirun调用。我不知道这是否很普遍,也许我只是过着一种隐居的生活:->我认为如果你从同一个PBS脚本打多个电话,不会有什么不好的事情发生。试试看,然后再报告。