Quantcast
Channel: Pierrick's lab
Viewing all articles
Browse latest Browse all 12

Découverte de la programmation parallèle avec Python et mpi4py

$
0
0

Description du projet

Utiliser le cluster de Pi pour effectuer des calculs parallels à l’aide de programmes écrits en Python.

Cette procédure a été testée sur Armbian « Legacy Kernel ». Elle ne fonctionne pas sur les version Armbian « dev » (noyau 4.10).

Qu’est-ce que MPI?

MPI  (Message Passing Interface) : norme définissant une bibliothèque de fonctions qui permet d’exploiter des ordinateurs distants ou multiprocesseur par passage de messages.

  • installation de MPI (mpi4py) sur le serveur « master » :
    – création de l’utilisateur mpiuser sur « master » :
    root@master:~# adduser mpiuser

    – création du dossier « cloud » sur « master ». Ce dossier contiendra les programmes partagés entre tous les noeuds de la grappe :
    root@master:~# su - mpiuser
    mpiuser@master:~$ mkdir /home/mpiuser/cloud && exit

    – installation du serveur NFS sur le serveur master et configuration du partage du dossier « cloud » :
    root@master:~# apt-get install nfs-kernel-server
    root@master:~# echo '/home/mpiuser/cloud *(rw,sync,no_root_squash,no_subtree_check)' >> /etc/exports
    root@master:~# exportfs -a
    root@master:~# service nfs-kernel-server restart

    – pour tester la programmation parallèle facilement, j’ai choisi Python et sa librairie mpi4py (plus simple car pas de compilation).
    – installation de mpi4py, quelques dépendances et des programmes de test :
    root@master:# apt-get install python-mpi4py python-numpy python-tables python-matplotlib python-tk
    root@master:# su - mpiuser
    mpiuser@master:$ cd cloud
    mpiuser@master:/home/mpiuser/cloud$ git clone https://github.com/jbornschein/mpi4py-examples.git

    – test de mpi4py avec un programme d’exemple sur la machine locale « master » (programme réparti entre les 4 coeurs de « master ») :
    mpiuser@master:/home/mpiuser/cloud/mpi4py-examples$ mpirun -np 4 ./01-hello-world 
    Hello! I'm rank 3 from 4 running in total...
    Hello! I'm rank 2 from 4 running in total...
    Hello! I'm rank 1 from 4 running in total...
    Hello! I'm rank 0 from 4 running in total...
    mpiuser@master:/home/mpiuser/cloud/mpi4py-examples$
  • installation de MPI (mpi4py) sur les autres noeuds :
    – création de l’utilisateur mpiuser, création et configuration du point de montage cloud
    root@master:# ssh slave1
    root@slave1:# adduser mpiuser
    root@slave1:# su - mpiuser
    mpiuser@slave1:$ mkdir /home/mpiuser/cloud && exit
    root@slave1:# apt-get install nfs-common -y
    root@slave1:# echo 'master:/home/mpiuser/cloud /home/mpiuser/cloud nfs' >> /etc/fstab
    root@slave1:# mount /home/mpiuser/cloud

    – installation de mpi4py, quelques dépendances :
    root@slave1:# apt-get install python-mpi4py python-numpy python-tables python-matplotlib python-tk -y

    – idem pour le noeud slave2 :
    root@master:# ssh slave2
    root@slave2:# adduser mpiuser
    root@slave2:# su - mpiuser
    mpiuser@slave2:$ mkdir /home/mpiuser/cloud && exit
    root@slave2:# apt-get install nfs-common -y
    root@slave2:# echo 'master:/home/mpiuser/cloud /home/mpiuser/cloud nfs' >> /etc/fstab
    root@slave2:# mount /home/mpiuser/cloud

    root@slave2:# apt-get install python-mpi4py python-numpy python-tables python-matplotlib python-tk -y

    – configuration de l’authentification par clé privé du compte mpiuser@master -> mpiuser@slave1 et mpiuser@master -> mpiuser@slave2
    root@master:~# su - mpiuser
    mpiuser@master:~$ ssh-keygen
    mpiuser@master:~$ ssh-copy-id slave1
    mpiuser@master:~$ ssh-copy-id slave2
  •  test de mpi4py avec un programme d’exemple de master exécuté sur tous les cpu de tous les noeuds de la grappe :
    root@master:# su - mpiuser
    mpiuser@master:~# cd ./cloud/mpi4py-examples
    mpiuser@master:~/cloud/mpi4py-examples$ nano hosts.txt
    master   slots=4
    slave1   slots=4
    slave2   slots=4
    
    mpiuser@master:~/cloud/mpi4py-examples$ mpirun --hostfile hosts.txt ./01-hello-world 
    Hello! I'm rank 6 from 12 running in total...
    Hello! I'm rank 4 from 12 running in total...
    Hello! I'm rank 5 from 12 running in total...
    Hello! I'm rank 7 from 12 running in total...
    Hello! I'm rank 10 from 12 running in total...
    Hello! I'm rank 11 from 12 running in total...
    Hello! I'm rank 8 from 12 running in total...
    Hello! I'm rank 9 from 12 running in total...
    Hello! I'm rank 0 from 12 running in total...
    Hello! I'm rank 1 from 12 running in total...
    Hello! I'm rank 3 from 12 running in total...
    Hello! I'm rank 2 from 12 running in total...
    mpiuser@master:~/cloud/mpi4py-examples$

     

Viewing all articles
Browse latest Browse all 12

Trending Articles