PBS Jobs - trabalho paralelo em série vs que é melhor para meu cenário

2

Eu tenho acesso a um cluster que usa 'torque' (eu acho) e usamos scripts PBS para enviar trabalhos. Eu preciso executar mais de 200 instâncias de um aplicativo que desenvolvi em java. O aplicativo funciona como um peer formando uma rede P2P, o que significa que essas instâncias se comunicam entre si por meio de soquetes.

Eu consegui fazer meus testes com 100 instâncias em execução em um único nó no cluster, mas ao executar 200 instâncias em um único nó ele não funciona e não posso solicitar mais recursos (mem, núcleos , etc.)

Minha pergunta é: devo fazer isso do jeito que estou fazendo? Com um script serial no qual inicio todas as minhas instâncias, uma por uma, enviando-as para o segundo plano e depois as espero?

Isso poderia ser feito com um script paralelo no qual eu poderia pedir 2 nós e instanciar 100 instâncias do meu aplicativo em cada nó? Neste caso, tenho algumas outras perguntas: Como posso fazer isso? e existe alguma garantia de que ambos os trabalhos sejam executados ao mesmo tempo? Todas as 200 instâncias devem estar em execução ao mesmo tempo.

  • Para formar a rede P2P, pelo menos um endereço IP de mesmo nível deve ser conhecido em um trabalho serial, posso obter o endereço IP do nó no script e passá-lo como um parâmetro para o aplicativo, mas em um trabalho paralelo com 2 nós como posso fazer isso?

Isso faz parte do script que estou usando no momento ...

#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
    
por BraCa 08.10.2011 / 14:32

1 resposta

1

Se você alterar o script para algo como:

#PBS -l nodes=2:ppn=4

você receberá 2 nós, cada um com pelo menos 4 núcleos disponíveis. Você já deve saber disso.

Seu administrador do TORQUE também pode ter ativado pbsdsh . Com os argumentos apropriados, você pode usar isso para executar comandos em cada nó reservado pelo seu trabalho. Sem pbsdsh , se eles tiverem habilitado pelo menos rsh acesso entre sistemas em uma fila, você poderá analisar o conteúdo do arquivo fornecido pela variável de ambiente $PBS_NODEFILE e rsh para cada um que não seja o principal host, executando um script de shell em cada um.

Então, não testado, mas algo como:

# 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}

e

# 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

você deve começar.

    
por 09.10.2011 / 00:42