Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

24
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)

Transcript of Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

Page 1: 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)

Page 2: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 3: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 4: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 5: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 6: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 7: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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.

Page 8: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 9: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 10: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 11: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 12: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 13: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 14: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 15: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 16: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 17: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 18: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

/*************************************************************

********** 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

Page 19: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

/* 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

Page 20: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 21: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

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

Page 22: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

22

L’accroissement en nombre de processeurs implique une forte dimunition du temps du calcul, effet

appelé ‘AVALANCHE HPC’

Etude de cas

Page 23: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

23

Conclusion

Page 24: Chap XIV : Calcul parallèle (Fondements & Principe dutilisation)

24

Merci pour votre attention