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 » :
1root@master:~# adduser mpiuser
– création du dossier « cloud » sur « master ». Ce dossier contiendra les programmes partagés entre tous les noeuds de la grappe :
12root@master:~# su - mpiusermpiuser@master:~$ mkdir /home/mpiuser/cloud && exit
– installation du serveur NFS sur le serveur master et configuration du partage du dossier « cloud » :
1234root@master:~# apt-get install nfs-kernel-serverroot@master:~# echo '/home/mpiuser/cloud *(rw,sync,no_root_squash,no_subtree_check)' >> /etc/exportsroot@master:~# exportfs -aroot@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 :
1234root@master:# apt-get install python-mpi4py python-numpy python-tables python-matplotlib python-tkroot@master:# su - mpiusermpiuser@master:$ cd cloudmpiuser@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 ») :
123456mpiuser@master:/home/mpiuser/cloud/mpi4py-examples$ mpirun -np 4 ./01-hello-worldHello! 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
1234567root@master:# ssh slave1root@slave1:# adduser mpiuserroot@slave1:# su - mpiusermpiuser@slave1:$ mkdir /home/mpiuser/cloud && exitroot@slave1:# apt-get install nfs-common -yroot@slave1:# echo 'master:/home/mpiuser/cloud /home/mpiuser/cloud nfs' >> /etc/fstabroot@slave1:# mount /home/mpiuser/cloud
– installation de mpi4py, quelques dépendances :
1root@slave1:# apt-get install python-mpi4py python-numpy python-tables python-matplotlib python-tk -y
– idem pour le noeud slave2 :
1234567root@master:# ssh slave2root@slave2:# adduser mpiuserroot@slave2:# su - mpiusermpiuser@slave2:$ mkdir /home/mpiuser/cloud && exitroot@slave2:# apt-get install nfs-common -yroot@slave2:# echo 'master:/home/mpiuser/cloud /home/mpiuser/cloud nfs' >> /etc/fstabroot@slave2:# mount /home/mpiuser/cloud
1root@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
1234root@master:~# su - mpiusermpiuser@master:~$ ssh-keygenmpiuser@master:~$ ssh-copy-id slave1mpiuser@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 :
123456789101112131415161718192021root@master:# su - mpiusermpiuser@master:~# cd ./cloud/mpi4py-examplesmpiuser@master:~/cloud/mpi4py-examples$ nano hosts.txtmaster slots=4slave1 slots=4slave2 slots=4mpiuser@master:~/cloud/mpi4py-examples$ mpirun --hostfile hosts.txt ./01-hello-worldHello! 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$
Découverte de la programmation parallèle avec Python et mpi4py