J’ai trouvé cet article sur un cluster de Raspberry Pi très intéressant. De plus il comporte un certain nombre de photos qui illustrent bien cette réalisation.
Je vous propose la traduction de cet article, qui montre (une fois de plus ?) que notre framboise est vraiment un outil très souple et utilisable dans de nombreux projets.
Cet article provient de http://eclipsejpa.blogspot.fr/2012/11/java-7-se-parallel-processing-cluster.html. En voici la traduction. De nombreuses images qui illustrent cette page sont disponibles en grand format. Il vous suffit de cliquer sur l’image pour l’agrandir.
Au sommaire :
Un cluster de 32 nœuds pour une expérimentation de calcul parallèle
Présentation
Le SoC ARM qui se trouve au cœur du Raspberry PI est une excellente plateforme pour étudier différentes configurations de traitement parallèle. Si nous sommes à la recherche de performance pure alors le Core i7 d’Intel et un GPU NVidia CUDA feront l’affaire. Avec son processeur à un seul cœur, le Raspberry Pi est environ 40 fois plus lent qu’un cœur de 2ème génération i7-2600 ou de 3e génération i7-3610 (environ 140 fois plus lent qu’une implémentation ForkJoin à 8 Threads). Mais ce n’est pas notre objectif, nous avons besoin d’un moyen efficace et accessible pour faire tourner plusieurs serveurs – et le Pi le fait très bien pour environ 70 $ par serveur (Raspberry Pi + connecteurs + carte SD de 16 Go) et pour seulement 4 watts / nœud. Par exemple : il faudrait 9800$ de cartes Raspberry Pi avec 70Go de RAM pour égaler un i7 de 3ème génération à 1300$ avec 24Go de RAM. Mais nous pouvons construire un cluster de 8 serveurs Raspberry PI à 560$ en remplacement de 8 unités centrales équipées d’i7 et coûtant 10000$.
Nous avons besoin d’alimentations appropriées et de switch pour réaliser un cluster de 32 cartes Raspberry pi.
Les cartes Raspberry Pi se montent très bien sur les breadboards (planches à pain) standard en utilisant les connecteurs d‘Arduino bien pliés.
Dans cette configuration, j’utilise pour mes recherches un ensemble 8 cartes Raspberry Pi pour l’exécution répartie de sessions Java EE RMI/EJB distantes de clients bean d’un serveur central Oracle WebLogic 12c (tournant sur un hôte i7).
Ce tutoriel explique comment obtenir un cluster en réseau de huit (pour le moment) cartes Raspberry PI fonctionnant comme une seule unité de traitement auxiliaire distribué pour le compte d’un serveur de contrôle Java EE – utilisant idéalement Hadoop. L’objectif principal de cet exercice est d’expérimenter le traitement distribué. Comme je configure et achète plusieurs cartes Raspberry Pi et que je travaille sur l’alimentation mon cluster va grandir. Je travaille actuellement avec 8 cartes et 8 autres qui servent de rechange. Le cluster de Raspberry Pi peut réaliser du travail distribué en utilisant une API RPC personnalisée comme session bean distante s’appuyant sur RMI ou ils peut utiliser une implémentation de MapReduce comme Hadoop ou même MPI.
Après avoir réussi à exécuter la JVM (Java Virtual Machine) Oracle ARM sans aucun problème sur un Raspberry Pi Modèle A en utilisant la distribution de Element14, je n’ai pas immédiatement réussi l’exécution de la JVM sur le nouveau Modèle B (512 Mo) parce que la distribution Debian d’Element 14 n’utilise plus la version logicielle du calcul en virgule flottante. J’obtenais l’erreur de bibliothèque manquante suivante.
pi@raspberrypi ~/java/ejre1.7.0_06 $ java -version java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
Téléchargez un nouveau système d’exploitation compatible avec le Java JDK 7 ici
http://www.raspberrypi.org/downloads
Ecrivez-le sur votre carte SD
http://sourceforge.net/projects/win32diskimager/files/
Réinstallez Java (version actuelle d’Oracle : 1.7.0_10)
Vous êtes prêt pour exécuter Java 7 SE sur le Raspberry PI Modèle B. Avec ça, nous pouvons maintenant utiliser Fork-Join, JAXB et JAX-WS webservices (avec un seul thread cependant).
DI 1: Mise en cluster des Raspberry PI
Sur certains routeurs, vous n’obtiendrez pas une adresse attribuée par DHCP si toutes les cartes de PI de framboise cluster sont alimentés dans sync – vous aurez besoin d’échelonner la mise sous tension – cela se produit uniquement si pas assez amplis sont disponibles.
Nous utilisons une bonne alimentation Agilent qui fournit de 3A (en fonctionnement) à 3.5A (au démarrage) (6-7W @ 5V) pour les 8 cartes.
Vous pouvez utiliser un HUB USB pour alimenter 4 cartes, mais pour 8 Raspberry Pi vous aurez besoin d’un meilleur approvisionnement en énergie comme une alim. Agilent. Une alimentation d’établi pourra généralement fournir 40A – mais normalement 5A suffisent pour alimenter jusqu‘à 12 Raspberry Pi fonctionnant à 100% CPU, mais nous aurons besoin d’une meilleure alimentation pour un groupe de 32 cartes Raspberri Pi par exemple.
Une bonne alimentation ATX suffira pour alimenter un groupe de cartes Raspberry Pi. Dans cet exemple, j’ai une alimentation de 450W qui fournit 30A sous 5V (assurez-vous de mettre une charge sur le 5V et 12V également).
Procurez vous l’adaptateur ATX et carte de câblage chez SparkFun et veillez à utiliser plusieurs fils (0,5mm minimum) pour répartir la charge (si 1 fil surchauffe, 2 fils restent à 28 ° C – utilisez au moins 4 fils si vous alimentez 8 cartes) .
Comme vous pouvez le voir, sur cette photo je n’avais pas encore intégré complètement l’interface entre l’alimentation ATX et le chassis de la maquette – mais ça fonctionne très bien et nous ne sommes plus limités par la connexion à l’alimentation de labo ou par les connecteurs 5V USB individuels. (les LED bleues sont celles de la carte microcontrôleur Parallax Propeller 8-core qui les utilise comme indicateur de sortie par core pour le moment).
Il fallait aussi une sorte de fusible de protection – en cas de court-circuit. C’était très stressant de connecter jusqu’à 8 cartes Raspberry Pi sur l’alim. ATX les unes après les autres. Je recommande de travailler avec toutes les broches GPIO et connecteur de câble plat.
26 janv. 2013 : J’ai maintenant 24 des 32 cartes Raspberry Pi sous tension mais l’utilisation de l’alimentation ATX n’est pas pratique car au moment du pic à 15A, le fil surchauffe. Aussi, si vous court-circuitez l’alimentation vous allez utiliser le 15A ou 40A et détruire votre fil. J’ai accidentellement court-circuité les fils sur une alimentation de 5A sur ma planche à pain en métal et le fil d’alimentation a commencé à sentir et à fondre. Cela nous amène à recommander l’alimentation d’un grand groupe de Raspberry Pi avec des alimentations séparées. En cas de court-circuit le courant reste limité à 5.2A, ce qui est assez sûr de ne pas brûler votre maison avant que vous ne vous en rendiez compte !
Installation d’alimentation recommandée pour un cluster de 32 Raspberry Pi
En limitant à 8 Raspberry par alimentation 5A vous pourrez ajouter des périphériques comme un écran Adafruit ou une carte Propeller 8-core sur le bus SPI.
C’est un peu plus cher, mais au lieu d’utiliser une alimentation d’établi 40A 350$, J’utilise 4 alimentations 5A banc séparées (3 PSC-520 à 225$ pièce et 1 Agilent U8002A à 450$).
DI 2: Mise à jour de votre carte de 512 Mo de RAM (470 Mo de 224 Mo)
Le carte Rev 2 a le double de RAM (512 Mo), mais il faut mettre le firmware à jour pour l’activer.
https://github.com/Hexxeh/rpi-update
sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update sudo apt-get install git-core sudo rpi-update
– redémarrez après mise à jour du firmware
DI 3: Overclocking
Le SoC chauffe à 52°C lorsque leRaspberry Pi est overclocké de 700 à 800 MHz (au lieu de 45°C)
DI 4: Configuration réseau
Le module WIPI d’Element 14 fonctionne sans problème avec le Raspberry Pi (photo ci-dessous)
Le WiFi est un peu incertain, je recommande le réseau câblé.
Réseau câblé
Après la duplication des 32 cartes SD, insérez-les une à une dans l’une des cartes Raspberry Pi et modifiez hostname, hosts et les paramètres de l’interfaces réseau
sudo nano /etc/hostname sudo nano /etc/hosts sudo nano /etc/network/interfaces iface eth0 inet static address 192.168.4.101 netmask 255.255.255.0 gateway 192.168.4.1 nameserver 4.2.2.1
# Ici nous ne comptons pas sur les serveurs DNS de nos fournisseurs de services Internet – nous utilisons le serveur google 4.2.2.1 car c’est un serveur DNS plus fiable
sudo nano /etc/resolv.conf nameserver 4.2.2.1
DI 5: Java Setup
Configuration de Tomcat
Identifiez-vous en utilisant « system: raspberry »
Configuration Fortran et MPICH
Le problème est la baisse des performances (surcharge du réseau probable) quand j’augmente le nombre de nœuds (actuellement à 6 RasPi)
pi@rpi0 ~ $ mpiexec -f machinefile -n 1 ~/mpich_build/examples/cpi
Process 0 of 1 is on rpi0
pi is approximately 3.1415926544231341, Error is 0.0000000008333410
wall clock time = 0.017286
pi@rpi0 ~ $ mpiexec -f machinefile -n 2 ~/mpich_build/examples/cpi
Process 0 of 2 is on rpi0
Process 1 of 2 is on rpi1
pi is approximately 3.1415926544231318, Error is 0.0000000008333387
wall clock time = 0.020435
pi@rpi0 ~ $ mpiexec -f machinefile -n 4 ~/mpich_build/examples/cpi
Process 1 of 4 is on rpi1
Process 0 of 4 is on rpi0
Process 2 of 4 is on rpi2
Process 3 of 4 is on rpi3
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.037727
pi@rpi0 ~ $ mpiexec -f machinefile -n 6 ~/mpich_build/examples/cpi
Process 2 of 6 is on rpi0
Process 1 of 6 is on rpi1
Process 0 of 6 is on rpi2
Process 3 of 6 is on rpi3
Process 4 of 6 is on rpi4
Process 5 of 6 is on rpi5
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.043331
Matériel utilisé
32 planches Raspberry Pi Element 14 à 35$ = 1120$
32 cartes SD Sandisk Ultra 16 Go à 10-18 $ = 320 à 576 $
0 câble micro USB = 0 $
1 câble HDMI d’Apple = $ 20
8 câbles d’alimentation à 10$ = 80 $
4 alimentations 5A d’Agilent ou Circuit-Test à 224-450$ = 896 à 1800 $
4 grandes planches à pain (qui permettent de monter 8 RasPi) à 45 $ = 180 $
64 connecteurs Arduino pliables de www.evilmadscience.com à 1$ = 64$
5 switch 8 ports gigabit ou 2 switch 16 ports Dlink 65$ = 325$
32 câbles réseau Belkin – Apple Store à 15$ = 480$
Complément (11/2/2015)
Jérôme a trouvé cet article en faisant des recherches sur le Raspberry Pi. Je vous livre ses commentaires ci-dessous :
Bonjour Monsieur.
Suite à la sortie du nouveau PI 2, je suis allé jeter un coup d’œil sur votre site. Je cherchais aussi des informations sur le PI et la FM.
Je suis tombé sur cet article du cluster à 32 PIs !!!
Les mauvais résultats obtenus ne sont pas très surprenants !!! Java est un non-sens pour le calcul scientifique !!! Dans la réalité, Fortran, C et C++ sont utilisés. Pourtant, les processeurs ARM sont puissants pour faire du calcul scientifique !
J’ai écris ce petit article, en anglais, pour montrer ce que l’on pouvait tirer d’un processeur ARM. J’ai acheté une Nexus 7 en 2012… J’ai été très déçu des résultats… En ayant contacté Google, on m’a déclaré que je n’obtiendrai rien de mieux…
J’ai réussi à avoir un gain de X20 par rapport à ce qui se fait de mieux avec les outils Google et associé à JAVA. J’obtiens un résultat semblable à un processeur Intel à 2,1 GHz pour mon processeur ARM de ma Neuxs 7 à un peu plus de 1 GHz… avec le même compilateur, GCC, seule les options de compilation changent… Ce qui était assez logique à prévoir 2 instructions/clock, ce qui revient au même in fine pour le cœur ARM…
lien mon article :
http://www.learnopengles.com/
cité en référence dans les articles sur les superordinateurs de poche(puce Nvidia…)
http://www.techenablement.com/
Donc il doit être possible de faire de très bonnes choses en calcul avec le Raspberry Pi 2 (ARM V7) encore plus sous forme de cluster mais pas avec Java ou Python !!!
A la fin des années 1980, j’ai eu l’occasion de faire un stage de maitrise sur des calculs distribués dans le domaine de l’imagerie, basés sur des architectures parallèles à base de Transputers (http://fr.wikipedia.org/wiki/Transputer).
L’histoire est un éternel recommencement 😀
Bonjour Luc
eh oui…. on a abandonné les mini ordinateurs pour le PC et maintenant on virtualise les postes de travail … dans un serveur…? La roue tourne ! donc on repasse forcément au même point 🙂
cordialement
François
Le transputer d’Imnos, le T800 pour Atari ST ou TT, un concept que j’aurais bien voulu voir fonctionner !
Ping : 10 raspberry pi cluster | all about raspberry spec and uses
Bonjour,
Comment utilisez vous les ports GPIO?
SPI? I2C?
En vous remerciant pour votre super article
Axel
Avec Monsieur Falcou?
Il n’y en avait pas beaucoup à cette époque qui ont vu venir le calcul distribué 🙂
Bonjour,
Je vous adresse cet email pour vous remercier pour cet article plein de bonnes et utiles informations.
En même temps je voudrais savoir s’il y a une formule exacte pour calculer une alimentation unique d’un cluster de 4 ou 6 Raspberry pi 8 giga
Merci pour votre retour