2014-05-02 2 views
3

Ceci est une longue question, donc je vais donner un résumé premier:Exécution d'un programme de helloworld.py sur une grille à l'aide slurm

Je suis nouveau dans les systèmes de programmation et de réseau parallèles. Je veux exécuter le premier exemple dans http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html dans une grille que j'ai un compte. Il y a un exemple C fourni par les mainteneurs. Je peux courir ça. Mais avec la version python, je reçois tous les zéros pour les rangs. Quel peut être le problème?

Version longue de la question:

J'ai ce code écrit en Python 2.7 (+ numpy + matplotlib + mayavi) qui prend beaucoup de temps à courir. Comme j'ai un compte dans une grille, je veux y déplacer le code et passer moins de temps pour attendre les essais.

Malheureusement, je suis nouveau pour le parallélisme, les grilles, etc. Je n'ai pas non plus de droits d'administrateur sur la grille.

Une documentation est fournie. Le système utilise SLURM. Vous préparez un fichier sbatch et envoyez le travail par sbatch filename. Il y a cet exemple de programme helloworld écrit en C:

#include <stdio.h> 
#include <mpi.h> 


int main (argc, argv) 
    int argc; 
    char *argv[]; 
{ 
    int rank, size; 

    MPI_Init (&argc, &argv);  /* starts MPI */ 
    MPI_Comm_rank (MPI_COMM_WORLD, &rank);  /* get current process id */ 
    MPI_Comm_size (MPI_COMM_WORLD, &size);  /* get number of processes */ 
    printf("Hello world from process %d of %d\n", rank, size); 
    MPI_Finalize(); 
    return 0; 
} 

et le fichier slurm pour l'exécuter que les admins fournissent:

#!/bin/bash 
#SBATCH -M linux 
#SBATCH -p mid1 
#SBATCH -A username 
#SBATCH -J mid1-test 
#SBATCH -N 1 
#SBATCH -n 4 
#SBATCH --time=2-00:00:00 
#SBATCH --workdir=/truba_scratch/username/test 
#SBATCH --output=slurm-%j.out 
#SBATCH --error=slurm-%j.err 
#SBATCH --mail-type=ALL 
#SBATCH [email protected] 


. /usr/share/Modules/init/sh 
module load somehostithink/library/openmpi-1.4.3/gcc 
export OMP_NUM_THREADS=1 
echo "SLURM_NODELIST $SLURM_NODELIST" 

mpirun helloworld 

exit 

Je peux soumettre par sbatch helloworld.slurm. À la fin, je vois "Bonjour les mondes" de 0 à 3. E.g. Le rang prend des valeurs différentes pour chaque processus. Agréable!

Le problème est, il n'y a pas d'exemple de programme écrit en Python. Le python dans le système est ancien: 2.6.x. J'ai donc téléchargé la distribution anaconda et l'ai installée dans l'espace utilisateur. J'ai essayé d'adapter l'exemple helloworld.slurm ci-dessus. Je veux lancer l'exemple de helloworld ici: http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html. Je peux soumettre le travail, mais je reçois helloworlds avec le même rang, comme vous pouvez le voir dans les fichiers de sortie. Par exemple. cela ne semble pas fonctionner sur des processus différents.

Note: Je reçois la même erreur avec la version c, mais elle fonctionne toujours et produit des rangs différents.

helloworld version python:

from mpi4py import MPI 
comm = MPI.COMM_WORLD 
rank = comm.Get_rank() 
print "hello world from process ", rank 

fichier slurm pour python Bonjour tout le monde (de main.py)

#!/bin/bash 
#SBATCH -M linux 
#SBATCH -p mid1 
#SBATCH -A username 
#SBATCH -J mid1-test 
#SBATCH -N 1 
#SBATCH -n 4 
#SBATCH --time=2-00:00:00 
#SBATCH --workdir=/scratch/username/test 
#SBATCH --output=slurm-%j.out 
#SBATCH --error=slurm-%j.err 
#SBATCH --mail-type=ALL 
#SBATCH [email protected] 

. /usr/share/Modules/init/sh 
module load somehost/library/openmpi-1.4.3/gcc 
export OMP_NUM_THREADS=1 
echo "SLURM_NODELIST $SLURM_NODELIST" 

mpirun /scratch/username/anaconda/bin/python /scratch/username/test/main.py 

exit 

Le fichier d'erreur produit:

slurmd[shomehostithink]: task/cgroup: plugin not compiled with hwloc support, skipping affinity. 

Le fichier de sortie produit:

SLURM_NODELIST hostidithink 
hello world from process 0 
hello world from process 0 
hello world from process 0 
hello world from process 0 

Alors, quelle pourrait être la cause du problème? Comment puis-je le résoudre?

J'ai évidemment envoyé un message à l'administrateur, mais il n'a pas encore répondu.

+0

Assurez-vous que 'mpi4py' est lié à la même version Open MPI, c'est-à-dire à l'installation d'Open MPI 1.4.3 sur le système que vous utilisez. La non-concordance dans la version de bibliothèque utilisée pour créer le logiciel et la version d'exécution est la raison n ° 1 pour les processus MPI qui échouent à l'initialisation de singleton (tous les rangs sont donc 0). –

Répondre

1

Sous Linux, Anaconda de mpi4py est livré avec mpich (et il utilise OpenMPI avec OS X.) Puisque vous utilisez un OpenMPI mpirun, pourrait expliquer l'effet singleton par là.Vous avez deux options:

  1. recompilation Anaconda de la source à utiliser openmpi-1.4.3/gcc
  2. essayer de trouver le programme mpirun de Anaconda et d'utiliser celui-là, avec quelque chose comme /scratch/username/anaconda/bin/mpirun /scratch/username/anaconda/bin/python /scratch/username/test/main.py

L'erreur vous rencontrez avec Slurm indique que le plugin Slurm cgroup n'a pas été compilé avec le support de hwloc, et par conséquent, l'affinité de tâche (épinglage des processus aux cœurs) n'est pas supportée. Cela ne devrait pas être la cause du problème singleton.

Questions connexes