Я работаю над кодом Python с MPI (mpi4py), и я хочу реализовать свой код на многих узлах (каждый узел имеет 16 процессоров) в очереди в кластере HPC.
Мой код структурирован следующим образом:
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
count = 0
for i in range(1, size):
if rank == i:
for j in range(5):
res = some_function(some_argument)
comm.send(res, dest=0, tag=count)
Я могу отлично запустить этот код на головном узле кластера с помощью команды
$mpirun -np 48 python codename.py
Здесь «код» - это имя скрипта Python, а в данном примере я выбираю 48 процессоров. На головном узле для моей конкретной задачи работа занимает около 1 секунды (и она успешно дает желаемый результат).
Однако, когда я запускаю, пытаюсь отправить этот же точный код в качестве задания в одну из очередей кластера HPC, он продолжает работать очень долго (много часов) (не завершается) и я должен вручную убить работу через день или около того. Кроме того, он не дает ожидаемого результата.
Вот файл pbs, который я использую,
#!/bin/sh
#PBS -l nodes=3:ppn=16
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name
cd $PBS_O_WORKDIR
echo 'This job started on: ' `date`
module load python27-extras
mpirun -np 48 python codename.py
Я использую команду qsub jobname.pbs, чтобы отправить задание.
Я не понимаю, почему код должен отлично работать на головном узле, но сталкиваюсь с этой проблемой, когда отправляю это задание для запуска кода на многих процессорах в очереди. Я предполагаю, что мне может потребоваться изменить сценарий pbs. Я буду очень благодарен, если кто-нибудь подскажет, что мне делать, чтобы запустить такой MPI-скрипт как задание в очереди в кластере HPC.
send
не завершаетсяrecv
, может возникнуть тупик, и программа будет работать бесконечно. - person francis   schedule 25.05.2017