Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)
-
Upload
mohammed-tamali -
Category
Engineering
-
view
1.267 -
download
0
Transcript of Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)
Université de Béchar
Laboratoire des Études Énergétiques en Zones Arides
Équipe Modélisation & Simulation des Systèmes
Version 2.1.0
Cours réalisé par : Prof. TAMALI Mohammed,
http://www.univ-bechar.dz/mtamali
Université de Béchar | FS&T
(ENERGARID Lab./SimulIA Team)
Plan
1) présentation
introduction
topologies et procédures d'accès
modes d'utilisation d‘UBcluster
2) étude de cas
étude de séquence génétique
étude de distribution de boltzmann.
Utilisation d'octave
utilisation du calcul parallèle
Conclusion
Définition du mot CLUSTER, Ensemble de plusieurs machines vues comme une seule permettant d'obtenir de grandes puissances de traitement. C’est un regroupement de deux serveurs ou plus, en vue de créer un "super serveur virtuel". Un cluster fournit des fonctions de HAUTE DISPONIBILITÉ (HA) et de RÉPARTITION DE CHARGES (DT). Il facilite aussi l’évolutivité de la MONTÉE EN CHARGE (LG). Idée des CLUSTERS apparue à l'origine, au milieu des années 80 chez Digital Equipment Corporation, sous le nom de VAXCluster. En 1995, un accord de partenariat est signé entre Microsoft et DEC, donnant naissance à Windows NT 4 Enterprise Server (nom de code : wolfpack); version qui intègre MSCS (Microsoft Cluster Serveur). Il existe aujourd’hui des solutions cluster sous Windows, MacOS, Linux/Unix, OpenVMS, AS/400. Plusieurs constructeurs proposent des solutions propriétaires (Tandem, Siemens, Veritas, Novell, IBM, Sun, Oracle ...). Lotus fournit également une solution logicielle pour créer un cluster Notes entre des machines d'horizons différents (AS/400, Netware, Windows, MacOS, Unix/Linux …). Il existe actuellement des solutions GPL (Rocks Cluster).
Machine de Babbage
Structure d’un cluster
3
Généralités & Présentations
4
Généralités & Présentations
Albert3 (Chez BMW) 1,024 Intel processor cores (256 compute
nodes, each with two Intel Xeon 5160
dual core processors)
RaspBerry PI en Cluster
Google Data Center
La topologie adoptée pour l'Intranet du centre de calcul de l'université de Béchar porte l'avantage d'être connecté à l'Intranet (LAN, WLAN) et à Internet (WAN). Il est du type ROCKS Cluster version 6.2 (2015). Il intègre beaucoup d’application et d’environnement de calcul : FreeFEM++ Octave Gmesh FreeCAD C/C++, BioPerl, BioPython Fortran SGE Condor Ganglia MPI, Open MPI et MPICH Serveur LAMP 5
Généralités & Présentations
UBCluster est accessible à travers une console de commande en ligne, utilisant le programme (Client CONSOLE) putty.exe GPL (téléchargeable du site http://www.putty.org/). 6
Généralités & Présentations
Pour la plupart des cas, les utilisateurs recensés utilisent Microsoft Windows comme système d'exploitation. Pour Linux, on ouvre une fenêtre TERMINAL et on tape SSH et puis les coordonnées (user, pass)
7
Généralités & Présentations
Une fois que l'utilisateur donne son username et son password d'une manière correcte, il accédera sur la plateforme UBCluster après quoi, il pourra commencer à envoyer ses requêtes de calcul.
Pour cela, UBCluster pourra être utilisé selon beaucoup de mode. Il est toutefois extensible selon le besoin et la disponibilité du logiciel escompté (GPL ou Licence). Les outils déjà intégrés sont : - Octave (équivalent GPL de Matlab) - APBS (Adaptive Poisson-Boltzmann Solver) - Calcul parallèle MPI/Open ACC(C/C++ ou Fortran) - La suite viendra ...
8
Généralités & Présentations
BLAST, ou Basic Local Alignment Search Tool, est une collection d'outils qui sont utilisés pour rechercher et trouver des régions de la similarité locale entre les séquences. Le programme compare des séquences de nucléotides ou de protéines aux bases de données de séquences, et calcule la signification statistique des occurrences 'matches'. Cette suite logiciels a été diffusée par le Centre national de l'Information en Biotechnologie NCBI USA. BLAST peut être utilisé pour des comparaisons protéine-protéine ou des comparaisons de nucléotides -+nucléotides. Avant qu'un exemple d'utilisation ne soit présenté, nous devons d'abord définir quelques variables d'environnement.
• $BLASTDB - C'est la variable qui pointe vers la base de données Blast. elle est fixé à $HOME/bio/ncbi/db/. Ce répertoire devrait contenir les bases de données quevous souhaitez rechercher. BLAST, par défaut, contrôle cet endroit et le répertoire de travail courant pour la présence des bases de données. Cette variable est définie lors de la connexion par des scripts de connexion du système, et peut être modifiée par l'utilisateur pour qu'elleil pointe vers son vrai chemin dans ses scripts de démarrage.
• $BLASTMAT - Cette variable pointe vers l'emplacement où les matrices score BLAST sont présents. Il est /opt/bio/ncbi/data. Encore une fois, elle peut être modifiée pour pointer vers un emplacement désiré sur une base par utilisateur.
BLAST nécessite la présence de 2 ensembles de données. Un ensemble de données qui est la séquence d'entrée que vous souhaitez rechercher, et l'autre ensemble de données qui est la base de données que vous souhaitez faire une recherche avec.Utilisez la procédure suivante pour exécuter BLAST :Télécharger une base de données BLAST que vous souhaitez exécuter la comparaison avec. Les bases de données peuvent être obtenues sur le site ftp NCBI à ftp://ftp.ncbi.nlm.nih.gov/blast/db/.Les bases de données disponibles sur le site mentionné ci-dessus sont pré-formatés. Il est recommandé que les bases de données BLAST sont stockés à l'emplacement $BLASTDB. Visitez ftp://ftp.ncbi.nlm.nih.gov/blast/db/ dans votre navigateur pour voir la liste des bases de données disponibles préformatées. Télécharger une de ces bases sur votre session UBCluster en utilisant wget. Nous allons utiliser la base de données du nucléotides de la 'Drosophila melanogaster' (mouche)
[mtamali@hpc ~]$ wget -q ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.08.tar.gz [mtamali@hpc ~]$ gunzip -c nt.08.tar.gz | ( cd $BLASTDB/ && tar -xf -)
9
Etude de cas
Exécutez la commande au format formatdb la base de données au format BLAST. Pour cet exemple, nous allons utiliser la Drosophila melanogaster (mouche) base de données de nucléotides.
[mtamali@hpc ~]$ cat > test.txt >Test AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG CCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGGTAACGAGGTAACAACCATGCGAGTGTTGAA GTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCGATATTCTGGAAAGCAATGCC AGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTGGCGATGATTG AAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT
Exécutez le programme blastall sur l'entrée de test contre la base de données formatées.
blastall -d drosoph.nt -p blastn -i test.txt
[mtamali@hpc ~]$ cd $BLASTDB [mtamali@hpc ~]$ wget -q ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/drosoph.nt.gz [mtamali@hpc ~]$ gunzip drosoph.nt.gz [mtamali@hpc ~]$ formatdb -p F -V T -i drosoph.nt [mtamali@hpc ~]$ ls drosoph.nt* drosoph.nt drosoph.nt.nhr drosoph.nt.nin drosoph.nt.nsq
[mtamali@hpc ~]$ cd $HOME
Après que la base de données est mise en forme, editer un fichier d'entrée de test :
10
Etude de cas
Le résultat sera alors
[nostromo@xxx ~]$ blastall -d drosoph.nt -p blastn -i test.txt BLASTN 2.2.18 [Mar-02-2008] Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402. Query= Test (560 letters) Database: drosoph.nt 1170 sequences; 122,655,632 total letters Searching..................................................done Score E Sequences producing significant alignments: (bits) Value gi|10729531|gb|AE002936.2|AE002936 Drosophila melanogaster genom... 36 0.86 gi|10728232|gb|AE003493.2|AE003493 Drosophila melanogaster genom... 36 0.86 gi|10726497|gb|AE003698.2|AE003698 Drosophila melanogaster genom... 36 0.86 gi|10726398|gb|AE003681.2|AE003681 Drosophila melanogaster genom... 36 0.86 gi|10729308|gb|AE002665.2|AE002665 Drosophila melanogaster genom... 34 3.4 gi|10729264|gb|AE002615.2|AE002615 Drosophila melanogaster genom... 34 3.4 gi|7298233|gb|AE003648.1|AE003648 Drosophila melanogaster genomi... 34 3.4 gi|7297628|gb|AE003628.1|AE003628 Drosophila melanogaster genomi... 34 3.4 gi|10728546|gb|AE003447.2|AE003447 Drosophila melanogaster genom... 34 3.4 gi|7290819|gb|AE003441.1|AE003441 Drosophila melanogaster genomi... 34 3.4 gi|10728461|gb|AE003431.2|AE003431 Drosophila melanogaster genom... 34 3.4 gi|10728241|gb|AE003495.2|AE003495 Drosophila melanogaster genom... 34 3.4 gi|7292554|gb|AE003484.1|AE003484 Drosophila melanogaster genomi... 34 3.4 gi|10727872|gb|AE003525.2|AE003525 Drosophila melanogaster genom... 34 3.4 gi|10727399|gb|AE003587.2|AE003587 Drosophila melanogaster genom... 34 3.4 gi|10727114|gb|AE003673.2|AE003673 Drosophila melanogaster genom... 34 3.4 gi|10726705|gb|AE003740.2|AE003740 Drosophila melanogaster genom... 34 3.4....
11
Etude de cas
Créer un script de soumission simple appelé blast_sge.sh contenant le texte suivant
#!/bin/bash # #$ -cwd #$ -S /bin/bash #$ -j y export BLASTDB=$HOME/bio/ncbi/db/ export BLASTMAT=/opt/bio/ncbi/data/ /opt/bio/ncbi/bin/blastall -d drosoph.nt \ -p blastn -i $HOME/test.txt \ -o $HOME/result.txt
Exécuter avec
[mtamali@hpc ~]$ qsub blast_sge.sh Your job 10 ("blast_sge.sh") has been submitted
12
Etude de cas
Un exemple de produit de matrice ayant été exécuté sous Octave. De même, des système d'équations aux dérivées partielles peuvent aussi être traitées.
13
Etude de cas
Un exemple de traçage de fonction 3D exporté utilisant Xming sur une machine Windows 7 pour permettre d'afficher le résultat graphique sur la machine cliente. De même, toute application graphique sur le serveur UBCluster peut être lancée à distance et visualisée, sous Xming sur la machine du client.
14
Etude de cas
Un exemple de calcul symbolique, très intéressant, surtout, si on a besoin de calculer dans une espace indéfini des dérivées ou intégrales.
octave:1> df = g_diff ( "sin(x)" , "x" ) df = cos(x) octave:2> x = pi; eval ( df ); ans = -1
Un exemple de calcul symbolique, très intéressant, surtout, si on a besoin de calculer dans une espace indéfini des dérivées ou des intégrales.
octave:1> symbols octave:2> x = sym ("x") x = x octave:3> y = sym ("y"); octave:4> (x + 6) * y ans = y*(6.0+x) octave:5> differentiate (ans, x) ans = y
15
Etude de cas
Topologie du calcul parallèle dans un cluster.
Chaque machine est par défaut multi-processeurs au même moment que le
cluster peut-être constitué de plusieurs machines (dites NODES) monté
ensemble supervisées par une machines appelée FRONTEND.
La topologie d’un programme est la suivante :
/*The Parallel Hello World Program*/
#include <stdio.h>
#include <mpi.h>
main(int argc, char **argv)
{ int node;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &node);
printf("Hello World from Node %d\n", node);
MPI_Finalize();
}
Hello World from Node 2
Hello World from Node 0
Hello World from Node 4
Hello World from Node 3
Hello World from Node 7
Hello World from Node 1
Hello World from Node 6
Hello World from Node 5
La compilation est lancée par la commande suivante :
mpicc hello.c -o hello
Dans le cas d UBCluster on s’attend à une réponse équivalente à ce qui suit :
Mpirun –hostfile machines hello
16
Etude de cas
Exemple d’intégration numérique par la régle du point millieu.
Soit à determiner la valeur de l’intégrale suivante :
/* C Example */
#include <mpi.h>
#include <math.h>
#include <stdio.h>
float fct(float x)
{
return cos(x);
}
/* Prototype */
float integral(float a, int n, float h);
void main(argc,argv)
int argc;
char *argv[];
{
Nous substituons à l’integrale sont équivalent selon la régle du point millieu :
Le programme c équivalent est le suivant :
17
Etude de cas
/*************************************************************
********** This is one of the MPI versions on the integration example *
* It demonstrates the use of : *
* 1) MPI_Init *
* 2) MPI_Comm_rank *
* 3) MPI_Comm_size *
* 4) MPI_Recv *
* 5) MPI_Send *
* 6) MPI_Finalize *
* *
*************************************************************
*********/
int n, p, i, j, ierr,num;
float h, result, a, b, pi;
float my_a, my_range;
int myid, source, dest, tag;
MPI_Status status;
float my_result;
pi = acos(-1.0); /* = 3.14159... */
a = 0.; /* lower limit of integration */
b = pi*1./2.; /* upper limit of integration */
n = 100000; /* number of increment within each process */
dest = 0; /* define the process that computes the final result */
tag = 123; /* set the tag to identify this particular job */
18
Etude de cas
/* Starts MPI processes ... */
MPI_Init(&argc,&argv); /* starts MPI */
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
/* get current process id */
MPI_Comm_size(MPI_COMM_WORLD, &p);
/* get number of processes */
h = (b-a)/n;
/* length of increment */
num = n/p;
/* number of intervals calculated by each process*/
my_range = (b-a)/p;
my_a = a + myid*my_range;
my_result = integral(my_a,num,h);
printf("Process %d has the partial result of %f\n", myid,my_result);
if (myid == 0) {
result = my_result;
for (i=1;i<p;i++)
{
source = i;
/* MPI process number range is [0,p-1] */
MPI_Recv(&my_result, 1, MPI_REAL, source, tag,
MPI_COMM_WORLD, &status);
result += my_result;
}
printf("The result =%f\n", result);
}
else
MPI_Send(&my_result, 1, MPI_REAL, dest, tag, MPI_COMM_WORLD);
/* send my_result to intended dest.*/
MPI_Finalize();
/* let MPI finish up ... */
}
19
Etude de cas
float integral(float a, int n, float h)
{
int j;
float h2, aij, integ;
integ = 0.0; /* initialize integral */
h2 = h/2.;
for (j=0;j<n;j++) { /* sum over all "j" integrals */
aij = a + j*h; /* lower limit of "j" integral */
integ += fct(aij+h2)*h;
}
return (integ);
}
Le résultat est par conséquent :
[guest@hpc ~]$ nano integrale.c
[guest@hpc ~]$ mpicc -o integrale integrale.c
[guest@hpc ~]$ mpirun -np 8 integrale
Process 1 has the partial result of 0.187593
Process 2 has the partial result of 0.172887
Process 0 has the partial result of 0.195090
Process 4 has the partial result of 0.124363
Process 3 has the partial result of 0.151537
Process 5 has the partial result of 0.092410
Process 7 has the partial result of 0.019215
Process 6 has the partial result of 0.056906
The result =1.000000
[guest@hpc ~]$ mpirun -np 8 --hostfile machines integrale
Process 0 has the partial result of 0.195090
Process 3 has the partial result of 0.151537
Process 1 has the partial result of 0.187593
Process 6 has the partial result of 0.056906
Process 4 has the partial result of 0.124363
Process 7 has the partial result of 0.019215
Process 2 has the partial result of 0.172887
Process 5 has the partial result of 0.092410
The result =1.000000
20
Etude de cas
21
#!/bin/bash
#$ -M [email protected]
#$ -cwd
#$ -S /bin/bash
mpirun -np 8 -machinefile machines integrale
On lance la tâche de la façon suivante :
Exemple d’envoi de JOB par la commande qsub. Editer un fichier JOB, nommé taches.sh dont le
contenu est :
[mtamali@hpc ~]$ qsub -pe orte 8 taches.sh
8 étant le nombre de processeurs à allouer à mon JOB
[mtamali@hpc ~]$ nano taches.sh
[mtamali@hpc ~]$ qsub taches.sh
4.hpc.univ-bechar.dz
[mtamali@hpc ~]$ qstat
Job id Name User Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
4.hpc taches.sh mtamali 0 R default
[mtamali@hpc ~]$
Etude de cas
22
L’accroissement en nombre de processeurs implique une forte dimunition du temps du calcul, effet
appelé ‘AVALANCHE HPC’
Etude de cas
23
Conclusion
24
Merci pour votre attention