Malinka, ce qui peut être construit sur un cluster. Création d'un système de déploiement d'applications à l'aide de Docker

21.07.2023

Introduction

Les coûts fondamentaux en informatique sont la puissance de l’ordinateur et la consommation d’énergie. Les supercalculateurs modernes occupent énormément de place et consomment des centaines de milliers de watts.

Un gros problème dans ce cas est le processus d'apprentissage de la programmation parallèle et d'exécution de calculs sur des superordinateurs, et plus encore, comment contrôler ce type d'ordinateur, car les étudiants, en règle générale, n'y ont pas d'accès direct.

Dans ce travail, il est proposé d'utiliser des micro-ordinateurs monocarte récemment apparus sur le marché informatique (Paspberry Pi et analogues) pour résoudre ce problème. Sur cette base, vous pouvez assembler un cluster informatique peu coûteux et enseigner aux étudiants les bases de la programmation parallèle. Ainsi, l'objectif de ce travail est de créer un cluster éducatif peu coûteux de micro-ordinateurs pour le développement et la mise en œuvre d'algorithmes de programmation parallèle dans le processus éducatif. Un exemple de calcul parallèle dans le cluster de formation développé est démontré.

Raspberry Pi est un micro-ordinateur développé par la Fondation Raspberry Pi. Petit, de la taille d'une carte bancaire, c'est un ordinateur monocarte à part entière (Système- sur- un- Ébrécher). Processeur (modèle PI 3) : 4 cœurs ARM Cortex-A53 x64. Le système d'exploitation par défaut est Raspberian (basé sur le noyau Linux). Au prix de seulement 35 $, la carte possède toutes les interfaces nécessaires ( Wi- Fi, Bluetooth, USB, Ethernet), ainsi qu'un large éventail de programmes prêts à l'emploi pour tout type d'activité. C'est pourquoi ces micro-ordinateurs ont été choisis pour un petit cluster informatique pédagogique.

Le concept de cluster et de cluster computing

Il est bien connu qu’un cluster est un groupe d’ordinateurs unis par des canaux de communication à haut débit, représentant une seule ressource matérielle du point de vue de l’utilisateur. D’un autre côté, un cluster est un ensemble faiblement couplé de plusieurs systèmes informatiques travaillant ensemble pour exécuter des applications logicielles communes. Afin de connecter plusieurs Raspberry PI dans un cluster, un système informatique de cluster typique (routeur, câbles Ethernet, USB, etc.) basé sur le processeur PI 3 a été assemblé (Fig. 1).

Figure 1. Système informatique en cluster basé sur un processeur de deux PI. 3

Démonstration de calcul parallèle

Pour démontrer clairement les capacités d'un cluster de deux PI 3, l'environnement de programmation Python 2 et la mise en œuvre de l'algorithme de tri des tableaux utilisant la méthode de fusion ont été choisis. Les ordinateurs étaient connectés par un réseau local. Pour simplifier la création d'un cluster de plusieurs R PI, il existe de nombreux programmes prêts à l'emploi, dont l'un s'appelle « mpi4py ».

Le code pour trier par fusion un tableau en Python ressemble à ceci :

def merge(gauche, droite) : #fusionne 2 listes triées ensemble

#Parcourt les deux listes

alors que je< len(left)and j < len(right):

#Ajoute un élément plus petit des listes à la liste finale

si je reste[i]<= right[j]:

result.append(gauche[i])

résultat.append (droite [j])

résultat += gauche

résultat += correct

def tri par fusion (lst) :

#s'il n'y a qu'un seul élément, pas besoin de trier

si len(lst)< 2:

#découpe la liste en 2 moitiés

milieu = len(lst)/ 2

# divise et trie de manière récursive chaque moitié

gauche = tri par fusion (lst[:milieu])

à droite = tri par fusion (lst)

#fusionne les deux listes triées ensemble

retourner la fusion (gauche, droite)

L'algorithme de fonctionnement du programme comprend la séquence d'actions suivante :

1. Un tableau aléatoire de nombres est généré sur PI 3 (serveur).

2. Ce tableau est divisé en n parties, selon le nombre de processeurs du réseau local.

3. À l'aide du module socket et du réseau local, Pi3 (serveur) transfère une partie du tableau vers Pi3 (client).

4. Pi3 (serveur) trie sa partie du tableau et attend que Pi3 (client) réponde.

5. Pi3 (client) trie sa partie du tableau et la transmet à Pi3 (serveur).

6. Pi3 (serveur) reçoit la partie triée du tableau et effectue le tri final.

Les calculs ont montré qu'il fallait environ 23 secondes à un Pi3 pour trier un tableau de 500 000 éléments. Après avoir ajouté un deuxième Pi3, ce temps a été réduit à 16 secondes. L'augmentation de la vitesse n'est pas linéaire, mais plus il y a d'ordinateurs dans le cluster, moins de temps y est consacré.

Conclusion

Les ordinateurs monocarte n'ont dépassé que récemment le segment de l'automatisation de la fabrication et ont commencé à conquérir le marché de masse. Leur petite taille, leur faible consommation d'énergie et leurs capacités de calcul assez élevées peuvent en faire la base de la mise en œuvre de divers projets, par exemple l'enseignement de la programmation parallèle. La particularité du système informatique en cluster basé sur Raspberry PI 3 est une bonne évolutivité, déterminée par les capacités de l'équipement de commutation, son faible coût et la possibilité d'utiliser des logiciels librement distribués, ce qui est important lorsqu'il est mis en œuvre dans le processus éducatif. Les travaux de démonstration réalisés montrent qu'un cluster, même composé de deux PI 3, est capable d'accélérer le calcul d'une tâche simple mais en même temps volumineuse, comme le tri d'un large éventail de données.

A l'avenir, il est prévu d'augmenter le nombre de micro-ordinateurs dans le système informatique et de comparer les performances des algorithmes cryptographiques, notamment ceux prévus pour être utilisés pour le cryptage/déchiffrement de grands volumes d'images (photos, aériennes, cosmiques) et les transmettre sur Internet.

Liste littérature:

  1. Robert Mullins/ Calcul distribué //Université de Cambridge. – 2012. – http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/distributed-computing / .
  2. Grappe. - Mode d'accès. – URL : https://ru.wikipedia.org/wiki/Cluster (date d'accès 25/02/2017).
  3. Lukin V.V., Marchevsky I.K. Pôle informatique pédagogique et expérimental. Partie 1. Outils et capacités. - Mode d'accès. – URL : https://elibrary.ru/download/elibrary_17091004_33209664.pdf (date de consultation le 25/02/2017).

Une utilisation populaire des ordinateurs Raspberry Pi consiste à créer des clusters. Les Raspberry Pies sont petits et peu coûteux, il est donc plus facile de les utiliser pour créer un cluster qu'avec des PC. Un cluster de Raspberry Pies devrait être assez grand pour rivaliser avec un seul PC ; vous auriez probablement besoin d'environ 20 Des tartes pour produire un cluster avec autant de puissance de calcul qu’un PC. Même si un cluster Pi n'est peut-être pas si puissant, c'est une excellente occasion d'en apprendre davantage sur l'informatique distribuée.

Il existe plusieurs types d’ordinateurs distribués qui peuvent être utilisés à des fins différentes. Il existe des superordinateurs utilisés pour résoudre des problèmes mathématiques tels que la modélisation des conditions météorologiques ou la simulation de réactions chimiques. Ces systèmes utilisent souvent l'interface de transmission de messages (MPI). Une équipe de l’Université de Southampton a construit un super ordinateur basé sur MPI à 64 nœuds. Ce système est utilisé pour enseigner aux étudiants le calcul intensif.

Une autre technologie souvent utilisée dans l'informatique distribuée est Hadoop, qui distribue les données sur de nombreux nœuds. Hadoop est souvent utilisé pour le traitement de grands ensembles de données et l'exploration de données. Un ingénieur de Nvidia a construit un petit cluster Hadoop à l'aide de Raspberry Pies. Il utilise son cluster pour expérimentez et testez les idées avant de les déployer sur des systèmes plus puissants.

Utiliser un cluster Raspberry Pi comme serveur Web

Les clusters peuvent être utilisés comme serveurs Web. De nombreux sites Web génèrent trop de trafic pour fonctionner sur un seul serveur, ce qui nécessite d'utiliser plusieurs serveurs. Les requêtes des navigateurs Web sont reçues par un nœud appelé équilibreur de charge, qui transmet les requêtes aux serveurs de travail. L'équilibreur de charge transmet ensuite les réponses des serveurs aux clients.

Ce site est désormais hébergé sur un cluster Raspberry Pi. Les nœuds de travail sont des serveurs Web standard contenant un contenu identique. Je viens d'installer Apache dessus et de copier mon site sur chaque nœud.

J'utilise un Raspberry Pi supplémentaire pour héberger une copie de développement de ce site et pour contrôler le cluster. Ce Pi est connecté à mon réseau local via wifi, je peux donc accéder à la copie de développement de mon site depuis mon ordinateur portable.

Le Pi supplémentaire dispose également d’une connexion Ethernet au cluster Pi. Lorsque je souhaite mettre à jour mon site, je peux transférer les modifications du site de développement vers le site en ligne sur le cluster. Les mises à jour du site sont placées dans des fichiers .tar.gz que les nœuds de travail téléchargent automatiquement depuis le site de développement. Une fois téléchargées, les mises à jour sont ensuite décompressées dans le système de fichiers local.

Configuration des serveurs Raspberry Pi

Toutes les tartes de ce système sont sans tête. Je peux me connecter au Pi avec le site de développement en utilisant le protocole de bureau à distance, et à partir de ce Pi, je peux me connecter au Worker Pies en utilisant SSH.

Tous les Pies du cluster utilisent une adresse IP statique. Dans un cluster plus grand, il serait probablement préférable de configurer un serveur DHCP sur l'équilibreur de charge. Les adresses IP utilisées dans le cluster se trouvent sur le sous-réseau 192.168.1.xxx.

Pour chaque travailleur Pi, j'ai configuré une carte SD de 4 Go en utilisant la dernière version de Raspbian. Dans raspi-config, j'ai défini les options suivantes :

  • développer fs
  • définir le nom d'hôte
  • définir le mot de passe
  • définir la répartition de la mémoire à 16 Mo pour le GPU
  • overclocker le CPU à 800 MHz
  • activer ssh

Sur chaque carte j'ai installé Apache et quelques librairies nécessaires à mon CMS, libxml2 et python-libxml2. J'ai utilisé cette commande pour activer la réécriture du mod, qui est également requise par mon CMS :

$ sudo a2enmod réécriture

Enfin, j'ai copié quelques scripts sur chaque carte SD qui permettent à chaque Pi de synchroniser son contenu avec le Pi de développement. Dans un cluster plus grand, cela vaudrait la peine de créer une image de carte SD avec toutes ces modifications effectuées à l'avance.

Construire un équilibreur de charge

L'équilibreur de charge doit disposer de deux interfaces réseau, une pour recevoir les requêtes d'un routeur et une autre interface réseau pour transmettre les requêtes au cluster de serveurs. Les nœuds du cluster se trouvent sur un sous-réseau différent de celui du reste du réseau. L'adresse IP de la deuxième interface de l'équilibreur de charge doit donc se trouver sur le même sous-réseau que le reste du cluster. La première interface de l'équilibreur de charge a l'adresse IP 192.168.0.3 tandis que l'adresse IP de la deuxième interface est 192.168.1.1. Tous les Pies du cluster ont des adresses IP sur le sous-réseau 192.168.1.xxx.

J'ai construit mon équilibreur de charge en utilisant un ancien PC avec 512 Mo de RAM et un processeur x86 à 2,7 GHz. J'ai ajouté une deuxième carte Ethernet PCI et installé Lubuntu, une version allégée d'Ubuntu. J'allais installer Ubuntu, mais ce PC est assez vieux, donc Lubuntu est probablement un meilleur choix. J'ai utilisé un PC parce que je n'étais pas sûr qu'un seul Pi serait assez puissant pour agir comme un équilibreur de charge, et un Pi n'a qu'une seule connexion Ethernet. Je souhaite que les deux connexions réseau de mon équilibreur de charge soient Ethernet pour une amélioration. performances et stabilité.

Notez que le transfert IP n'est pas activé. L'équilibreur de charge n'est pas un routeur, il ne doit transmettre que les requêtes HTTP et non tous les paquets IP qu'il reçoit.

Configuration du logiciel d'équilibrage de charge

Il existe de nombreuses implémentations logicielles différentes d’équilibrage de charge. J'ai utilisé le module d'équilibrage de charge d'Apache car il est facile à configurer. Je me suis d'abord assuré que le système d'exploitation de mon PC était à jour :

sudo apt-get mise à jour
sudo apt-get mise à niveau

Ensuite j'ai installé Apache :

sudo apt-get install apache2

Ces modules Apache doivent être activés :

proxy sudo a2enmod
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer

L'étape suivante consiste à modifier /etc/apache2/sites-available/default afin de configurer l'équilibreur de charge. Le module proxy est nécessaire pour le transfert HTTP, mais il est préférable de ne pas permettre à votre serveur de se comporter comme un proxy. Les spammeurs et les pirates utilisent souvent les serveurs proxy d'autres personnes pour masquer leur adresse IP, il est donc important de le désactiver. fonctionnalité en ajoutant cette ligne :

ProxyDemandes désactivées

Bien que les demandes de proxy soient désactivées, le module proxy est toujours activé et agit comme un proxy inverse. Ensuite, définissez le cluster et ses membres en ajoutant ce code :

Interface du gestionnaire d'équilibreur

Le module équilibreur dispose d'une interface web qui permet de surveiller l'état des serveurs back-end et de configurer leurs paramètres. Vous pouvez activer l'interface Web en ajoutant ce code à /etc/apache2/sites-available/default :

Il est également nécessaire de demander à Apache de gérer localement les requêtes vers la page /balancer-manager au lieu de transmettre ces requêtes à un serveur de travail. Toutes les autres requêtes sont transmises au cluster défini ci-dessus.

ProxyPass /balancer-manager ! ProxyPass/équilibreur://rpicluster/

Une fois ces modifications enregistrées, Apache doit être redémarré avec cette commande :

$ sudo /etc/init.d/apache2 restart

lorsque j'ouvre un navigateur et que je vais sur http://192.168.0.3, je vois la première page de mon site Web. Si je vais sur http://192.168.0.3/balancer-manager, je vois cette page dans l'image de droite.

La dernière étape pour mettre le cluster en ligne consiste à ajuster les paramètres de redirection de port de mon routeur. J'avais juste besoin de configurer une règle pour transférer les paquets HTTP vers http://192.168.0.3.

Voici le fichier /etc/apache2/sites-available/default complet pour l'équilibreur de charge :

ServerAdmin webmaster@localhost DocumentRoot /var/www Options FollowSymLinks AllowOverride All Options Index FollowSymLinks MultiViews AllowOverride All Commande autoriser, refuser l'autorisation de tous ScriptAlias ​​​​/cgi-bin/ /usr/lib/cgi-bin/ AllowOverride Aucun Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .py Ordre autoriser, refuser Autoriser de tous Demandes de proxy désactivées BalancerMember http://192.168.1.2:80 BalancerMember http://192.168.1.3:80 BalancerMember http://192.168.1.4:80 BalancerMember http://192.168.1.5:80 AllowOverride None Ordre autoriser, refuser l'autorisation de tous les ProxySet lbmethod=byrequests SetHandler balancer-manager Commande autorisée, refus d'autorisation à partir de 192.168.0 ProxyPass /balancer-manager ! ProxyPass / balancer://rpicluster/ ErrorLog $(APACHE_LOG_DIR)/error.log # Les valeurs possibles incluent : debug, info, notice, warn, error, crit, # alert, emerg. LogLevel avertit CustomLog $(APACHE_LOG_DIR)/access.log combiné

Le module BitScope Cluster contient 150 mini-ordinateurs Raspberry Pi avec commutateurs réseau intégrés. Photo : BitScope

Les programmeurs et les scientifiques n’ont pas toujours facilement accès à un véritable supercalculateur performant pour tester leurs programmes. De plus, les supercalculateurs sont généralement déjà occupés 24 heures sur 24 avec d’autres logiciels. Il est difficile de trouver la fenêtre. Vous devez rédiger une candidature à l'avance et faire la queue. Comment le nouveau programme fonctionnera-t-il dans un environnement multiprocesseur réel, dans quelle mesure la tâche est-elle parallélisée ?

Pour aider les développeurs, mandatée par la Division de calcul haute performance du Laboratoire national de Los Alamos, la société australienne BitScope a développé des modules informatiques « de test » BitScope Cluster de 150 mini-ordinateurs Raspberry Pi pouvant être combinés en un cluster et testé leurs programmes sur eux.

Le Laboratoire national de Los Alamos exploite l'un des dix supercalculateurs les plus puissants au monde : Trinity.



Supercalculateur Trinity au Laboratoire national de Los Alamos

La direction du laboratoire a cherché un moyen de permettre aux développeurs d'accéder à un calcul parallèle hautes performances sans avoir réellement accès au supercalculateur lui-même, afin qu'ils puissent tester leurs programmes.

« Les modules Raspberry Pi permettent aux développeurs de comprendre comment écrire de tels logiciels et de les faire fonctionner de manière fiable, sans avoir besoin d'un banc de test de la même taille qui coûte un quart de milliard de dollars et consomme 25 mégawatts d'électricité », explique Gary Glider de Laboratoire national d'Alamosa.

En fait, 25 mégawatts d'électricité pour tester votre programme, c'est trop (les coûts énergétiques du refroidissement, qui sont plusieurs fois supérieurs à la consommation énergétique du système informatique lui-même, ne sont pas pris en compte ici).



Installation d'un système de refroidissement par eau pour le supercalculateur Trinity, qui utilise efficacement le système de récupération des eaux usées sanitaires

Chaque module dispose de 144 nœuds actifs, six nœuds de rechange et un nœud de contrôle. Le module est au format 6U lorsqu'il est installé dans un rack de serveur de centre de données. Comme indiqué sur le site officiel, un cluster de 1 000 nœuds occupant un rack 42U coûtera environ 120 à 150 $ par nœud. Il s'agit d'une majoration assez importante par rapport au prix standard du Raspberry Pi, connu pour être de 35 $.

Chaque module BitScope Cluster se compose de blocs de construction appelés « Cluster Packs ». L'installation d'une unité dans des racks se fait précisément sous la forme de ces « packages ».



Pack de clusters

Un nœud (mini-ordinateur Raspberry Pi 3) contient un processeur ARMv8 quadricœur 64 bits à 1,2 MHz. Ainsi, si l'on imagine un cluster, par exemple, de cinq modules, il y aura alors 720 nœuds actifs, soit 2880 cœurs de processeur actifs. C'est largement suffisant pour tester la qualité du parallélisme du programme.



Voici à quoi ressemble de près une rangée de mini-ordinateurs du Cluster Pack.

Bien qu'une telle solution soit effectivement beaucoup moins chère qu'un supercalculateur, elle ne peut toujours pas être qualifiée de budgétaire. Seule une grande organisation de recherche peut se permettre un mini-cluster pour 100 000 ou 150 000 dollars uniquement pour des programmes de test. En fait, de tels modules sont probablement conçus pour ces riches organismes de recherche, propriétaires de supercalculateurs. Cependant, les créateurs du mini-supercalculateur affirment qu'il s'agit de « la solution la plus rentable et la plus évolutive au monde : peu coûteuse à construire, à exploiter et à entretenir ».

Les modules BitScope Cluster permettent également des économies significatives en matière de consommation d'énergie. Vous pouvez calculer vous-même la consommation électrique de chacun d'eux, en comptant 5 W par nœud. Si nous supposons que les nœuds de rechange ont une consommation d'énergie minimale, alors les modules restent avec 144 nœuds actifs et un nœud de contrôle. Total 145×5=725 W.

BitScope a l'intention de commercialiser ces modules gratuitement au début de 2018.

Selon l'entreprise, outre le développement de logiciels, ces clusters peuvent être utiles comme simulateurs de réseaux de capteurs, dans la recherche sur les réseaux hautes performances et l'Internet des objets.

Un cluster Raspberry Pi à 4 nœuds. La carte supérieure est un modèle B original, tandis que les trois cartes ci-dessous sont de toutes nouvelles cartes Raspberry Pi 2.

Mis à jour: Ce projet a été initialement publié le 26 août 2015 et a ensuite été mis à jour le 5 septembre 2015 avec des instructions supplémentaires sur la façon d'ajouter un deuxième adaptateur Ethernet au nœud principal et de le faire servir de serveur DHCP pour les autres nœuds du cluster. .

Au cours du week-end, je me suis assis et j'ai construit un petit cluster Raspberry Pi composé de 4 nœuds. J'ai utilisé trois cartes pour les nœuds de calcul et une pour le nœud principal. Je voulais que le cluster - plus communément appelé « ronce » - soit aussi compact que possible, avec seulement deux câbles sortant, un pour l'alimentation et l'autre pour le réseau. J'ai utilisé un hub USB pour alimenter les cartes et un petit commutateur Ethernet que je pouvais pirater pour qu'il soit également alimenté depuis le hub USB plutôt que depuis une verrue murale séparée.

Ce n'est pas le plus gros cluster construit à partir de cartes Raspberry Pi, autant que je sache, le cluster 120 Pi construit par les gens de Resin.io est toujours le plus gros construit, même si comme il s'agit en fait de 5 clusters indépendants de 24 nœuds, il est possible qu'il prenne encore le dessus. titre.

Cependant, même avec seulement 4 nœuds, mon cluster de poche est suffisamment grand pour ce que je veux, c'est-à-dire comme banc d'essai pour certains travaux d'informatique distribuée que j'effectue. Le petit cluster posé sur mon bureau me permet de tester le code avant de déployer des tâches sur le cluster beaucoup plus étendu et coûteux que j'utilise pour le travail fastidieux sur le projet.

L'enceinte 4 planches "dogbone"

Le boîtier sur lequel j'ai finalement opté était un boîtier « os de chien » empilable à quatre cartes que j'ai acheté sur Amazon, bien que si vous êtes prêt à attendre un peu, il existe de nombreux boîtiers similaires sur AliExpress qui peuvent être achetés pour beaucoup moins cher. Il a été expédié du jour au lendemain et je l'ai eu le lendemain ; c'était la seule chose que j'ai achetée pour construire le cluster car j'avais tout le reste sur l'étagère.

Le hub USB 5 ports

Le hub USB que j’ai utilisé est ce qui m’a inspiré à faire la construction en premier lieu : il s’agit d’un hub à 5 ports d’Anker et, par coïncidence, il a à peu près la même empreinte que le Raspberry Pi lui-même. Avec cinq ports, il y a un port pour chacune de mes quatre cartes Raspberry Pi et un dernier port restant pour alimenter un commutateur Ethernet pour le cluster.

L'alimentation 5V et un câble USB de rechange

La première étape consiste à couper soigneusement l'extrémité du câble d'alimentation 5 V, en veillant à étiqueter lequel des deux fils correspondait aux deux fils laissés attachés au bloc d'alimentation. En dénudant les extrémités des fils, vous pouvez brancher la brique dans le mur et utiliser un voltmètre pour mesurer lequel des deux fils est +5V et lequel est GND.

Le câble d'alimentation 5V (en haut) et l'extrémité du câble USB (en bas)

Coupez ensuite l'extrémité du câble USB et, avec précaution, comme les fils à l'intérieur du câble sont petits et délicats, retirez le couvercle pour révéler les fils. Vous cherchez les fils rouge et noir, les autres transportent des données. Vous pouvez simplement les couper, vous n’en aurez pas besoin.

Le câblage interne d'un câble USB

Souder les deux extrémités des câbles ensemble - en joignant le +5V au +5V et le GND au GND - puis en recouvrant chaque fil individuel, ainsi que la jonction elle-même, avec un film rétractable me donne le câble Frankenstein dont j'ai besoin pour alimenter. le switch Ethernet du dernier port disponible de mon hub USB.

Le câble Frankenstein

Après avoir parcouru ma pile de câbles de rechange pour trouver les câbles USB et Ethernet les plus courts possibles, coller le cluster ensemble à ce stade se résumait à des attaches de câble et du velcro.

Le cluster Raspberry Pi terminé

% sudo apt-get install autofs

puis éditez le fichier /etc/auto.master en ajoutant

/mnt/nfs /etc/auto.nfs

à la fin. Créez ensuite le fichier /etc/auto.nfs en ajoutant,

Rpi0 rpi0:/mnt/usb

et redémarrez le service autofs,

% sudo /etc/init.d/autofs restart.

si tout se passe bien à ce stade, si vous accédez au répertoire /mnt/nfs/rpi0/ et que le disque connecté au nœud principal devrait automatiquement se monter. Tu peux vérifier

% df-h Système de fichiers 1 000 blocsutilisés disponibles utilisation % montés surrootfs14984668 25132281181235618% //dev/root 14984668 25132281181235618% /devtmpfs470416 0470416 0% /dev tmpfs94944 232 94712 1% /exécuter tmpfs 5120 05120 0% /exécuter/verrouiller tmpfs 189880 0189880 0% /run/shm/dev/mmcblk0p1 57288 19448 3784034% /bootrpi0:/mnt/usb 604670086460466944 1% /mnt/nfs/rpi0

pour voir s'il a été monté automatiquement.

Lumières clignotantes

A côté de la clé USB (puisque j'en avais une qui traînait) j'ai installé un Blinkstick. Une seule LED RVB contrôlée par logiciel, la clé est en fait plutôt pratique pour l'éclairage d'état du serveur. Il est difficile d'ignorer une lumière clignotante. Après avoir inséré la clé dans le dernier port USB restant du nœud principal, vous pouvez configurer le logiciel en :

% sudo apt-get install -y python-pip python2.7-dev % sudo pip install clignotant % sudo clignotant --add-udev-rule

à partir de là, il est en fait assez facile de manipuler la LED RVB à partir de la ligne de commande.

Ou lorsque vous souhaitez utiliser le Blinkstick par programme pour indiquer l'état, vous pouvez utiliser l'API et le langage de programmation de votre choix.

Prochaines étapes

Je voyage beaucoup. Cela signifie que je passe beaucoup de temps loin de mon bureau à domicile. Bien que je puisse laisser le cluster opérationnel et y accéder pendant mon absence, j'aimerais en fait pouvoir l'emporter avec moi sur la route pour assister à des spectacles. Donc, à l’avenir, j’aimerais vraiment pouvoir récupérer le cluster et le déposer sur n’importe quel réseau.

Cela signifie que je vais devoir reconfigurer un peu le réseau.

Au lieu de connecter directement le commutateur Ethernet au réseau externe et de demander à mon routeur domestique d'attribuer des adresses IP à chacun des nœuds, je vais ensuite ajouter un adaptateur Ethernet USB au nœud principal. Cela donnera au nœud principal deux connexions Ethernet.

Le premier se connectera au réseau externe, donnant au nœud principal – et donc au cluster – une adresse IP « externe ». Le second se connectera au switch Ethernet du cluster. Nous pouvons ensuite configurer le nœud principal en tant que serveur DHCP pour trois autres nœuds « internes » connectés au commutateur, créant ainsi un deuxième réseau visible uniquement par le cluster.

Dans cette configuration, je pourrai toujours me connecter au nœud principal, mais je ne pourrai atteindre les trois nœuds de calcul qu'à partir du nœud principal. Il y a cependant un problème : comment connaître l'adresse IP externe du nœud principal ?

Ajout d'un écran LCD

Le Blinkstick est idéal pour la messagerie simple, vous pouvez en fait faire beaucoup de choses avec une LED RVB pour vous faire savoir ce qui ne va pas. Mais il est en fait assez simple d’ajouter un simple écran LCD au nœud principal.

Après avoir connecté le panneau, vous devrez installer les outils I2C et les bibliothèques Python associées

% sudo apt-get install python-smbus % sudo apt-get install i2c-tools

et pour activer I2C sur le nœud principal en ajoutant ce qui suit au bas du fichier /boot/config :

device_tree= dtparam=spi=on dtparam=i2c1=on dtoverlay=w1-gpio-pullup,gpiopin=3,pullup=3dtoverlay=w1-gpio-pullup,gpiopin=5,pullup=5

et en ajoutant les modules suivants au fichier /etc/modules,

I2c_dev i2c_bcm2708

Après avoir redémarré le nœud principal, vous devriez pouvoir voir le panneau avec un ID I2C de 27,

% sudo i2cdetect -y 1 0123456789abcdef 00:-- -- -- -- -- -- -- -- -- -- -- -- -- 10 : -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30 : -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --

Vous pouvez voir que eth0 a l'adresse IP interne statique que nous lui avons attribuée, tandis que eth1 a une nouvelle adresse IP attribuée par notre routeur domestique. Si tout se passe comme prévu, vous devriez pouvoir vous connecter au nœud principal en utilisant sa nouvelle adresse IP externe et voir quelque chose comme ceci :

% siconfig eth0Link encap: EthernetHWaddr b8:27:eb:22:60:fbadresse inet : 192.168.50.1Bcast :192.168.50.255Masque :255.255.255.0Paquets RX : 2470 erreurs : 0 abandonnés : 0 dépassements : 0 trame : 0Paquets TX : 2267 erreurs : 0 abandonnés : 0 dépassements : 0 transporteur : 0 collisions : 0 txqueuelen : 1000 Octets RX : 215 730 (210,6 Ko) octets TX : 237032 (231,4 Kio)eth1Link encap: EthernetHWaddr ac:29:3a:da:74:37adresse inet : 192.168.1.194Bcast : 192.168.1.255Masque : 255.255.255.0UP BROADCAST RUNNING MULTICASTTMTU : 1 500 Métrique : 1Paquets RX : 15 245 erreurs : 0 abandonnés : 1 dépassements : 0 trame : 0Paquets TX :0 erreurs :0 abandonnés :0 dépassements :0 transporteur :0 collisions : 0 txqueuelen : 1000 Octets RX : 1787746 (1,7 Mio) octets TX : 283761 (277,1 Kio) Encapsulation loLink : bouclage local adresse inet : 127.0.0.1Masque : 255.0.0.0UP LOOPBACK RUNNINGMTU: 65536 Métrique: 1Paquets RX : 4 erreurs : 0 abandonnés : 0 dépassements : 0 trame : 0Paquets TX : 4 erreurs : 0 abandonnés : 0 dépassements : 0 transporteur : 0 collisions:0 txqueuelen:0 Octets RX : 260 (260,0 B) Octets TX : 260 (260,0 B)

% route -n Table de routage IP du noyau Destination Gateway Genmask Flags Metric RefUse Iface0.0.0.0 192.168.1.254 0.0.0.0 UG000 eth1192.168.1.0 0.0.0.0 255.255.255.0 U 000 eth1192.168.50.00.0.0.0 255.255.255.0U 000 eth0

Si tout ne se passe pas comme prévu et que vous ne parvenez pas à atteindre le nœud principal via le réseau, il est possible que vous deviez extraire un moniteur HDMI et un clavier USB et les connecter directement au nœud principal - vous pouvez temporairement retirer le disque USB à vous donner et un port USB libre pour le clavier - afin que vous puissiez diagnostiquer et résoudre tout problème de réseau.

cependant, j'espère que vous pourrez atteindre le nœud principal à partir du réseau externe. Vous devriez pouvoir envoyer une requête ping aux hôtes externes sur le réseau 192.168.1.* et aux hôtes internes sur le réseau 192.168.50.*.

Cependant, au moins pour le moment, si nous nous connectons à l’un des nœuds de calcul, alors qu’ils peuvent voir le nœud principal – et les uns les autres – ils ne peuvent pas encore voir le monde extérieur. Nous allons devoir transférer les paquets des réseaux internes vers les réseaux externes avant que cela ne soit possible.

Sur le nœud principal, continuez et,

% sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

puis éditez le fichier /etc/sysctl.conf en décommentant la ligne disant :

Net.ipv4.ip_forward=1

Après avoir activé le transfert, nous devrons configurer iptables ,

% sudo iptables - t nat - A POSTROUTING - o eth1 - j MASQUERADE % sudo iptables - A FORWARD - i eth1 - o eth0 - m state -- state LIÉ, ÉTABLI - j ACCEPTER % sudo iptables - A FORWARD - i eth0 - o eth1 - j ACCEPTER % sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

puis ajoutez en bas du fichier /etc/network/interfaces une ligne pour charger les tables au démarrage,

Up iptables-restauration< /etc/iptables.ipv4.nat

En redémarrant le nœud principal à ce stade, vous devriez maintenant pouvoir vous connecter à n'importe lequel des nœuds de calcul à partir du nœud principal et pouvoir envoyer une requête ping au monde extérieur,

%ssh rpi1 Linux rpi2 3.18.11-v7+ #781 SMP PREEMPT mar. 21 avril 18:07:59 BST 2015 armv7lLes programmes inclus avec le système Debian GNU/Linux sont des logiciels libres ;les modalités exactes de distribution de chaque programme sont décrites dans lefichiers individuels dans /usr/share/doc/*/copyright.Debian GNU/Linux n'offre ABSOLUMENT AUCUNE GARANTIE, dans la mesure où permis par la loi applicable. Dernière connexion : samedi 5 septembre 2015 à 20:49:07 depuis rpi0% ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) octets de données.64 octets de 8.8.8.8 : icmp_req=1 ttl=54 time=23,8 ms64 octets de 8.8.8.8 : icmp_req=2 ttl=54 time=21,4 ms64 octets de 8.8.8.8 : icmp_req=3 ttl=54 time=23,2 ms^C --- 8.8.8.8 Statistiques ping ---3 paquets transmis, 3 reçus, 0% de perte de paquets, temps 2003 mstrt min/moy/max/mdev = 21,470/22,838/23,829/1,014 ms%

C'est ça. Nous avons un cluster fonctionnel.

En conclusion

À ce stade, nous avons un cluster avec deux câbles qui y pénètrent, un pour l'alimentation et l'autre pour le réseau. Vous pouvez vous connecter à n'importe quel réseau et le nœud principal signalera son adresse IP externe sur un panneau LCD, vous permettant de vous y connecter, et à partir de là, vous pourrez vous connecter à - et entre - n'importe lequel des nœuds du cluster sans avoir besoin d'un mot de passe. . Tous les nœuds partagent également un disque.

En d’autres termes, tout fonctionne à peu près à ce stade. En fait, je l'utilise actuellement comme cluster Hadoop de bureau.

À partir de là, nous pourrions faire plusieurs choses, la prochaine étape la plus évidente serait de ajoutez une surveillance SNMP et un tableau de bord externe « d'état » sur le nœud principal pour surveiller l'état du cluster. Cependant, à plus long terme, le port Ethernet libre sur le switch nous permet d'étendre le cluster assez facilement en ajoutant un autre rack de quatre nœuds de calcul sans trop d'effort supplémentaire.

Dans l'article invité d'aujourd'hui, Bruce Tulloch, PDG et directeur général de BitScope Designs, discute des utilisations de l'informatique en cluster avec le Raspberry Pi et du récent pilote du cluster 3000-Pi du Los Alamos National Laboratory construit avec le BitScope Blade.

Le calcul haute performance et le Raspberry Pi ne sont normalement pas entendus de la même manière, mais le laboratoire national de Los Alamos construit un cluster Raspberry Pi avec 3 000 cœurs à titre pilote avant de passer à 40 000 cœurs ou plus l'année prochaine.

C'est incroyable, mais pourquoi ?

Clusters Raspberry Pi traditionnels

Comme la plupart des gens, nous aimons les bons clusters ! Les gens les construisent avec Raspberry Pi depuis le début, car c'est peu coûteux, éducatif et amusant. Ils ont été construits avec les Pi, Pi 2, Pi 3 et même le Pi Zero d'origine, mais aucun de ces clusters ne s'est avéré particulièrement pratique.

Cela ne les empêche pas pour autant d’être utiles ! J'ai vu pas mal de clusters Raspberry Pi lors de la conférence la semaine dernière.

Un tout petit qui a attiré mon attention est celui des gens d'openio.io, qui ont utilisé un petit cluster Raspberry Pi Zero W pour démontrer leur plate-forme de stockage d'objets définie par logiciel évolutive, qui sur les grosses machines est utilisée pour gérer des pétaoctets de données, mais qui est si léger qu'il fonctionne très bien sur ceci :

Il y avait un autre exemple attrayant sur le stand ARM, où la plate-forme de conteneurs de singularité des Berkeley Labs a été démontrée fonctionnant très efficacement sur un petit cluster construit avec des Raspberry Pi 3.

Mon émission préférée était celle du Edinburgh Parallel Computing Centre (EPCC) : Nick Brown a utilisé un groupe de Pi 3 pour expliquer les superordinateurs aux enfants avec une application interactive attrayante. L'idée était que les visiteurs du stand conçoivent une aile d'avion, la simulent à travers le cluster et déterminent si un avion utilisant la nouvelle aile pourrait voler d'Édimbourg à New York avec un réservoir plein de carburant. Le mien a réussi, heureusement !

Clusters Raspberry Pi de nouvelle génération

Nous construisons depuis un certain temps déjà des clusters Raspberry Pi de puissance industrielle à petite échelle avec BitScope Blade.

Lorsque le Laboratoire national de Los Alamos nous a contacté via le fournisseur HPC SICORP pour nous demander de créer un cluster comprenant plusieurs milliers de nœuds, nous avons examiné toutes les options très attentivement. Il devait être dense, fiable, faible consommation et facile à configurer et à construire. Il n’était pas nécessaire de « faire de la science », mais il devait fonctionner de presque toutes les autres manières, comme le ferait un cluster HPC à grande échelle.

Je lirai également vos réflexions et y répondrai dans les commentaires sous cet article.

Note de l'éditeur:

Voici une photo de Bruce portant un jetpack. Cool, non ?!


16 commentaires

    Vous devez commencer à créer un « ensemble de montage » informatique. Enfant, j'ai reçu un kit de montage à l'âge de 7-8 ans pour Noël. J'ai fait tout ce à quoi on pouvait penser. Plus tard, je suis devenu ingénieur en mécanique. J'ai conçu des pièces pour les turbines à gaz GE, et lorsque vous allumez vos lumières, j'ai une connexion directe avec l'alimentation des RPis partout dans le monde.

    Vous disposez actuellement de la plupart des éléments fondamentaux. Vous avez besoin d'un bus, quelque chose comme le bus CM DDR3. Si le RPi 3B ou chaque fois que le RPi 4 sort, avait un adaptateur ou des brochages connectés à ce bus, le clustering serait facile. Je pourrais imaginer quatre CM à quatre processeurs, un processeur graphique/mineur Bitcoin sur un CM, un CM avec SSD, etc. Un ensemble de montage d'ordinateurs…

    • Quel est le problème avec l’utilisation du commutateur et de la structure Ethernet comme « bus » sur le matériel existant ?

    Existe-t-il une courte présentation vidéo disponible qui traite du cluster Los Alamos Pi, de la façon dont il a été construit, à quoi il servira et pourquoi cette solution a été choisie plutôt que d'autres ?

    De plus, étant donné l'intérêt porté à OctoPi et aux autres clusters Pi, pourrait-il y avoir une section consacrée au traitement parallèle dans le forum Raspberry Pi ?

    • C'est une bonne idée. Je pense que le moment est venu.

    La démo gratuite d'Airwing est-elle disponible ?

    • Le cluster EPCC Raspberry Pi s'appelle Wee Archie () et il (comme celui de Los Alamos que nous avons construit) est un « modèle », bien que dans un but quelque peu différent. Dans leur cas, il s’agit d’Archer (http://www.archer.ac.uk/), un superordinateur de classe mondiale situé et géré au Royaume-Uni par le National Supercomputing Service. Nick Brown (https://www.epcc.ed.ac.uk/about/staff/dr-nick-brown) est le gars derrière la démo que j'ai vue au SC17. Écrivez-lui !

    Je suis heureux d'avoir quitté leur département de calcul haute performance maintenant. C'est de la folie. Le code Fortran, si répandu dans les laboratoires, ne fonctionnera pas de la même manière sur l'architecture ARM lorsque les superordinateurs sur lesquels le code doit s'exécuter seront utilisés sur des machines à architecture Intel. Ce projet va donner aux stagiaires un terrain de jeu pour apprendre ce qu'ils auraient dû apprendre au collège.

    • L’un des problèmes persistants liés à l’informatique exascale est qu’il est inefficace de contrôler un calcul exécuté sur autant de cœurs et sur autant de boîtiers. Dans le même temps, la probabilité que tous les nœuds fonctionnent parfaitement pendant la durée du calcul diminue de façon exponentielle à mesure que de nouveaux nœuds sont ajoutés.

      Les systèmes parallèles à mémoire distribuée efficaces et efficaces ont été comparés à l'élevage de poulets. Lorsque l’on envisage des troupeaux si grands qu’il faut des mégawatts pour les nourrir, il peut être préférable de s’entraîner en rassemblant des cafards. Il ne s’agit pas d’optimiser les performances des codes Fortran, mais de savoir comment gérer les défauts matériels dans un calcul parallèle massivement distribué. Comme mentionné dans le communiqué de presse, nous ne savons même pas comment démarrer une machine exascale : au moment où le dernier nœud démarre, plusieurs autres nœuds sont déjà tombés en panne. À mon avis, il est possible de modéliser ces difficultés exascale avec un cluster massif d'ordinateurs Raspberry Pi. Par exemple, vider 1 Go de RAM sur le réseau de 100 Mbits du Pi représente un rapport données/bande passante similaire à celui de vider 1 To de RAM sur une interconnexion de 100 Gbits.

      • Place à Eric. Le problème est celui de l'échelle, du démarrage, de l'exécution des machines, de l'entrée et de la sortie des données et du point de contrôle pour éviter de perdre d'énormes quantités de travail de calcul.

        Quelques choses intéressantes que j’ai apprises de ce projet…

        On considère normalement que des taux d'erreur de l'ordre de 10^-18 sont plutôt bons, mais à cette échelle, on peut les rencontrer au cours d'un seul tir sur une grosse machine. En exascale, ce sera pire. Le mot que la communauté HPC utilise pour cela est « résilience » ; les machines doivent être capables de faire de la science de manière fiable et vérifiable malgré ces problèmes du « monde réel » intervenant dans le fonctionnement du cluster sous-jacent.

        Ils font beaucoup de « science synchrone » à grande échelle, le besoin de points de contrôle est donc inévitable et Los Alamos est situé à une altitude assez élevée (environ 7 300 pieds), de sorte que les machines sont soumises à des niveaux de rayonnement cosmique plus élevés. Cela signifie qu’ils rencontrent des taux plus élevés d’« erreurs analogiques » qui peuvent provoquer des erreurs de calcul et des pannes aléatoires de nœuds.

        Tous ces types de problèmes peuvent être modélisés, testés et compris à l'aide du Raspberry Pi Cluster à un coût bien inférieur et à une consommation bien moindre que sur les grosses machines. Avoir un accès root à un cluster de 40 000 cœurs pendant des périodes prolongées est comme un rêve devenu réalité pour ceux dont le travail consiste à résoudre ces problèmes.

    Je réalise 120 clusters Raspberry Pi pour le scan 3D. Utilisez la multidiffusion UDP pure pour les contrôler tous à l'aide d'une seule transmission de paquets réseau. Fonctionne vraiment bien :-)

    C’est très similaire à ce que nous souhaitons avec un nouveau projet local. Mais au lieu d’un cluster physique situé à proximité, nous réfléchissons à un « collectif » (un peu Borg, mais sympa…), pour faire du rendu 3D GPU Three.js. J'ai un prototype qui tourne sur Bing ou Google sur sustasphere, vous trouverez le GitHub correspondant (pas complètement à jour cependant). Le prototype actuel s'affiche (évidemment) dans votre navigateur. Avec le collectif, les appels de votre navigateur seront acheminés vers (espérons-le) des milliers de Raspberry ; chacun traitant en temps réel une partie du rendu 3D. Dans « ma tête », je pense à Open Suze empilé avec Express.js.

    Pour l’alimentation énergétique de chaque nœud, on remercie le vent et une vis archédienne, à tête hydraulique, avec une simple dynamo de vélo…

    Bien, mais pourquoi ? Nous aimerions honorer un écho du passé (la déclaration de Port Huron) ; introduire une sphère virtuelle de dignité. Donner aux gens la possibilité d’exprimer leurs émotions ; définissant à nouveau le sens de la dignité. Imaginez Mozart interprétant ses Nozze di Figaro (pour moi, un exemple parfait d'amener l'art au peuple et de partager des réflexions sur la moralité) ; et être capable d’être réellement là, de se déplacer, de « compter les narines » et peut-être même de « devenir physique ».

    Oui, vous aurez besoin d’un collectif GPU pour cela.

    Sur la base de votre expérience, pourriez-vous nous conseiller sur la voie à suivre ? Aider les utilisateurs à prendre des décisions judicieuses ?

    > récent pilote du cluster 3000-Pi du Los Alamos National Laboratory

    Il devrait lire un cluster de 750 Pi, 5 lames de 150 Pis chacune, avec 3 000 cœurs au total (4 cœurs chacun par CPU)

    Ok, je suis un nuby sur les Raspberry Pi 3. Mais je me demandais s'ils utilisaient LFS avec le cluster de lames bitscope ? …et si oui, comment s’est-il comporté ?

    • Pas LFS mais pas Raspbian non plus (sauf pour les tests initiaux). Ils publieront éventuellement davantage pour expliquer ce qu'ils font, mais il suffit de dire qu'il s'agit d'une pile logicielle très légère qui vise à leur permettre de simuler facilement le fonctionnement de gros clusters sur ce « petit » cluster.

    Pourquoi est-il « important d’éviter d’utiliser les cartes Micro SD » ?

    J'ai une application en tête pour un cluster pi, pour laquelle j'aurai besoin d'un stockage local. Si je ne peux pas utiliser la carte MicroSD, que faire ?

    • Lors de l'exécution d'un cluster de 750 nœuds (comme le fait Los Alamos), la gestion et la mise à jour des images sur les 750 cartes SD sont, en fait, un cauchemar.

      Si votre cluster est plus petit, cela ne pose peut-être pas de problème (en effet, nous faisons souvent cela pour les petits racks de lames de 20 ou 40 nœuds).

      Cependant, l’autre problème est la robustesse.

      Les cartes SD ont tendance à s'user (la vitesse dépend de la façon dont vous les utilisez). Les nœuds de démarrage PXE (net) ne s'usent pas. Le stockage local peut également ne pas être nécessaire (si vous utilisez un système de fichiers servi NFS ou NBD via le LAN), mais la bande passante d'accès au stockage (à distance) peut être un problème (si tous les nœuds sautent sur le LAN en même temps en fonction de votre structure réseau et/ou la bande passante du serveur NFS/NBD).

      L'autre option sont les clés USB (branchées sur les ports USB du Raspberry Pi). Elles sont (généralement) plus rapides et (peuvent être) plus fiables que les cartes SD et vous pouvez également démarrer à partir d'elles !

      Cela dit, il n'y a aucun problème avec les cartes SD utilisées dans leurs limites dans les clusters Raspberry Pi.