How to use UBCluster.
UBCluster is an HPC machine with 164 processors, 96 Go of RAM and some very known softawre in parallel calculation, like freefem++, octave, NBCR, ...
Je TIC au passé, présent et au futur, Journée du 23/12/2014
Using UBCluster
1. Republique Algerienne Démocratique et Populaire
Ministère de l'Enseignement Supérieur et de la Recherche Scientifique
Université de Béchar Centre de calcul
Laboratoire ENERGARID
Equipe SimulIA
Présenté par :
M.TAMALI
2. • Plan
1) Présentation
Introduction
Topologies et procédures d'accès
Modes d'utilisation d'UBCluster
2) Etude de cas
Etude de séquence génétique
Etude de distribution de Boltzmann.
Utilisation d'Octave
Utilisation du calcul parallèle
3. Présentation Introduction
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é et de répartition de charges. Il facilite aussi l’évolutivité de la montée
en charge. Idée apparue à l'origine au milieu des années 80 chez Digital Equipment
Corporation, sous le nom de VAXCluster.
En 1995, un accord de partenariat signé entre Microsoft et DEC, donne 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 2000/2003, Linux, Unix, OpenVMS,
AS/400. Plusieurs constructeurs proposent des solutions propriétaires (Tandem, Siemens,
Veritas, Novell, IBM, Sun...). Lotus fournit également une solution logicielle pour créer un
cluster Notes entre des machines d'horizons différents (AS/400, Netware, Windows, Unix,
Linux…).
4. Présentation Topologie et procédures d'accès
La topologie adoptée pour l'Intranet du
Centre de calcul de l‘Université de Béchar
porte l'avantage d'être connecté à une
structure mixte (LAN, WLAN) et à Internet
(WAN). Il est du type ROCKS Cluster
version 5.4 (2010)
5. Présentation Mode d'utilisation d'UBCluster
UBCluster est accessible à travers une console de
commande en ligne, utilisant le programme putty.exe
(Gestionnaire de session client à distance)
téléchargeable du site http://www.putty.org/.
D’autres outils existent, tel que WinSSH …
6. Présentation Mode d'utilisation d'UBCluster
Pour la plupart des cas, les utilisateurs
recencés utilisent Microsoft Windows
XP ou 7 comme système d'exploitation.
Pour Linux, on ouvre une fenêtre
TERMINAL et on tape SSH et puis les
coordonnées (user, pass)
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 pour calcul.
7. Présentation Mode d'utilisation d'UBCluster
Pour cela, UBCluster pourra être utilisé selon des modes variés. Il est toutefois extensible selon le
besoin et la disponibilité du logiciel escompté (GPL ou Licence propriétaire).
Les outils déjà intégrés sont :
- Octave (équivalent GPL de Matlab)
- APBS (Adaptive Poisson-Boltzmann Solver)
- Compilateur pour le calcul parallèle (C/C++, perl ou Fortran)
- La suite viendra ...
8. Etude de cas Etude de séquences génétiques
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 que vous 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'elle 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. Elle est définie par /
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 Etude de séquences génétiques
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 ~]$ 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, éditer un fichier d'entrée de test :
[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
10. Etude de cas Etude de séquences génétiques
Le résultat sera alors
[mtamali@hpc ~]$ 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 Etude de distribution de Bolzmann
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
C’est fini pour cette exemple et c’est à vous de découvrir la suite !
12. Etude de cas Utilisation de l'environnement
Octave 3
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 régie
13. Etude de cas Utilisation de l'environnement
Octave 3
Un exemple de traçage de fonction 3D exportée 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 Utilisation de l'environnement
Octave 3
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 Utilisation du calcul parallèle
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ées ensemble et supervisées par
une machine 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 %dn", node);
MPI_Finalize();
}
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 ↵
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
16. Etude de cas Utilisation du calcul parallèle
Exemple d’intégration numérique par la régle du point millieu.
Soit à determiner la valeur de l’intégrale suivante :
Nous substituons à l’integrale sont équivalent selon la régle du point millieu :
Le programme c équivalent est le suivant :
/* 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[];
{
17. Etude de cas Utilisation du calcul parallèle
/*********************************************************************** 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 Utilisation du calcul parallèle
/* 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 %fn", 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 =%fn", 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 Utilisation du calcul parallèle
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 Utilisation du calcul parallèle
Exemple d’envoi de JOB par la commande qsub.
Editer un fichier JOB, nommé taches.sh dont le contenu est :
#!/bin/bash
#$ -M mtamali@mail.univ-bechar.dz
#$ -cwd
#$ -S /bin/bash
mpirun -np 8 -machinefile machines integrale
On lance la tâche de la façon suivante :
[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 ~]$