FLASH INFORMATIQUE FI



Le logiciel libre dans le HPC


Depuis la révolution Beowulf , le calcul haute performance (High Performance Computing, HPC) a été envahi non seulement par des clusters comportant du matériel courant mais aussi par le logiciel libre. Du système d’exploitation aux applications métier, les supercalculateurs (même les plus puissants au monde) sont un nid à logiciels libres.



Since the Beowulf revolution, High Performance Computing (HPC) has been taken over not only by clusters built from commodity hardware, but also by free software. Starting from the operating system, up to the specific scientific software, supercomputers (even the most powerful in the world) sport all kind of free software.


Vittoria REZZONICO


La révolution Beowulf

Dans l’été 1994 à la NASA, Thomas Sterling (Professeur en informatique) et Donald Becker (développeur de drivers ethernet pour le noyau Linux) construisirent le premier cluster à partir de composants librement disponibles sur le marché pour l’informatique domestique, avec une couche logicielle libre. Ils appelèrent leur machine  Beowulf. Depuis cette date, tous les clusters construits à partir de matériel grand public et de logiciels libres s’appellent cluster de type Beowulf.
En juin 1997, le premier cluster Beowulf pointa son nez dans le classement Top500 : un cluster fait maison à UC Berkeley, mais qui n’était pas un vrai cluster Beowulf dans le sens que même fait maison, il se basait sur un OS de type Solaris. Il fallut attendre encore une année pour que Linux apparaisse dans le Top500. On peut remercier Los Alamos. Mais hélas, le matériel n’était pas courant (processeurs alpha). En juin 1999, non seulement on vit apparaître (en Allemagne) des clusters comme on les connaît de nos jours (processeurs Intel ou compatibles), mais aussi les fabricants de machines spécifiques adopter GNU/Linux comme OS.
Pendant quelques années, les clusters de type Beowulf eurent de la peine à s’imposer auprès de la communauté HPC : ils étaient en concurrence avec des machines très chères, dont le matériel était spécialement conçu pour le HPC et avec une couche logicielle aussi très spécifique. Les leaders du HPC voyaient d’un très mauvais oeil ces nouveaux aspirants supercalculateurs construits à partir de matériel généralement vendu au grand public et installés avec des logiciels librement disponibles sur le net.
Malgré cette résistance (que l’on rencontre encore aujourd’hui dans certains cercles), les clusters Beowulf eurent de plus en plus de succès, à tel point que depuis 2004 la moitié des 500 ordinateurs les plus puissants au monde étaient des clusters (fig. 1). À l’EPFL, le cluster Beowulf arriva en novembre 2003 avec le projet Pléiades. Le DIT suivit en 2005 avec Mizar.


fig. 1 – clusters Beowulf dans le top500 : historique

HPC : qu’est-ce ?

On entend cet acronyme bien souvent : HPC pour High Performance Computing. Mais qu’est-ce que cela signifie ? S’agit-il d’un autre buzzword ? En partie. Mais on peut définir le HPC comme du supercomputing couplé avec des grandes quantités de données et leur traitement. On parle de supercomputing quand on résout des problèmes de taille importante sur les ordinateurs les plus performants au monde. Il existe même une liste des ordinateurs les plus puissants du moment : le Top500. Cette liste est publiée deux fois par an depuis 1993 et est reconnue par l’industrie, le monde académique, les vendeurs et les médias. Quand la machine la plus performante atteint une étape représentée par une performance à un chiffre bien rond, c’est la fête. La performance des machines est mesurée à l’aide d’un  benchmark appelé LINPACK. Le Top500 nous permet d’avoir un historique de ce qui se passe en HPC. Dans la figure 2, nous avons l’historique de la puissance LINPACK de la machine numéro un, la numéro 500 et la somme des puissances de toutes les 500 machines. Nous pouvons remarquer la progression exponentielle qui nous donne envie de tracer des droites et peut-être de transformer cette course à la puissance en une prophétie autoréalisatrice. L’étoile représente l’étape déjà franchie du  PetaFLOPs La prochaine étape (ExaFLOPs) est prévue pour 2020. Un laptop aujourd’hui est aussi puissant qu’un supercalculateur dans les années 90. À quand un téléphone mobile de cette puissance ?


fig. 2 – historique de la puissance de calcul des ordinateurs les plus performants au monde

Dans la figure 3, on voit le dernier Top10. Toutes sont des machines basées GNU/Linux, qu’on peut considérer des clusters, avec parfois des GPUs. On remarque l’énorme nombre de coeurs par machine et la consommation électrique qui se rapproche de celle d’une petite ville.

  Nom Pays Cores PFLOPs MW MFLOPS/W  
1 K computer Japon 705024 10.510 12.66 830  
2 Tianhe-1A Chine 186368 2.566 4.04 635 GPUs
3 Jaguar USA 224162 1.579 6.95 253  
4 Nebulae Chine 120640 1.271 2.58 493 GPUs
5 TSUBAME 2.0 Japon 73278 1.192 1.4 852 GPUs
6 Cielo USA 142272 1.110 3.98 279  
7 Pleiades USA 111104 1.088 4.1 265  
8 Hopper USA 153408 1.054 2.91 362  
9 Tera-100 France 138368 1.050 4.59 229  
10 Roadrunner USA 122400 1.042 2.35 444 Cell

fig. 3 – les dix ordinateurs les plus puissants au monde, état novembre 2011

On voit donc deux problèmes pour le futur : l’énorme consommation électrique qui va à l’encontre de la crise énergétique prévue pour les années à venir, et la quantité de coeurs, qui fait que les pannes sur une partie de la machine sont nombreuses et que le temps entre ces pannes suffit à peine à faire tourner un benchmark.
Si un CPU tombe en panne en moyenne une fois en 40 ans, en un jour il a la probabilité p=1/14600 de défaillir. La probabilité qu’aucun CPU dans une machine qui en compte 100’000 ne tombe en panne un jour donné est de 0.1%. On est donc assez sûr que notre machine va avoir une panne dans la journée. Ceci est bien sûr une vision simplifiée, mais qui nous donne une bonne idée de la réalité.
Mais il faut savoir que ces machines sont au service de la science, et que ce n’est qu’un outil de recherche parmi d’autres. Chaque année des prix sont décernés à des chercheurs qui arrivent à tirer parti des machines les plus performantes pour résoudre des problèmes qui, auparavant, n’étaient pas abordables.

Le logiciel libre s’empare du HPC

Les machines dédiées au HPC aujourd’hui pullulent de logiciels libres. On peut dire que le supercalculateur moyen est : un cluster

  • basé sur GNU/Linux

avec

  • une suite de compilateurs
  • des bibliothèques de parallélisation
  • des outils de mesure de performance
  • des outils d’ordonnancement de tâches (schedulers)
  • des systèmes de déploiement
  • des outils de monitoring
  • des systèmes de fichiers parallèles
    ... tous libres !

Dans la suite de cet article, je vais brièvement survoler quelques logiciels qu’on peut trouver sur nos clusters.

GNU/Linux dans le HPC

Aujourd’hui, lorsque l’on parle de systèmes HPC, on pense automatiquement à GNU/Linux. Mais cela n’a pas toujours été le cas. Au début, les serveurs de calcul étaient des machines spécifiquement conçues pour la performance, et le système d’exploitation était livré avec la machine : pas question d’avoir un OS générique sur une machine aussi spécialisée !
Jusqu’aux années 80, les codes n’étaient pas portables entre machines différentes : la compatibilité était sacrifiée au profit des performances (CPU et accès mémoire). Les systèmes d’exploitation étaient donc faits sur mesure pour les machines, ainsi que les compilateurs et les bibliothèques de parallélisation.
Avec l’arrivée du cluster Beowulf, GNU/Linux s’est imposé dans le paysage HPC, à tel point que même les grands acteurs comme Cray et IBM l’ont adopté, parfois partiellement (les BlueGene sont notamment des machines à OS mixte, une partie Linux et une partie spécifique).
Dans la figure 4, nous voyons l’évolution des systèmes d’exploitation dans les machines du Top500. Linux, qui dans le Top500 ne concerne pas que les clusters, est bien établi dans le HPC.


fig. 4 – répartition des systèmes d’exploitation dans les machines du Top500. : historique

Comment installer un cluster Beowulf

Supposons pour simplifier que votre cluster dispose d’un master et de N noeuds de calcul (fig. 5). Le noeud master (ou maître) est le cerveau du cluster, les noeuds de calcul n’ont pas d’état et peuvent être considérés comme des consommables. Ils n’ont aucune donnée précieuse. En pratique, lors de l’installation, on passe beaucoup de temps sur le master pour en configurer les services, et ensuite on démarre les noeuds, qui s’installent automatiquement en suivant les directives du noeud maître.

fig. 5 – structure d’un cluster

L’installation du noeud maître n’est pas évidente, car il faut connaître et maîtriser tous les services nécessaires au déploiement et à l’administration d’un cluster.
Pour créer un serveur d’installation, il faut configurer un serveur dhcp et un tftp, en plus de nfs ou http ou ftp, en fonction de la méthode pour distribuer les paquetages aux noeuds de calcul. Pour ce qui est du monitoring et reporting, des compétences en serveurs web (pour afficher les données), snmp et ssh sont souhaitables. Ensuite, il faut configurer un ordonnanceur (scheduler). Le noeud maître fait office de firewall et passerelle, une connaissance de iptables est donc nécessaire.
Les utilisateurs doivent être authentifiés sur le noeud maître. Il faudra un système d’authentification comme nis ou ldap.
Enfin, lorsqu’on exporte les données utilisateur sur les noeuds, il faut installer (au minimum) un serveur nfs.

Systèmes de déploiement

Les distributions GNU/Linux disposent déjà de leur propre système de déploiement par directives : KickStart pour RedHat et ses dérivées, FAI pour Debian et Ubuntu, AutoYaST pour SuSE. Chaque système de déploiement est tout à fait utilisable pour installer les noeuds d’un cluster. Pour les administrateurs système qui n’aiment pas les installations par directives, on a aussi une panoplie d’outils libres pour installer les noeuds par image. Parmi ces outils, je citerais partimage et systemImager. Les administrateurs les plus avertis se contentent parfois d’un dd à travers netcat. Pour maintenir les noeuds à jour et synchronisés, des outils tels que cfengine et puppet sont disponibles, ainsi que des shells distribués comme dsh et pdsh, le dernier étant accompagné par dhsbak, qui permet d’afficher la sortie de pdsh d’une façon resumée.

Monitoring

Un outil très diffusé dans le monde HPC est Ganglia, qui nous permet d’avoir en un coup d’oeil une bonne vue d’ensemble de l’utilisation du cluster (CPU, mémoire, réseau, disques) ainsi que son historique. Ganglia dispose d’une interface web (PHP) et est basé sur XML et RRDtools pour stocker les données.
Quand on a beaucoup de noeuds de calcul et des services critiques qui tournent sur le noeud maître, il est nécessaire d’être avertis quand un noeud est en panne, quand les services du master ne sont plus atteignables, mais aussi dans le cas où un utilisateur lance des programmes sur le master ou quand il y a trop d’utilisateurs dans la file d’attente. Pour cela, Nagios nous rend un immense service.

Schedulers

Lorsque l’on travaille à plusieurs sur une machine de calcul, il faut la partager de façon transparente. Pour cela, lorsque l’on souhaite lancer un calcul, on passe par un système de files d’attente qui s’occupe de maximiser l’utilisation de la machine moyennant les contraintes dictées par la politique d’utilisation du cluster. L’utilisateur n’a alors qu’à écrire un script qui s’occupera du lancement de son application et de l’allocation des ressources moyennant la commande qsub mon_script ou encore sbatch mon_script en fonction du type d’ordonnanceur utilisé. Dans ce script, l’utilisateur spécifie entre autres les ressources nécessaires (processeurs, mémoire, temps d’exécution, voir figures 6 et 7).
Nombre de gestionnaires de ressources et schedulers sont des logiciels libres. Parmi ceux-ci, je citerais Torque et Maui, Son of Grid Engine et Slurm.

#PBS -l nodes=2:ppn=8
#PBS -N hellotorque
#PBS -l walltime=00:10:00
#!/bin/bash

cd $PBS_O_WORKDIR
mpirun -np 16 ./hello_mpi

fig. 6 – exemple de script pour lancer un job MPI avec Torque

#!/bin/sh
#SBATCH -J helloslurm
#SBATCH -n 8
#SBATCH -N 2
#SBATCH -t 00:10:00

mpirun -np 16 ./hello_mpi

fig. 7 – exemple de script pour lancer un job MPI avec SLURM

Tout cela n’est pas simple

Pour se simplifier la vie et sauter cette longue étape de configuration du master, on peut prendre des raccourcis et faire appel à des outils de déploiement. Parmi les plus connus, je citerais Rocks Cluster Distribution et xCAT. On trouve de plus en plus d’outils de déploiement dans les distributions GNU/Linux, je peux citer Orchestra d’Ubuntu.

Systèmes de fichiers parallèles

Lorsque plusieurs machines accèdent à des fichiers sur un serveur de façon asynchrone, NFS est le système de fichiers réseau préféré du Linuxien. Mais si des centaines de machines y accèdent en même temps, les performances chutent et les clients se bloquent. Pour éviter cela, il faut avoir des systèmes de fichiers réseau conçus pour ce type de charge. Bien sûr, tout cluster assez grand nécessite un serveur avec un système de fichiers à accès parallèle (parallel filesystem).
Un cluster est souvent utilisé pour des applications qui tournent sur un seul noeud, ou bien dont chaque processus écrit un fichier séparé. Dans ce cas, ils nous faut juste une alternative plus confortable au disque local au noeud. Le système de fichiers parallèle Glusterfs satisfait alors nos exigences.
Lorsqu’on exécute un calcul en parallèle, il se peut par contre que tous les processus liés au calcul écrivent dans le même fichier. Alors il faut non seulement un filesystem parallèle, mais en plus il faut qu’il supporte le striping des fichiers. Il faudra alors choisir entre PVFS2 et Lustre. PVFS2 est plus simple à installer et configurer et on peut vite avoir un système de fichiers qui répond à nos attentes, mais il n’est pas compatible POSIX et il faut alors compiler un module noyau sur les clients ou bien passer par des commandes telles que pvfs-cd pour avoir accès aux fichiers. Lustre est plus complet, mais son avenir est encore flou et il n’est pas facile d’installation.
Un système de fichiers parallèle répond à une demande complexe, auquel le monde du libre a su répondre avec plusieurs solutions.

Compilateurs

Tout développeur connaît GCC, la GNU Compiler Collection. Le projet fut démarré par Richard M. Stallmann en 1985, et au début, il s’agissait uniquement d’un compilateur C (GNU C Compiler). Depuis lors, plusieurs compilateurs se sont rajoutés. Ceux qui intéressent la communauté HPC sont surtout Fortran et C++.

Parallélisation

Sous GNU/Linux, on peut paralléliser du code avec plusieurs outils. Si l’on reste sur le même noeud de calcul et qu’on se contente donc de la parallélisation multi-core, GCC nous satisfait entièrement : non seulement il nous permet de faire du POSIX Threads, mais aussi du OpenMP.
Si l’on souhaite faire de la programmation parallèle distribuée, le standard aujourd’hui est MPI, qui, malgré les mauvaises langues qui annoncent sa mort depuis des années, va encore être le standard de facto pour la parallélisation sur les clusters pendant quelque temps.

include <stdio.h>
int main(){
       printf("Hello, world!\n");
       return 0;
}

fig. 8 – Hello, world ! séquentiel

include <stdio.h>
#include <omp.h>
int main(){
       printf("Master thread says: Hello, world!\n");
#pragma omp parallel
    {
        printf("Hello from thread %d of %d\n",
               omp_get_thread_num(), omp_get_num_threads());
    }
       printf("Master thread says: Hello, world!\n");
       return 0;
}

fig. 9 – Hello, world ! parallélisé avec OpenMP

#include <stdio.h>
#include <mpi.h>
int main (int argc, char *argv[]){
  int rank, size;
  MPI_Init (&argc, &argv);
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);
  MPI_Comm_size (MPI_COMM_WORLD, &size);
  printf( "Hello from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

fig. 10 – Hello, world ! parallélisé avec MPI

Mesure de performance

Afin de produire des codes rapides, il est nécessaire de mesurer leurs performances dans l’objectif de les améliorer. Quand on connaît bien son algorithme, on peut en prédire le temps d’exécution et l’utilisation mémoire, et si les ressources utilisées par l’implémentation ne correspondent pas, il faut trouver où est le problème dans le code. Ou bien, quand on souhaite paralléliser des parties de code, on aimerait savoir dans quelles fonctions on passe le plus de temps. L’utilitaire gprof est, comme son nom le laisse comprendre, un outil de profiling. Après avoir compilé le code avec les options adéquates, on lance une fois le code à blanc et ensuite on le passe à travers gprof. Cette dernière action va générer un fichier texte lisible par l’être humain, mais pour les mordus du GUI, kprof est capable de visualiser.
Un des démons du programmeur est le memory leak. Pour le détecter, le programme valgrind est l’idéal. Ce programme a tant de fonctionnalités que je vous renvoie aux références pour tout explorer. Un autre outil d’analyse des codes est les performance counters. Intégrés au noyau Linux, ils permettent de lire des valeurs de registres spéciaux comme le nombre d’instructions CPU exécutées, les cache misses.

Benchmarks

Maintenant que notre cluster est opérationnel, il s’agit de le valider, et quoi de mieux que des benchmarks couramment utilisés dans le monde du HPC. Les plus connus (à tort ou raison) sont le HPL (High Performance LINPACK), qui est utilisé pour rédiger la liste Top500, et le STREAM. Les deux sont disponibles librement, et les développeurs sont même poussés à les modifier pour les adapter à des nouvelles architectures.
Plusieurs applications scientifiques sont publiées sous licence libre, je peux citer

  • QuantumESPRESSO
  • CP2K
  • Palabos
  • Gadget
  • LAMMPS
  • NAMD

Les utilisateurs sont aussi incités à faire tourner des cas tests sur leurs machines afin de les comparer. Ces applications se transforment donc en benchmarks.

Logiciels de visualisation

Des gros calculs engendrent de lourdes données, qu’il faut traiter et afficher de façon compréhensible, par exemple avec une image 2D, 3D ou même un film. Plusieurs logiciels spécialisés en visualisation scientifique existent. Deux exemples sont Paraview qui, comme son nom le suggère, est capable de faire de la visualisation en parallèle sur plusieurs noeuds de calcul, et VisIt, qui est aussi capable de faire une partie du post-processing en parallèle en plus de la visualisation in situ.

Conclusion

Le HPC ne peut plus se passer du logiciel libre : du système d’exploitation jusqu’aux applications scientifiques.
Aujourd’hui, on peut presque assembler un supercalculateur à partir de pièces disponibles dans les magasins d’informatique, en utilisant des logiciels disponibles librement sur l’Internet. On peut même transformer une salle de PC en un cluster de calcul performant.
Nous ne pouvons que nous réjouir d’une telle évolution vu les enjeux du HPC pour la recherche scientifique.

Références

  • Top500 : http://www.top500.org J’espère que certains outils décrits dans cet article seront le sujet d’articles plus approfondis dans le Flash informatique. Certains l’ont déjà été, avant même la naissance de la rubrique Logiciel Libre :


Article du FI-EPFL 2011 sous licence CC BY-SA 3.0 /V. Rezzonico



Glossaire

Benchmark :
point de référence servant à effectuer une mesure. Dans notre cas, un benchmark nous permet de mesurer les performances d’un système pour le comparer à d’autres.
Beowulf :
le premier cluster de calcul a été nommé d’après le héros d’un poème épique anglo-saxon, qui avait dans le poing la force de trente hommes.
FLOPs (floating-point operations per second) :
nombre d’opérations à virgule flottante par seconde ; c’est une unité de mesure pour évaluer la vitesse des calculateurs.
MégaFLOPS = 106 FLOPS
GigaFLOPS = 109 FLOPS
TéraFLOPS = 1012 FLOPS
PétaFLOPS = 1015 FLOPS
ExaFLOPS = 1018 FLOPS.


Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013. Vous désirez recevoir la clé USB contenant tous les numéros, inscrivez-vous avec le formulaire inform.epfl.ch pour la recevoir.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.