Назад | Перейти на главную страницу

PBS Jobs - последовательное или параллельное задание, что лучше для моего сценария

У меня есть доступ к кластеру, который использует «крутящий момент» (я думаю), и мы используем сценарии PBS для отправки заданий. Мне нужно запустить более 200 экземпляров приложения, которое я разработал на java. Приложение действует как одноранговый узел, формирующий сеть P2P, что означает, что эти экземпляры взаимодействуют друг с другом через сокеты.

Я смог провести свои тесты со 100 экземплярами, запущенными на одном узле в кластере, но при запуске 200 экземпляров на одном узле это не работает, и я не могу запросить дополнительные ресурсы (память, ядра и т. )

У меня вопрос: должен ли я делать это так, как я? С последовательным скриптом, в котором я запускаю все свои экземпляры один за другим, отправляя их в фоновый режим, а затем жду их?

Можно ли это сделать с помощью параллельного скрипта, в котором я мог бы запросить 2 узла и создать 100 экземпляров моего приложения в каждом узле? В этом случае у меня есть другие вопросы: как мне это сделать? и есть ли гарантия, что оба задания будут выполняться одновременно? Все 200 экземпляров должны работать одновременно.

Это часть сценария, который я сейчас использую ...

#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

Если вы измените сценарий на что-то вроде:

#PBS -l nodes=2:ppn=4

вы получите 2 узла, каждый с как минимум 4 доступными ядрами. Возможно, вы это уже знаете.

Ваш администратор МОМЕНТА также мог включить pbsdsh. С правильными аргументами вы можете использовать это для запуска команд на каждом узле, зарезервированном вашим заданием. Без pbsdsh, если они хотя бы включили 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

должно вас начать.