Comment construire un cluster?


63

Au cours des dernières années, quelques articles ont circulé en ligne sur la construction d’un groupe d’ordinateurs à la maison, par exemple ici .

Le Pi me semble être une bonne plate-forme pour construire / tester ce genre de chose en raison de son faible coût; les guides "génériques" comme ce transfert sur le Pi devraient-ils être assez faciles, ou y a-t-il quelque chose que je devrais savoir en particulier lorsque je tente un tel projet?



J'ai ajouté la balise "ronce" car c'est ainsi qu'ils s'appellent. Vous ne pouvez pas donner une réponse appropriée au-delà de "mettre un paquet ensemble et exécuter un hadoop ou quelque chose comme ça" - en effet, j'ai préféré la question pour regarder les réponses moi-même!
winwaed

Les autres utilisateurs de Pi ne connaissent pas non plus le mot magique "ronce"; La recherche sur le forum de la Fondation aurait peut-être été utile, mais la réponse est souvent lente, je ne vous voterai donc pas.
mlp

4
L’Université de SouthHampton a mis au point des mesures pour créer un cluster de 64 pi (ou «superordinateur»): southampton.ac.uk/~sjc/raspberrypi/…
Alex L

Réponses:


35

Je suggère de regarder Dispy - le module de calcul distribué python.

Pour exécuter un programme sur un certain nombre de Raspberry Pi (nœuds) à partir d'un PC (serveur - en supposant que l'IP est 192.168.0.100):

  • Installer un système d'exploitation sur chaque RasPi

  • Connectez chaque RasPi à votre réseau. Recherchez l'adresse IP (si dynamique) ou configurez des adresses IP statiques.
    (Supposons que vous avez trois nœuds et que leurs adresses IP sont 192.168.0.50-52)

  • Configurez Python (si ce n'est déjà fait), installez-le dispy, puis exécutez-le dispynode.py -i 192.168.0.100sur chaque RasPi. Cela indiquera à dispynode de recevoir les informations de travail du serveur.

  • Sur le PC (le serveur), installez dispy, puis exécutez le code python suivant:

#!/usr/bin/env python
import dispy
cluster = dispy.JobCluster('/some/program', nodes=['192.168.0.50', '192.168.0.51', '192.168.0.52'])

Vous pouvez également remplacer /some/programpar une fonction python - par exemple compute.

Vous pouvez également inclure des dépendances telles que des objets python, des modules et des fichiers (qui dispyseront transférés vers chaque nœud) en ajoutantdepends=[ClassA, moduleB, 'file1']


8
Je serais ravi de savoir si quelqu'un l'a fait. Merci de laisser un commentaire pour me dire si cela fonctionne!
Alex L

Dans mon cas (openelec + python 2.7), j'obtiens cette erreur "Fichier" ./Lib/multiprocessing/__init__.py ", ligne 84, dans <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: symbole non défini: SemLockType ".
Guido

Mais dispy3-3.6 fonctionne avec wheezy + python3! 2013-03-13 23: 01: 30,664 - dispynode - servant 1 CPU à 192.168.1.34:51348. Lorsque vous lancez une tâche (c'est-à-dire / bin / ls), le nœud la reçoit, déplace l'exécutable vers / tmp, mais quelque chose ne va pas "L'exécution de ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] a échoué avec (<class 'OSError '>, OSError (8,' Erreur de format Exec '), <objet traceback à 0x16f2580>) "
Guido

10

Vous devez être conscient du travail qui a déjà été fait - il existe même un nom pour un cluster de RasPi Boxen. Le Wiki Linux Embarqué dit qu'un Bramble est défini comme "un cluster Beowulf de périphériques Raspberry Pi". Raspberry Pi Homebrew a un certain nombre de messages sur Brambles , et voir aussi la Fondation propre forum.


14
Je ne pense pas que dire à quelqu'un de google que la réponse soit bonne pour ce site. Il est utile de connaître le nom, mais pensez à ajouter du contenu et des liens de référence à votre réponse.
Joe

Contenu et liens ajoutés, @Joe. Il serait bien que les
électeurs votants

1
Je le ferais si je vous abaissais ...
Joe

Je l'ai très soigneusement formulé pour éviter d'insinuer que vous en aviez, Joe. Peut-être ne réalisent-ils pas que les votes peuvent être annulés en cliquant à nouveau sur le même bouton, et non en inversant en cliquant sur le bouton opposé.
mlp


6

C'est tout à fait possible, mais le plus gros problème est la possibilité d'atteindre le but recherché. C’est une idée qui, à mon avis, ne serait pas seulement réalisable, mais utile, tout comme l’idée du calcul parallèle portable. En ce qui concerne les spécificités, les langages de codage tels que FORTRAN et C ++ feront de leur mieux.

Consultez beowulf.org pour plus d'informations sur l'informatique en cluster


1

Ceci est la réponse au message de Guido Garcia ci-dessus concernant "dispy" - je ne vois pas comment répondre à son message.

Lorsqu'un programme ('/ bin / ls') est distribué avec 'dispy' pour une exécution en parallèle, ce programme sur la machine client est transféré vers chacun des nœuds (vers '/ tmp'). Ceci afin que le programme développé par l'utilisateur sur la machine cliente soit transféré sans NFS ou un répertoire partagé. Cela fonctionne avec les programmes binaires uniquement lorsque les nœuds et les architectures client sont compatibles. Dans votre cas, je devine que l'architecture du client est différente de celle des nœuds distants et qu'un nœud ne peut pas exécuter le binaire '/ bin / ls' transféré du client. Si vous souhaitez exécuter / bin / ls sur chaque nœud, il peut être plus facile d'écrire une fonction ou un programme Python pour imprimer le répertoire (par exemple, en utilisant os.listdir) et le distribuer à la place de l'exécutable binaire.


Vous avez besoin de 50 points de réputation pour laisser des commentaires sur les réponses / questions d'autres peuples. Bienvenue quand même!
Impulss

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.