SuperPi: quels usages pour un cluster ?
Bonjour à tous,
Le projet SuperPi Cluster (50+ Raspberry-Pi) essaie d'avancé sur les possibilités d'organisation en rack.
50+ Raspberry-Pi en Rack |
A propos de SuperPi
Le projet SuperPi vise à créer un super-calculateur/Cluster didactique à l'aide de 50+ Raspberry-Pi. Voyez cet article contenant plus de détails dans cet article.
La force d'un Super-Calculateur/Cluster c'est le traitement en parallèle (Parallel Computing) pouvant servir dans de très nombreux domaines.
A propos de cet article
Cet article est une ébauche, il "survole" les possibilités offertes par un cluster.
la section ressource reprend également un certain nombre de liens très intéressant.
Usage d'un cluster de Pi
D’une part, les grappes d’ordinateurs, clusters en anglais, rassemble un ensemble d’ordinateur pour en combiner la puissance de traitement, calcul ou de stockage.
D’autre part, les cartes nano-ordinateurs sont aujourd’hui très abordable (30 à 90 Eur/p) permettant ainsi de créer facilement un Cluster à prix abordable. Certes, ces nano-ordinateurs, comme les Raspberry-Pi, n’atteignent pas la puissance d’ordinateurs de bureau mais peut pallier ce désavantage par le nombre de nano-ordinateur.
Pour les 1200 EUR HTVA d’une bonne station de travail, il est possible d’acheter entre 15 à 30 Raspberry-Pi en fonction du modèle choisi (Pi 3, 4, 5 avec 1, 2, 4, 8 Go RAM).
8 à 15 Raspberry-Pi représentent un nombre déjà conséquent de nano-ordinateur pour réaliser un Cluster de Raspberry-Pi.
L'article ci-dessous concerne ces clusters plus modeste...pour sa part, Super Pi vise 50 Raspberry-Pi regroupés dans une
armoire Rack.
Pourquoi constituer un cluster
Un ordinateur de bureau / serveur peut facilement dépasser la
puissance de calcul de 5 à 10 Raspberry-Pi (l’équivalent
Raspberry-Pi dépend du modèle sélectionné).
Il est donc
légitime de se questionner sur l’utilité de réalisation d’un
cluster de Raspberry-Pi.
Les projets de traitement intensifs, ou réclamant de nombreuses ressources, impliquent de longs délais de traitement qui sont à la fois frustrant (attente) tout en créant des interruptions dans flux de traitement (il faut morceler le travail en tâches interruptibles).
Le type de traitement visé par les clusters sont :
-
Encodage vidéo
- Rendu 3D
- Décodage de données
- Analyse de données (data mining)
- Intégration continue (CI/CD pipeline)
- Inférence à faible latence (Neural Network/AI)
- Apprentissage Machine (Machine Learning)
Par le passé, les clusters d’ordinateurs étaient créés par les universités pour effectuer de la recherche et développement. Ces institutions disposaient des fonds adéquat pour mener ces coûteux projets à terme.
Source: Computer cluster (Wikipedia) |
Depuis, la technologie Cluster à gagné en popularité et est, aujourd’hui, facilement accessible aux développeurs, chercheurs et analystes. Grâce au Cloud --énormes clusters d’ordinateurs spécialisés-- il est possible accéder à cette technologie par l’intermédiaire d’Internet pour y réaliser les tâches intensives qui ne pourraient être assurées par les quelques ordinateurs/serveurs standards disponibles à la maison, au laboratoire informatique ou en entreprise.
Data Center = Cluster D'ordinateurs Source: A quoi ressemble un data center Google? (Adista Cyres) |
Réaliser son propre cluster, même avec des nano-ordinateurs Raspberry-Pi, c'est créer un « super ordinateur local » permettant de réduire les temps de traitement sans devoir faire appel aux services payants disponibles sur le Cloud.
L’utilisation d’un cluster local peut aussi s’avérer plus économique qu’une solution en ligne.
Spécificités d’une solution en ligne / à la demande :
-
Abonnement,
- Frais de traitement, frais de stockage, frais de transfert de données (interne au cluster)
- Frais de récupération de données (lecture de données depuis le cluster).
- Frais spécifique à la région de stockage et réplication des données
- Contrats avec clauses spécifiques (possibilité upgrade/downgrade)
- Compétences requises : gestion administrative, provisionnement.
Spécificités d’une solution locale :
-
Prix fixé à l’achat
- Stockage : NAS local
- Frais : uniquement électricité
- Compétences requises : IT (réseau informatique, provisionnement, organisation/orchestration IT)
Cas d’utilisation d’un cluster modeste
Bon nombre de cas d’utilisation ci-dessous fonctionneront parfaitement sur un cluster d’une dizaine de Raspberry-Pi.
Cela s'applique bien entendu au projet SuperPi bien que ce dernier puisse viser plus loin en terme d'application.
1) Apprendre et expérimenter
Un cluster Raspberry-Pi est certainement la meilleure façon d’améliorer ses connaissances informatiques sur les serveurs, le réseau, les systèmes distribués et la sécurité.
Non seulement l’apprentissage Linux est un point intéressant mais il peut être complété par l’apprentissage de base de données MySQL, PostGreSql accompagné d’un Serveur Apache et des langages de scripting comme Python, PHP et faire interagir les différents nœuds enembles.
Un cluster permet également d’utiliser
-
Docker / Kubernet / Serverless
- Déploiement Kubernetes et de container
- Créer un Super Ordinateur à traitement logiciel simultané à l’aide de OpenMPI (Message Passing Interface)
L'architecture Kubernettes revient sans cesse dans mes lectures à propos des Clusters et Data-Center. Cela fera forcement partie des explorations SuperPi.
2) Créer un laboratoire informatique
C'est presque un corolaire du point précédent lorsque l'on fait un apprentissage des réseaux informatiques.
Dans le cadre de développement logiciel, un cluster peut largement contribuer aux testes et déploiement d'une nouvelle solution logicielle.
Le cluster permettra:
-
Déployer un logiciel sur un ensemble de station (du Cluster) à l’aide de Docker ou Kubernet.
- Créer un serveur GitHub local (gestion des sources)
- Tester le déploiement d’une nouvelle version sur des hôtes présentant des variations de configuration.
- Compiler rapidement différentes versions d’un même logiciel (en utilisant les ressources de plusieurs nœuds).
Remarque: Plus il y a de nœuds dans un cluster et plus il sera performant dans un environnement partagé.
3) Créer un Cloud Privé
Un cluster local peut être utilisé pour maintenir une solution collaborative (Mail, CRM, Stockage de fichiers, gestion de documentation, contrôle de version, etc).
Il s'agit d'applications typiques proposées sur le Cloud mais grâce au Cloud Privé, aucune donnée ne sort de l'enceinte de la maison/entreprise.
NextCloud est certainement la solution la plus connue dans ce domaine. NextCloud qui vient d'annoncer un rapprochement avec le WebMail RoundCube en vue d'améliorer sa messagerie NextCloud (qui fait grincer des dents).
L’intérêt du Cloud Privé :
-
Evite de dépendre d’un prestataire (tierce partie) pour accéder aux données,
- Permet une mise-à-jour matériel rapidement (agrandir le cluster),
- Réduit les coût (pas de location de service, pas de localtion de logiciel).
4) Créer un serveur Web haute performance
Lors de la sortie du
Raspberry-Pi 4, la fondation Raspberry-Pi utilisait un cluster de Pi
pour supporter les millions de connexions WEB au jour du lancement.
Les requêtes peuvent être partagées entre les différents raspberry-Pi (principe du Load Balancing = distribution de la charge).
Source: Setting up a LAMP Stack application (Daniel Flavour) |
Il est facile de
transformer un cluster de Pi serveur WEB.
Installer les paquets LAMP,
une solution de stockage (NAS) et c’est parti.
Outre l'offre de réponse sur internet, cette solution permet :
-
Configurer finement la sécurité
- Utiliser Graphana pour surveiller les ressources
- Installer Cpanel sur les clients
- Utiliser QoS pour moduler la bande passante
- Utiliser des comptes clients pour limiter l’accès à certaines ressources
Besoin de supporter plus connexions ? ==> Ajouter un nouveau nœud.
Que Signifie LAMP?
LAMP (Linux, Apache, MySQL, PHP/Perl/Python) est un acronyme désignant une des piles logiciels les plus connues utilisée par de nombreuses applications les plus populaires du WEB.
Aujourd'hui, LAMP est utilisé pour identifier une pile logiciel générique capable et ses composants interchangeables. Voir l'article "LAMP (software bundle)" sur Wikipedia.
5) NAS et partage de fichiers
Le NAS (Network Attached Storage = Serveur de Stockage en Réseau) est l'une des applications les plus populaires du Raspberry-Pi.
Source: How to Turn a Computer into a NAS Storage Device. How to recover Data from OpenMediaVault RAID (YouTube) |
Il est possible, si pas indispensable,
d’installer un NAS sur un cluster.
Le NAS permettra de grands fichiers
(ex : fichiers vidéo, kit de développement, backup, documents
PDF, base de données, etc).
Chaque utilisateur
peut avoir un espace dédié sur le Cluster dont la taille est configurable en fonction de l'utilisateur.
La bande passante
peut aussi être configurée et surveillée de sorte qu’un utilisateur ne
perturbe pas le transfert des données des autres utilisateurs.
OpenMediaVault est certainement le NAS le plus connu et reconnu.
6) Gérer des charges importantes
Certains environnements de travail nécessitent la disponibilité de ressources informatiques puissantes.
Si vous êtes programmeur alors vous
savez que plus un projet devient volumineux et plus sa compilation prend du
temps.
Avec un Cluster, il
est possible de créer une ferme de compilation (compile farm)
et assigner tous les
nœuds du cluster pour qu'ils travaillent en parallele sur une même tâche.
Un travail complexe peut aussi être scindé en multiples tâches : une tâche sur trois nœuds et une tâche différentes sur autres 4 nœuds.
Jonglez avec les
ressources d’un cluster Raspberry Pi permet de gérer de lourdes
charges en les répartissants sur plusieurs noeuds.
Plus on ajoute de
nœuds à un cluster Raspberry Pi et plys il y a de ressources multicœurs pour exécuter les charges.
Il est possible d’utiliser Docker ou Kubernetes pour gérer des tâches spécifiques.
Workers (noeuds) et Maître (superviseur) |
Un logiciel de traitement parallèle (parallel processing) permet d'atteindre le même but en découpant des tâches.
Un cluster peut réaliser les mêmes opérations qu’un ordinateur mais en une fraction du temps qui serait nécessaire à un seul ordinateur.
7) Conversion multimedia
La traitement d'image et conversion de flux vidéo sont des processus très gourmands en temps machine. Le rendu d'une scène 3D peut également être grand consommateur en temps de calcul!
Il est possible d’effectuer ces traitements graphiques intensifs sur un ordinateur. Si le traitement d'une photo ne prend que quelques secondes, la conversion d'une vidéo peut s'étendre sur plusieurs minutes (où il faudra une machine puissante et coûteuse).
A moindre coût, un ordinateur modeste + un cluster de Raspberry-Pi peuvent réaliser les mêmes opérations. Transférez les énormes fichiers d'images brutes sur le cluster et celui-ci peut les convertir par lots, les redimensionner, appliquer des filtres etc.
Le rendu des fichiers 3D en utilisant plusieurs processeurs et modules RAM d'un Cluster sera aussi plus rapide.
L'intérêt d'un travail avec plusieurs noeuds est qu'il est aussi possible d'être averti lorsque le traitement est terminé (e-mail, notification sonore ou
LED).
Il ne reste qu'à transférer le résultat sur l’ordinateur.
Plus il y a de nœuds dans un cluster, plus il y de ressources et de processus (worker) pour accomplir les tâches.
8) Réaliser un super-ordinateur / super-calculateur
Disposer de ressources informatiques pour le traitement parallèle est coûteux.
Par exemple, le logiciel R
(traitement statistique open-source) permet de réaliser des évaluations statistiques sur des bases
de données volumineuses.
R est également hautement personnalisable
grâce a un système de greffon.
R – comme tout autre logiciel statistique – a tendance à être gourmand en ressources. Plus votre base de données contient d’entrées, plus le logiciel statistique à besoin de temps pour produire un résultat.
C'est pourquoi il est recommandé d'utiliser un cluster pour de telles tâches.
Par ailleurs, ce cas n'est très différents de la conversion de fichiers multimedia sauf que dans ce cas là, le traitement mathématique est très spécifique.
Ceci étant, pour les cas de calcul intensif (comme R), pas besoin d’argent pour louer du temps sur un
super-calculateur dans le cloud (et faire la queue avec d’autres utilisateur).
Investir cet argent pour héberger son propre
superordinateur/cluster (bon marché, évolutif, faible consommation)
peut être une approche judicieuse.
Avec son propre cluster, les calculs sont
effectués localement, presque gratuitement et pas besoin de faire la
queue avec d'autres utilisateurs.
C'est dans cette optique qie le projet SuperPi à vu le jour.
9) Serveur de jeu Minecraft (et autres serveur de jeux)
Plus ludique cette fois, un clusteur peut aussi être exploité dans le monde du jeux.
A titre d'exemple, Minecraft permet de stocker son propre monde sur un serveur.
Avec un cluster Raspberry Pi, il est possible d’héberger tous vos serveurs de jeux (nombre d'entre eux fonctionnent sous Linux puisqu'ils sont destinés a être en ligne).
Offrir un monde dans Minecraft à un amis, combattre des monstres ensembles dans Lineage ou traquez-vous les uns les autres dans le jeu Rust.
Si un jeu comporte un composant serveur, il est fort probable que celui-ci fonctionne dans un environnement Linux comme le Raspberry Pi.
10) CI/CDRéaliser un super-ordinateur / super-calculateur
ICI/CD Pipeline concerne l’intégration continue d’un développement logiciel (CI : Continuous intégration) et peut également prendre en charge la publication en continu de celui-ci (CD : Continuous Delivery).
Lors du développement d’une solution pour une utilisation interne (ex : la cas des banques) le processus peut être complété par une phase de déploiement en production.
Le graphique ci-dessous représente bien ces différents éléments :
Source : RedHat devOps ( https://www.redhat.com/fr/topics/devops/what-cicd-pipeline ) |
D’une par, un système de contrôle de version permet de gérer les différentes versions d’un logiciel et/ou de son code source. Git est probablement le système le plus utilisé à ce jour et est capable de prendre en charge les requêtes push et pull (de version) dans des entreprises comptant des centaines d'utilisateurs.
Le code est ainsi conserver dans un environnement fermé (et non dans un endroit en ligne sur GitHub/GitLab).
D’autre part, l’utilisation de machine virtuelle / Docker pré-configuré pour réaliser les tâches nécessaires (compilation/montage d’une DB./test suite/etc) pour faciliter les tâches.
Enfin, Ansible est un logiciel d’automatisation IT.
Il permet
d’automatiser le déploiement de logiciels sur des postes
Linux/Windows. Il peut coordoner une déploiement multi-noeud (sur
plusieurs postes distincts, base de données, serveur, MessageQueue, etc).
Un cluster Raspberry Pi permet de configurer de tels environnements.
10) Home automation
Il est aujourd’hui possible d’automatiser une maison pour
quelques centaines d’Euro.
Le logiciel Home Assistant est probablement le plus connu dans cette catégorie.
Souce: Mes usages de Home Assistant par Niko C (sur blablaHigh-Tech) |
Commander des lumières aux stores
automatiques en passant par les prises wifi du salon.
Avoir une porte de garage qui
s'ouvre et se ferme toute seule... ou commandable depuis un smartphone.
Une sonnette de maison avec un
flux vidéo, un baby-phone qui diffuse une musique apaisante si le
bébé pleure trop fort.
Envoyer des commandes WiFi à votre prise murale pendant 10 minutes pour faire couler la café les jours de semaine (et envoyer un SMS quand il est prêt).
Vous réveiller automatiquement avec
votre station de radio préférée.
Allumer le téléviseur sur
votre chaîne d'information locale.
Allumer la lumière dans les pièces vers lesquelles quelqu’un se dirige.
Tous ces appareils automatisés doivent avoir un cerveau qui les surveille et gère les actions.
Un cluster Raspberry Pi peut être transformé en un centre d'automatisation polyvalent avec des journaux, rapports et statistiques sur les appareils sous contrôle.
Ressources
J'ai collecté un certain nombre d'articles dont certains sont vraiment très intéressants!
-
Los Alamos National Lab Raspberry-Pi Cluster
https://www.zdnet.com/article/raspberry-pi-supercomputer-los-alamos-to-use-10000-tiny-boards-to-test-software/ - [RASPBERRYPI] How to build a
Raspberry Pi cluster with PoE, SSD, DHCP, Net
boot
https://www.raspberrypi.com/tutorials/cluster-raspberry-pi-tutorial/ - Turing Pi
https://turingpi.com/ - 12 amazing Raspberry-Pi cluster use
cases
https://turingpi.com/12-amazing-raspberry-pi-cluster-use-cases/ - Make use of Raspberry-Pi
Cluster
https://www.makeuseof.com/what-is-a-raspberry-pi-cluster/ - Why build a Raspberry-Pi Cluster ?
(Jeff
Geerling)
https://www.jeffgeerling.com/blog/2021/why-build-raspberry-pi-cluster - [VIDEO] Raspberry Pi Cluster Ep 1
(Jeff Geerling)
https://www.youtube.com/watch?v=kgVz4-SEhbE - [VIDEO] Raspberry Pi Cluster Ep 2
(Jeff Geerling)
https://www.youtube.com/watch?v=xNndbfxMCLo - [VIDEO] Raspberry Pi Cluster Ep 3
(Jeff Geerling)
Install Kubernetes
https://www.youtube.com/watch?v=N4bfNefjBSw - [VIDEO] Raspberry Pi Cluster Ep 4
(Jeff Geerling)
Minecraft, Pi-Hole, Grafana
https://www.youtube.com/watch?v=IafVCHkJbtI&t=610s - How to Build a 32-Core Raspberry Pi
Cluster From Scratch
(Nice information)
https://hackernoon.com/how-to-build-a-32-core-raspberry-pi-cluster-from-scratch -
A guide to building a Kubernetes
Cluster with Raspberry
Pi’s
https://alexsniffin.medium.com/a-guide-to-building-a-kubernetes-cluster-with-raspberry-pis-23fa4938d420 - OctaPi a python based cluster from
Raspberry-Pi
foundation
https://projects.raspberrypi.org/en/projects/build-an-octapi/0 - Raspberry Pi Cluster Emulation With
Docker Compose (Hardware
Emulation)
https://gcore.com/learning/raspberry-pi-cluster-emulation-with-docker-compose/ - Un pipeline CI/CD, qu’est ce que
c’est ?
https://www.redhat.com/fr/topics/devops/what-cicd-pipeline
Bonne lecture
Écrire un commentaire