PBS Jobs-串行与并行作业,哪个适合我的情况


2

我可以访问使用“扭矩”的群集(我认为),并且我们使用PBS脚本提交作业。我需要运行超过200个用Java开发的应用程序实例。该应用程序充当形成P2P网络的对等方,这意味着这些实例通过套接字相互通信。

我能够在集群的单个节点上运行100个实例来进行测试,但是在单个节点上运行200个实例却无法正常工作,并且我无法请求更多资源(内存,内核等)。 )

我的问题是:我应该按照自己的方式来做吗?使用串行脚本,在其中我一个个地启动所有实例,然后将它们发送到后台,然后等待它们吗?

是否可以使用并行脚本来完成此任务,在该脚本中我可以要求2个节点并在每个节点中实例化我的应用程序的100个实例?在这种情况下,我还有其他问题:我该怎么办?是否可以保证两个作业同时运行?所有200个实例必须同时运行。

  • 为了形成P2P网络,在串行作业中必须至少知道一个对等IP地址,我可以在脚本中获取节点IP地址并将其作为参数传递给应用程序,但是在具有2个节点的并行作业中,我该如何做这个?

这是我当前正在使用的脚本的一部分...

#PBS -l nodes=1:ppn=4
#PBS -l pmem=6GB
#PBS -l walltime=00:20:00
IP=`/sbin/ifconfig eth0 | grep 'inet ' | awk '{print $2}' | sed 's/addr://'`
PORT_PEER=3000
java -jar $JAR $JAR_PARAMS -ip=$IP -port=$PORT_PEER & # first peer, others connect to this one..
  for i in {1..99}
  do
   PORT_PEER=`expr $PORT_PEER + 2`;
   java -jar $JAR $JAR_PARAMS -ip=$IP -port=$PORT_PEER -bootstrap=$IP:3000 &
   sleep 1s
  done
 wait # wait here until all instances terminates

Answers:


1

如果将脚本更改为以下内容:

#PBS -l nodes=2:ppn=4

您将获得2个节点,每个节点至少具有4个可用核心。您可能已经知道。

您的TORQUE管理员可能也已启用pbsdsh。使用适当的参数,您可以使用该参数在作业保留的每个节点上运行命令。没有pbsdsh,如果它们至少rsh在一个队列中启用了系统间的访问,则可以解析环境变量给定的文件内容,并将其解析为不是主要主机的每个文件,$PBS_NODEFILErsh在每个文件上运行shell脚本。

因此,未经测试,但类似于:

# main-script.sh (runs on primary node, spawns off java processes on all
# nodes in job)
#PBS -l nodes=2:ppn=4
MASTER_IP=`/sbin/ifconfig eth0 | grep 'inet ' | awk '{print $2}' \
    | sed 's/addr://'`
PORT_PEER=3000
# first peer, others connect to this one..
java -jar ${JAR} ${JAR_PARAMS} -ip=${MASTER_IP} -port=${PORT_PEER} &
# run 2 copies of smaller-script.sh on unique hostnames in this job
pbsdsh -u -c 2 /path/to/smaller-script.sh ${MASTER_IP}

# smaller-script.sh (runs on each node in job)
MASTER_IP=$1
PORT_PEER=3000
IP=`/sbin/ifconfig eth0 | grep 'inet ' | awk '{print $2}' | sed 's/addr://'`
# other peers, connecting back to first peer from other script
for i in {1..99}
do
    PORT_PEER=`expr $PORT_PEER + 2`;
    java -jar ${JAR} ${JAR_PARAMS} -ip=${IP} -port=${PORT_PEER} \
        -bootstrap=${MASTER_IP}:3000 &
    sleep 1s
done
wait # wait here until all instances terminates

应该让您开始。


感谢您的帮助,我真的认为这将非常有帮助;)
BraCa 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.