2016-10-14 8 views
2

J'apprends à utiliser des superordinateurs pour faire un bon usage des ressources. Disons que j'ai un script python, qui va créer un fichier texte avec un nombre aléatoire donné.Superordinateur: exemple simple d'un programme à exécuter en superordinateur

myfile.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)) 

Cela va créer un seul fichier texte dans la machine locale.
Y a-t-il un moyen d'utiliser les multiples instances de ce programme, d'utiliser plusieurs nœuds et d'obtenir plusieurs sorties?

J'ai obtenu un modèle pour mpiexec dans le programme C qui ressemble à ceci, mais je n'ai pas trouvé de modèle pour le programme 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 

Note: Sur un seul nœud en utilisant plusieurs noyaux Je peux écrire un script bash comme ceci:

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

Mais je veux utiliser différents nœuds.
sortie requis: sorties/out1.txt, out2.txt, out3.txt etc

Quelques liens connexes suivent:
https://www.osc.edu/sites/osc.edu/files/documentation/Batch%20Training%20-%2020150312%20-%20OSC.pdf
https://www.osc.edu/~kmanalo/multithreadedsubmission

Répondre

3

Jetez un oeil à ce lien, il peut résoudre votre problème

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

si votre le code peut être quelque chose comme:

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)) 

et le fichier 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 
+0

Merci très beaucoup pour votre réponse. Je vais tester ce code dans Ohio Super-Centre informatique. –

+0

Va-t-il également copier les différentes sorties dans la sortie finale, peut-être qu'il a besoin - pbsdcp, mais je ne sais pas comment? –

+0

@BhishanPoudel, je ne comprends pas votre question – efirvida