web-dev-qa-db-ja.com

PBSジョブ-私のシナリオに適したシリアルジョブとパラレルジョブ

'torque'(私は思う)を使用するクラスターにアクセスでき、PBSスクリプトを使用してジョブを送信します。 Javaで開発したアプリのインスタンスを200以上実行する必要があります。アプリはP2Pネットワークを形成するピアとして機能します。つまり、これらのインスタンスはソケットを介して相互に通信します。

クラスター上の単一ノードで実行されている100個のインスタンスでテストを実行できましたが、単一ノードで200個のインスタンスを実行すると機能せず、それ以上のリソース(mem、コアなど)を要求できません。 )

私の質問は:私がそれをしている方法でこれをするべきですか?すべてのインスタンスを1つずつバックグラウンドに送信してから待機するシリアルスクリプトを使用しますか?

これは、2つのノードを要求し、各ノードでアプリの100個のインスタンスをインスタンス化できる並列スクリプトで実現できますか?この場合、他にいくつか質問があります。どうすればよいですか。両方のジョブが同時に実行されるという保証はありますか? 200個のインスタンスすべてが同時に実行されている必要があります。

  • P2Pネットワークを形成するには、シリアルジョブで少なくとも1つのピア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
2
BraCa

スクリプトを次のようなものに変更した場合:

#PBS -l nodes=2:ppn=4

2つのノードがあり、それぞれに少なくとも4つの利用可能なコアがあります。あなたはすでにそれを知っているかもしれません。

TORQUE管理者がpbsdshも有効にしている可能性があります。適切な引数を使用すると、それを使用して、ジョブによって予約されている各ノードでコマンドを実行できます。 pbsdshがなくても、1つのキュー内のシステム間で少なくともrshアクセスが有効になっている場合は、環境変数$PBS_NODEFILEおよびrshによって指定されたファイルの内容を、メインホストではない各システムに対して解析できます。それぞれのシェルスクリプト。

したがって、テストされていませんが、次のようなものです。

# 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

始める必要があります。

1
Mike Renfro