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