0

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

因此,我重写了 Perl 程序以生成 19 个文件,每个文件包含大约 250 个案例,以运行所有 5000 个案例。我的问题是我通常有一个文件,我使用 pbs_mpirun 命令运行和启动它。原始程序有三个单独的启动 pbs 文件。所以现在我有 19 个。我可以从同一个文件中启动它们吗?我必须在 mpirun 命令之间放置某种类型的睡眠吗?集群队列的设置方式一次只有一个用户可以在同一个队列上运行一项作业。因此,如果我启动启动多个运行以排队 n64,一次只能运行一个,这很好,但如果我没有,我不想提交 19 个运行并填写 qstat 列表来完成一个 monte carlo至。

这可能很常见,但我从来没有处理过,所以任何建议都将不胜感激。下面是我的 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
4

1 回答 1

2

这听起来像是一个特定于您的系统的问题,因此在这里可能很难获得有用的建议。但是,如果您在机器上有一个主目录,您通常可以在其中安装自己的 MPI 并启动它。您只需添加--prefix=$HOME/<path to install>到您的./configure行中,您就应该准备好了。您可能需要修改您的 PBS 脚本,以便它使用您的 MPI 而不是默认的。这可能只是结合最后两行看起来像:

/path/to/mpiexe -n <num_procs> /path/to/mpi_program

这假设了其中的几个。

  1. 您为您的主目录设置了某种 NFS 共享。如果没有这个,您将不得不将 MPI 可执行文件复制到系统中的所有节点,这很痛苦。
  2. 您可以访问原始 MPI 程序,并且无需包装脚本即可直接执行它。如果您这样做,这将使整个过程更容易。
  3. 您的系统并没有做一些讨厌的事情来阻止您运行自己的 MPI。我过去使用过的系统很难/不可能用自己的 MPI 库替换默认的 MPI 库。您的系统可能不是那样的,但您必须进行试验才能找到答案。
于 2013-08-16T14:06:20.367 回答