ParallelKnoppix ou le cluster du pauvre
Par Joël le dans Geek Attitude. Marqué comme cluster, debian, geek, linux, sysadmin, tutoriel avec 11 Commentaires
Un ami de longue date m’a fait une proposition que je n’ai pas pu refuser … il souhaitait quo-écrire un billet sur Sublimigeek alors vous pensez bien que j’ai accepté :)
C’est donc pour cette raison que ce billet sera peut être un peu (ou pas) technique, car nous allons vous parler de Clusters. Et pas de n’importe quel cluster, car celui-ci peut être configuré pour quasiment rien chez vous si jamais l’envie vous prenez !! Qui a dit que seul un g33k a ce genre d’envie ??
Informations supplémentaires :
Cet article a été rédigé par Breutsen et moi même. Si vous souhaitez contacter Breutsen, il vous est possible, soit de laisser un commentaire en fin d’article, soit de prendre contact avec moi même via le formulaire de contact et je lui transmettrai votre message.
Entrons maintenant dans le vif du sujet !!
Nous allons vous expliquer, dans ce tutoriel, comment monter un cluster de calculs minimaliste.
En effet, ce tutoriel est fait pour vous si comme nous :
- Vous voulez exécuter des applications lourdes en ressources (mémoires vives, temps de calculs, …)
- Vous avez dans vos {placards|garages|batcaves|chambres} plusieurs PC inutilisés (et que vous les gardez en vous disant qu’un jour vous en ferez quelque chose)
- Vous êtes un g33k, et que vous voulez le faire juste parce qu’on peut le faire !!
La procédure que nous allons détailler permet donc de monter un cluster de calculs dans son salon (ou toutes autres pièces bien sûr), et le tout à moindre coup car il s’agit d’une solution live !
Donc si cela ne fonctionne pas, si cela ne vous convient pas, ou si tout simplement vous ne voulez pas polluer toutes vos machines, il vous suffira de tout éteindre et de reprendre le cours normal de votre vie car aucune modification ne sera effectuée sur votre matériel :)
Liste du matériel nécessaire :
Pour monter son propre cluster, il faudra avoir au minimum 2 PC reliés par un câble Ethernet croisé, ou bien plusieurs PC avec autant de câbles Ethernet droits, et un switch ou commutateur réseau. Notez bien que nous parlons ici exclusivement de PC et non de machine Mac, Sun à processeurs Sparc, smartphones et/ou je ne sais quelles autres machines exotiques …
1 – Qu’est ce qu’un cluster ?!
Un cluster de calculs (ou grappe de serveurs) est un assemblage de plusieurs unités de calculs indépendantes, qui sont mises en commun par un réseau pour effectuer un calcul trop gros pour chaque machine seule. On parle alors d’architectures parallèles.
Pour être plus concret, prenons l’exemple du décodage de l’ADN, ou de l’observation des galaxies. Ce sont des calculs qui prendraient un temps astronomique pour le meilleur ordinateur du monde. Cependant, si on découpe cette énorme tâche en plusieurs petites tâches qui seront exécutées par plusieurs ordinateurs, on obtient des temps de calculs acceptables …
On distingue alors plusieurs types d’architectures parallèles :
- Les architectures à mémoires partagées. Il s’agit des ordinateurs de bureaux possédant plusieurs CPU dans le même processeur (Dualcore, Quadcore,…), ou bien plusieurs processeurs sur la même carte mère.
Ces processeurs partagent alors la même mémoire vive. Dans ce cas, c’est le système d’exploitation qui va gérer la charge de chaque CPU. - Les architectures à mémoires distribuées. Il s’agit du cluster a proprement parlé, c’est a dire que chaque processeur possède une mémoire qui lui est propre, et les CPU communiquent entre eux par un réseau. Chaque unité indépendante est appelée nœud de calcul. La gestion des tâches est alors faite par un nœud maître, que l’on appellera le frontal, par opposition aux nœuds esclaves.
- Les architectures hybrides. Ce sont plusieurs machines à mémoires partagées qui sont reliées en réseau et travaillent ensemble.
Attention, il ne suffit pas de posséder une architecture parallèle pour faire du calcul parallèle … Il faudra aussi savoir coder/développer en parallèle !! (Cela fera certainement l’objet d’un prochain tutoriel si cela vous semble intéressant).
Pour vous en convaincre (et pour les possesseurs de multicores), lancez une application, par exemple votre navigateur préféré Firefox et monitorez l’activité de vos CPU. Un seul CPU travaillera sur le processus Firefox !
2 – Quel système d’exploitation choisir ?!
Bon ok, côté matériel, on a bien compris comment ça fonctionne … Mais après, il faut passer un temps fou à installer un système sur chaque nœud, à les configurer un à un etc … Que-nenni !
En fait, il suffit d’installer un système d’exploitation sur le frontal, et de démarrer les nœuds esclaves par un protocole PXE (Cf. section suivante). On configure alors un réseau à partir du frontal, on affecte ensuite une adresse IP à chaque nœud, et on propage toutes les données nécessaires sur chaque nœud.
Et le plus beau, c’est que tout ceci peut se faire automatiquement, et en solution live CD !
Comme nous sommes tous deux des adeptes des distributions Debian, nous vous proposons la dernière version de la distribution ParallelKnoppix qui est téléchargeable à cette adresse : http://pareto.uab.es/mcreel/PelicanHPC/ à partir de la section ”Download” ou directement via ce lien direct pour la version 2006 (l’image fait 582 Méga). Cette distribution possède tout l’arsenal nécessaire à la configuration d’un cluster, et surtout les librairies nécessaires aux calculs parallèles (notamment la librairie MPI ou Message passing interface, pour les connaisseurs).
Conseils à prendre en compte :
ParallelKnoppix est une distribution extrêmement précaire. Cette distribution n’est pas destinée à une utilisation bureautique ou serveur, mais elle est conçue pour être facile à utiliser dans un environnement qui peut être restauré rapidement si une catastrophe survient.
Il est fortement recommandé que vous utilisiez ParallelKnoppix et votre grappe de serveurs sur un réseau dédié qui sera déconnecté de l’Internet pour des raisons de sécurité.
3 – Qu’est ce que le PXE ?!
Le protocole PXE (ou Preboot eXecution Environment) est une invention merveilleuse qui permet, au travers d’un réseau, de démarrer un ordinateur à distance. On peut alors démarrer sur les disques durs présents sur la machine contrôlée, mais aussi et surtout démarrer depuis le réseau en récupérant une image de système d’exploitation qui se trouvera sur un serveur.
Cependant, cette technologie n’est pas compatible avec toutes les interfaces réseau, ainsi qu’avec tous les BIOS. Il existe alors une solution pour les machines non compatibles.
Cette solution se nomme gPXE, qui est une solution de Preboot eXecution Environment Open Source. gPXE permet alors d’activer le protocole PXE sur les machines ne prenant pas en charge la fonctionnalité de démarrage par réseau. (gPXE permet également l’ajout de protocoles de transferts de données, reportez vous à sa documentation si nécessaire). Il s’agit donc d’une image CD sur laquelle on va démarrer et qui va interroger le réseau pour voir si, par hasard, une image bootable ne s’y baladerait pas. Si tel est le cas, il va alors démarrer sur cette image et lancer l’installation du système d’exploitation.
Vous l’aurez compris, si votre machine n’est pas compatible PXE (option disponible normalement via le BIOS), il ne vous reste plus qu’à aller télécharger l’image de gPXE que vous trouverez ici : http://rom-o-matic.net/.
4 – Installation de l’OS :
Bon, on a (enfin) tout pour se lancer, alors allons-y, dans la joie, la gaieté et la bonne humeur :)
1. On regroupe toutes les machines qui formeront notre cluster dans un coin, pour éviter que votre {concubin(e)|maman|colocataire|doigt de pied} ne se plaigne trop de leurs présences.
On relie les X PC entre eux, soit avec un câble Ethernet croisé s’il l’on a que deux machines, soit avec X câble Ethernet droit et un switch, si X>1 (oui, vous noterez qu’un cluster de 1 PC ne sert absolument à rien !!).
2. On choisi ensuite un nœud qui sera le frontal, et on boot parallelKnoppix. L’installation se fait toute seule, laissez les options par défaut, à moins que vous sachiez ce que vous faites …
Informations importantes :
Si la machine qui vous servira de frontal possède un lecteur CD/DVD branché en Sérial ATA (ou SATA) sur la carte mère, sachez que ParallelKnoppix ne démarrera pas correctement à tous les coups et vous affichera alors cette superbe erreur :
Can't find KNOPPIX filesystem, sorry. Dropping you to a (very limited) shell. Press reset button to quit.
Pour résoudre cette erreur (pour Breutsen pas de souci apparemment, mais personnellement j’y ai passé|perdu pas mal de temps), il faut retourner dans votre BIOS est reconfigurer votre lecteur pour le passer en Mode IDE. Sur certains BIOS, il s’agit de l’option AHCI qu’il faut désactiver. Enregistrez ensuite les modifications et redémarrez votre machine.
Attention, si vous oubliez de reconfigurer votre BIOS une fois de retour sur votre OS préféré, sachez que le lecteur sera dans la plupart des cas non reconnu par le système tant que le mode SATA et/ou AHCI n’est pas réactivé !!
Pour retourner à notre installation, sachez que lors de nos tests, la détection du matériel et la gestion des pilotes s’est faite sans problème, qu’il s’agisse des pilotes de cartes graphiques ou de la reconnaissance de « combo » clavier/souris en Bluetooth. On arrive ensuite sur le bureau KDE (mais il est possible d’avoir un bureau Gnome, pour les fanatiques #troll). Vous pouvez alors configurer votre Bureau préféré comme bon vous semble.
Vous en conviendrez, rien de compliquer pour le moment (sauf l’histoire de compatibilité du lecteur mais ça va dépendre de votre machine). On passe alors à la configuration de notre cluster.
5 – Configuration du cluster : (le meilleur moment ^^)
**mode_g33k_on**
**mode_g33k_off**
Sachez qu’il est également possible, pour les plus ”user friendly” d’entre vous, de réaliser cette configuration via le mode graphique alors ne vous inquiétez pas :)
D’ailleurs, pour que ce tutoriel reste digeste, nous allons vous proposer une configuration de notre cluster en mode graphique :
ParallelKnoppix
puis sur Setup ParallelKnoppix
.
Les scripts de configuration vont alors configurer la première carte réseau détectée avec l’adresse IP 192.168.0.1
, et créer un réseau local ayant des adresses IP de la forme 192.168.0.X
.
Attention, si votre frontal dispose de plusieurs cartes réseau (pour être connecté à Internet par exemple), la première carte (eth0) sera toujours considérée comme la carte utilisée pour le cluster. Il vous faudra alors configurer les autres pour vous connecter aux autres réseaux. Il faut donc faire attention au moment de relier les câbles Ethernet à bien choisir sa carte réseau.
L’assistant de configuration vous propose donc de configurer (ou de reconfigurer) votre cluster selon s’il s’agit d’une première configuration, ou s’il faut ajouter ou supprimer un nœud sur un cluster existant. Quoi qu’il en soit, cliquez sur
OK
.
L’assistant vous demande ensuite quelles cartes réseaux seront utilisées, là encore, laissez le choix par défaut, à moins de savoir ce que vous faites.
L’assistant vous demande ensuite sur quelles partitions écrire un fichier de sauvegarde. Choisissez votre partition, et sachez qu’au redémarrage de la machine, vu que nous sommes sur un liveCD toutes les données seront perdues à moins de les stocker sur un disque dur externe par exemple.
A ce moment là, démarrez vos nœuds esclaves sur le PXE de votre BIOS ou avec le live CD gPXE, et ne faites rien. L’assistant (sur le frontal), vous demandera les options de boot des nœuds esclaves à paramétrer, laissez « 2 » par défaut, sauf si des options supplémentaires vous semblent nécessaires.
Le script démarre alors le serveur DHCP et il vous indique qu’il va rechercher sur le réseau les nœuds disponibles. Un message vous indiquera « Vous avez X nœuds disponibles ». Cliquez oui si tout les nœuds sont détectés, ou non pour refaire une recherche. L’installation démarre alors sur les nœuds esclaves, et lorsque tout est terminé, une fenêtre vous montre la liste des nœuds prêts à l’utilisation.
Voila c’est fini, votre cluster est configuré et fonctionnel !! A partir de ce moment, vous pouvez boire un bon coup pour fêter cette victoire.
6 – Utilisation du cluster :
OK, notre cluster est opérationnel, mais on en fait quoi maintenant ?!
Bonne question … mais avant tout, savourez encore un peu ce moment, car à partir de maintenant, le moindre dysfonctionnement sur le cluster sera de VOTRE faute !
Dans le dossier /home/knoppix
, vous trouverez quelques exemples de codes pour tester votre cluster. On utilise principalement les bibliothèques MPI pour calculer sur ce type de cluster. Il existe donc les compilateurs MPICC (pour compiler un code source en parallèle C), ou MPIF77 et MPIF90 (pour les adeptes du Fortran comme moi «« là c’est Breutsen qui cause hein ^^).
Ils s’utilisent alors comme vos compilateurs habituels :
knoppix@host[location]$ mpicc -o NomDuProgramme CodeSourceACompiler.c
Et pour soumettre le programme sur le cluster :
knoppix@host[location]$ mpirun -np X NomDuProgramme
La commande mpirun prend alors le paramètre suivant :
-np X
qui indique que notre programme « NomDuProgramme » sera exécuté sur X CPU (attention, il s’agit bien de CPU et non de nœuds !!).
Testez par exemple le script python traçant des fractales, dans le répertoire /home/knoppix/Examples/python
, avec la commande suivante :
knoppix@host[location]$ mpirun -np 10 –hostfile /temp/bhosts pyMPI fractal.py
Le résultat est un fichier image dans le dossier courant. Vous trouverez sur la toile de nombreux exemples de programmes en parallèles, assez impressionnants (voir la section Marques Ta Page en fin d’article).
Lors de l’exécution de vos programmes parallèles, vous pouvez monitorer l’activité de chaque nœud, dans le menu parallelKnoppix
puis PK Cluster Monitor
. Finalement, avec l’option remastering, vous pouvez enregistrer vos paramètres actuels sur une partition du disque dur, ou bien en image ISO pour ne pas refaire toute la configuration, et sauvegarder vos codes et résultats …
7 – Remarques et conclusion :
Voila, vous savez maintenant comment monter un cluster assez facilement. Il ne vous reste plus qu’à apprendre à développer vos propres codes en parallèles, pour ceux qui ne savent pas déjà le faire.
Si vous souhaitez posséder un cluster de manière plus permanente, sachez qu’il existe de nombreuses distributions (Debian, Ubuntu …) qui permettent de monter des clusters, presque aussi facilement que ce que vous venez de voir, tout en étant bien plus sécurisées que ParallelKnoppix !!
En bonus, voici quelques images de clusters glanées sur la Toile, histoire de vous montrer ce que vous êtes maintenant capable de faire :
Mes « marque TA page » glanés lors de ce périple sur les clusters :
Un site proposant quelques supports de cours pour développer en parallèle et qui met à disposition quelques exemples : http://www.idris.fr/data/cours/parallel/mpi/choix_doc.html
Voici les sources que j’ai utilisées pour réaliser ce billet :
– Les différents liens Wikipédia qui parsement cet article.
– Une grande part des connaissances de mon ami Breutsen (n’hésitez pas à le contacter si vous avez des questions)
– Et une grosse partie des README et autres tutoriels disponibles sur le liveCD de la distribution ParallelKnoppix !!
Source de l’image utilisée en illustration : Patriceguay.com
Sources des images utilisées en illustration de l’article : Streamlab.info, Cines.fr, Calamar.univ-ag.fr, ainsi que de nombreux screenshots disponibles sur le liveCD de la distribution ParallelKnoppix.
Excellent ! bien documenté et accessible :) | mais un peu tard ^^ je suis déçu de ne pas avoir lu un tel article il y a deux ans ! mes récupérations de 4 lourd pc hp 7 ans d’ages m’auraient bien éclaté pour quelques tests inutiles, et donc, comme nous le savons tous, indispensables hihi ^^
Paix à leur ame…
Je suis tombé sur votre article car je recherchais justement un retour d’expérience concernant l’installation d’un cluster. Et je tiens à vous dire que votre article m’a beaucoup aidé, je sais maintenant quelles sont les différentes étapes importantes.
Tutoriel très intéressant ! Je ne connaissais pas toutes ces méthodes. L’article nous explique très bien le concept du cluster
Merci pour ce tuto.
Je cherche à le faire sur ubuntu ou Windows. Apres longue recherche sur le web je n’arrive pas à trouver ce type de tuto pour mon cas.
Auriez vous des liens à me proposer ? Thanks
Hello,
Quel est ton besoin initial ?
Je t’avouerai que depuis la rédaction de cet article, je n’ai pas eu l’occasion de rejouer avec ce type de techno :)
@+
Bonjour tout le monde et surtout à vous 2; Joël et Breutsen.
alors voila moi qui suis un peu fou j’aurais 2/3 question a vous poser;
– Est-il possible de monter un cluster avec plusieurs switch ? du genre on à l’uc frontal qui part sur un switch de 16 qui repart sur d’autres switch de 8 ou 16 qui serait eux relier a des slaves, ou est-ce-qu’il y aurait des problème au niveaux de la détection des cpu ?
– Je voulais savoir aussi si le fait de monter un cluster permettais le calcul de crypto-monnaie style bitcoin ou autre ? Je ne vois pas de raison de penser le contraire mais je n’ai guère vu d’information allant dans ce sens non plus.
bon je commence par ça mais j’aurais surement d’autres question un peu tordu ;)
et un grand merci a vous 2 pour se joli tuto si bien fait, merci et au plaisir.
Hello Tristan,
Ça fait un bail que je n’ai pas joué avec un cluster donc je ne suis pas sûr de pouvoir te répondre, en particulier à ta première question.
Par contre, peut être que Breutsen oui, je lui envoie un mail pour l’avertir de ton commentaire, il finira sûrement par (re)passer par ici ;)
Pour la seconde question, oui il est tout à fait possible de réaliser tes calculs de cryptomonnaie et cela sans problème.
Il existe d’ailleurs des fermes de serveurs dédiées à cette tâche unique :D
En tout cas, merci pour tes retours positifs concernant cet article, ça fait plaisir à lire !
Bon courage pour tes prochaines bidouilles ^^
Bonjour Tristan,
Alors en effet, Joel a bien répondu à ta seconde question. Saches qu’il existe de nombreuses méthodes parallèles dédiées à la cryptographie. Je ne rentrerai pas dans ces détails, étant moi-même un novice dans ce domaine.
Par contre, pour répondre à ta première question, oui c’est possible. C’est même obligatoire aujourd’hui, puisque certains calculateurs atteigne les centaines de millier d’unités de calculs et aucun switch ne peut en supporter autant ! Ce qui se fait le plus aujourd’hui c’est la structure dite « Fat Tree » (https://en.wikipedia.org/wiki/Fat_tree cette page est assez bien je dois l’avouer) où chaque switch cascade sur d’autre avec autant de connexion dédié que de switch « en dessous ». Un alternative low-cost (c’est à dire un tree non-fat, bien moins cher), c’est comme tu le proposes de cascader les switchs entre eux avec un seul câble. L’inconvénient dans ce cas là est que la communication point à point est ralentie par la latence de chaque switch qu’on traverse.
Dans tous les cas, la répartition des IP/points de montages doit se configurer dans le frontal lui même. Je crois me rappeler que parallelKnoppix a une bonne détection du matériel à ce niveau la, sinon ça se configure à peu de chose près comme un réseau local.
Voilà j’espère avoir répondu à ta question, n’hésites pas si tu en a d’autres !
Le mieux reste encore de « mettre les mains dans le bouzin », c’est ce qu’il y a de plus formateur !
Bon courage,
parallèlement
merci pour ce tuto,
mais j’ai un ptit problem..
j’essais de changer le mode en ide, pour le live cd
mais je n’arrive pas à accéder au setup du bios avec un acer aspire e11,
F2 pour le boot, F12 pour le boot manager, suppr rien et impossible d’accéder au setup du bios, j’ai l’impression que je dois réinstaller une version de windows, je c pas si c utile (je suis sur linux)
si vous avez des infos…
Hello,
Désolé pour ma réponse tardive …
Pour connaître le raccourci clavier qui permet d’accéder au bios, je pense qu’une recherche sur la Toile devrait t’aider plus rapidement que moi :)
Par contre, je confirme, inutile de réinstaller un Windows pour accéder au BIOS, il n’y a pas de lien entre le BIOS et l’OS installé sur la machine.
Pour le coup du démarrage en 32 ou 64 bits, là tout de suite, aucune idée, ça fait bien longtemps que je n’ai pas joué avec ParallelKnoppix ^^
@+
hi,
J’ai un soucis : le BOOT LIVE CD Pelicanhpc ne ce fait pas sur les pc 32 bit
sur un 64 bit c’est passé, ça doit être l’iso 32bits..
Dois je l’installer sur toutes les machines du cluster pour les connecter?
Pourquoi ça boot pas en 32bits sur des pc32 bits?
merci