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$