Суперкомпьютер: очень простой пример программы для запуска на суперкомпьютере

Я учусь использовать суперкомпьютеры для эффективного использования ресурсов. Допустим, у меня есть скрипт на Python, который создаст текстовый файл с заданным случайным числом.

мой файл.py

# Imports
import random,os

outdir = 'outputs'
if not os.path.exists(outdir):
    os.makedirs(outdir)

with open (outdir+'/temp.txt','w') as f :
    a = random.randint(0,9)
    f.write(str(a))

Это создаст только один текстовый файл на локальном компьютере.
Можно ли каким-либо образом использовать несколько экземпляров этой программы, использовать несколько узлов и получить несколько выходных данных?

У меня есть шаблон для mpiexec в программе C, который выглядит так, но я не смог найти ни одного шаблона для программы python.

#PBS -N my_job
#PBS -l walltime=0:10:00
#PBS -l nodes=4:ppn=12
#PBS -j oe

cd $PBS_O_WORKDIR

mpicc -O2 mpi-hello.c -o mpi-hello

cp $PBS_O_WORKDIR/* $PFSDIR
cd $PFSDIR

mpiexec ./mpi-hello

cp $PFSDIR/* $PBS_O_WORKDIR

Примечание. На одном узле, использующем несколько ядер, я могу написать такой bash-скрипт:

for i in `seq 1 10`;
    do
        python myfile.py && cp temp.txt outputs/out$i.txt &
    done

Но я хочу использовать разные узлы.
Необходимые выходные данные: outputs/out1.txt,out2.txt,out3.txt и т. д.

Ниже приведены некоторые связанные ссылки:
https://www.osc.edu/sites/osc.edu/files/documentation/Batch%20Training%20-%2020150312%20-%20OSC.pdf
https://www.osc.edu/%7Ekmanalo/multithreadedsubmission


person Bhishan Poudel    schedule 14.10.2016    source источник


Ответы (1)


Взгляните на эту ссылку, это может решить вашу проблему

http://materials.jeremybejarano.com/MPIwithPython/introMPI.html

поэтому ваш код может быть примерно таким:

from mpi4py import MPI
import random,os

outdir = 'outputs'
comm = MPI.COMM_WORLD
rank = comm.Get_rank()

if not os.path.exists(outdir):
    os.makedirs(outdir)

with open (outdir+'/temp%s.txt' % rank,'w') as f :
    a = random.randint(0,9)
    f.write(str(a))

и файл pbs:

#!/bin/bash
################################################################################
#PBS -N myfile.py
#PBS -l nodes=7:ppn=4
#PBS -l walltime=30:30:00:00
#PBS -m bea
##PBS -M [email protected]
###############################################################################

cores=$(awk 'END {print NR}' $PBS_NODEFILE)
mpirun -np $cores python myfile.py
person efirvida    schedule 14.10.2016
comment
Большое спасибо за ваш ответ. Я протестирую этот код в Суперкомпьютерном центре Огайо. - person Bhishan Poudel; 14.10.2016
comment
Будет ли он также копировать разные выводы в окончательный вывод, может быть, это нужно — pbsdcp, но я не знаю, как это сделать? - person Bhishan Poudel; 14.10.2016
comment
@BhishanPoudel, я не понимаю твоего вопроса - person efirvida; 14.10.2016
comment
Извините, я имею в виду, что если я запущу этот код Python на ноутбуке, я получу только один вывод, outputs/temp.txt, но если мы используем 7 узлов и 12 ядер в каждом узле, получим ли мы 7 выходных файлов? например выходы/temp0.txt,temp1.txt. так далее? - person Bhishan Poudel; 14.10.2016
comment
да, вы можете протестировать его на своей машине, используя эту командную строку mpiexec -n 5 python myfile.py для запуска на 5 прецессах, она создает 5 файлов. - person efirvida; 14.10.2016