我正在处理一个我不是管理员且处于锁定配置的旧集群,这给我带来了一些问题。系统使用原始 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