SlideShare una empresa de Scribd logo
1 de 92
Descargar para leer sin conexión
INF442 : Traitement des donn´ees massives
A2 : Le regroupement plat et le regroupement hi´erarchique
Frank Nielsen
X2013
15 avril 2015
Administratif
dernier d´epˆot des TDs : le dimanche soir `a 23h59m59s suivant le
mercredi du TD
´election du d´el´egu´e de cours : ? ? ?
TD1 : ok, f´elicitations !
TD2 commence par l’exercice MPI du TD1.
tutorat langage C++ mis en place par la DE.
Deux cr´eneaux : le mardi et le jeudi de 18h `a 20h (Ivan Ustinov)
Voir les planches du memento C++ sous moodle
Rassurez-vous, TD 3 (d´etecteur de pourriels) et TD 4 (chiffrement de
Hill) sont bien moins copieux !
Projet informatique
responsable PIs : Claudia D’Ambrosio
dambrosio@lix.polytechnique.fr
3 choix pour le 20 avril 2015
PI valid´e le 23 avril 2015
Date de remise sous Moodle : ≤ 22 mai 2015
Soutenance PI : entre le 1er juin et le 12 juin 2015
Sujets/difficult´es (* : facile , ** : moyen, *** : difficile) :
442-1 * Lancer de rayon (image de synth`ese) S. Redon
442-2 * PageRank (matrices) P.L. Poirion
442-3 ** CASP : Assessment Protein Structure Prediction A. H´eliou
& P. Chassignet
442-4 ** Graphes & arbres recouvrants (most vital edge) S. Toubaline
442-5 *** D´etecteur de Viola Jones (vision) J.-B. Bordes
442-6 *** Repliement des prot´eines (biologie) P. Chassignet
442-7 ? Projet au choix, sujet `a r´ediger et valider ?
442-7 : Projet au choix en C++ (sans MPI) ´egalement possible.
HPC : quelques cas pour le Super-Computing (SC)
HPC = on recherche l’ efficacit´e !
Utiliser des mod`eles pour de la simulation parce que sinon c’est
trop difficile `a construire (souffleries)
trop cher `a construire (crash d’avion/voiture)
trop lent `a attendre (´evolution du climat, galaxies)
trop dangereux (armes, drogues, pollutions, ´epid´emies)
Avoir des r´esultats rapides voire en ligne
on-line, incremental :
valeur temporelle du r´esultat (m´et´eo)
ˆetre le premier `a avoir le r´esultat (bourse, trading HFT)
ˆetre le premier `a avoir “une analyse” (incluant le coˆut de d´evelopement)
Donn´ees massives, le Big Data :
analyse du g´enome/d’une famille de g´enomes
recherche d’intelligence extraterrestre (SETI)
Acc´el´eration, efficacit´e et scalabilit´e
tseq : temps ´ecoul´e par le programme s´equentiel
tP : ... par programme parall`ele sur P proc.
t1 : ... par le programme parall`ele ex´ecut´e en s´equentiel, P = 1
bien sˆur, t1 ≥ tseq sinon on aurait un meilleur algo. s´equentiel
Acc´el´eration : speedup(P) =
tseq
tP
, souvent
tseq
tP
t1
tP
Efficacit´e : e(P) = speedup(P)
P =
tseq
P×tP
par rapport au speed-up lin´eaire, e(P) = 1 ⇔ tP =
tseq
P
Speed-up, efficiency
Loi d’Amdahl (1967) : un frein au parall´elisme ?
gain de performance id´eal :
α = fraction du code parall`elisable
αseq = fraction du code non-parall`elisable
avec αseq + α = 1
speedup(P) =
t1
tn
=
(αseq + α )t1
(αseq +
α
P )t1
=
1
αseq +
α
P
lim
P→∞
speedup(P) =
1
αseq
=
1
1 − α
⇒ acc´el´eration born´ee par la fraction de code αseq non-parall`elisable (celle
qui est intrins´equement s´equentielle)
Loi d’Amdahl : comportement asymptotique
0
2
4
6
8
10
12
14
16
18
20
1 4 16 64 256 1024 4096 16384 65536
speed−up
nombre de processeurs (P)
0.75
0.9
0.95
Loi d’Amdahl : un exemple visuel pour concr´etiser
αseq = 20% et donc α = 80%
Temps
P = 1 P=2 P=4 P=8
S = 1 S = 5
3
S = 2
5
S = 10
3
S = 5
P → ∞
seq
par
...
lim
P→∞
speedup(P) =
1
αseq
=⇒ speedup ≤ ×5
Est-ce alors int´eressant d’avoir des grands clusters de machines ?
Loi de Gustafson : scale speed-up, `a la rescousse !
Simulation : taille des mailles d’une grille 2D/3D = fonction de P
Vid´eo : SD, HD, 4K, 8K, etc.
Concept = Charge de travail (workload) grandit lin´eairement avec P
n n’est pas fix´e ! (= cas d’Amdahl)
t1(P) = αseqtP + P × (α × tP)
speedupGustafson(P) = αseq + P × (1 − αseq)
Gustafson = parall´elisme de donn´ees
.
Loi de Gustafson : un exemple visuel
Loi de Gustafson : speedup(P) = αseq + P × α . scale speed-up
P = 1 P = 2 P = 4 P = 8
n 2n 4n 8n
temps
la taille des donn´ees n augmente
seq
par
speedup(P) = 0.2 + 0.8 × P
Parfois, en pratique, on obtient un speed-up super-lin´eaire (hyper-lin´eaire),
qui s’explique par le cache hi´erarchique des donn´ees
Pensez au cheminement complexe des donn´ees vers le processeur dans le
mat´eriel !
Comparaison des lois d’Amdahl et de Gustafson
Amdahl : tP est une fonction de (t1, α , P)
Gustafson : t1 est une fonction de (tP , α , P)
efficacit´e(P) =
acc´el´eration(P)
P
efficacit´e asymptotique d’Amdahl : limP→∞ eAmdahl(P) = 0.
Acc´el´eration toujours born´ee .
efficacit´e asymptotique de Gustafson : limP→∞ eGustafson(P) = α .
Acc´el´eration non-born´ee asymptotiquement.
... pas de contradiction car αseq de Gustafson = αseq d’Amdahl.
Loi de Moore (1975)
En fait, une loi empirique , une conjecture... que l’industrie essaye de
satisfaire!
nombre de transistors des processeurs double tous les 18 mois
Cluster de machines : une architecture `a m´emoire
distribu´ee
espace m´emoire local associ´e `a chaque processeur
processeurs connect´e par un r´eseau d’interconnexion
acc`es m´emoire aux autres processeurs explicite par ´echanges de
messages sur le r´eseau
le r´eseau d’interconnexion d´etermine la vitesse d’acc`es aux donn´ees
caract´eristiques du r´eseau :
transmission avec mod`ele de coˆut α + τ × Longueur(message) :
latence : temps pour initier une communication (α)
bande passante : vitesse de transfert des donn´ees (τ)
topologie : architectures physique (mat´eriel) et logique (utilis´e par les
algorithmes //)
Processus
Les syst`emes d’exploitation modernes sont multi-tˆaches : plusieurs
applications non-bloquantes peuvent tourner en “mˆeme temps” (time-slicing).
un seul processus en cours d’ex´ecution sur le CPU `a un instant donn´e,
un ordonnanceur de tˆaches qui alloue les processus aux CPUs/cœurs,
´etat d’un processus : en cours d’ex´ecution, prˆet en attente de CPU,
bloqu´e (suspendu/attente de r´eveil).
Cadre th´eorique : un processus tourne sur un processeur (mono-cœur) qui
constitue un nœud du cluster. P/Proc. (= processus, = processeur)
Tˆaches (jobs) sous UNIX
[france ~]$ sleep 10000 &
[1] 12027
[france ~]$ sleep 15000 &
[2] 12065
[france ~]$ jobs
[1]- Running sleep 10000 &
[2]+ Running sleep 15000 &
[france ~]$ kill %1
[1]- Terminated sleep 10000
[france ~]$ fg %2
sleep 15000
On suspend une tˆache avec Ctrl-Z , et on la fait passer dans le fond avec bg
% (background)
Une tˆache peut lancer plusieurs processus (souvent c’est un seul)
Tˆaches (jobs) sous UNIX : tuer une tˆache
[france ~]$ ps
PID TTY TIME CMD
10241 pts /0 00:00:00 bash
12167 pts /0 00:00:00 ps
[france ~]$ sleep 10000 &
[1] 12169
[france ~]$ ps -F
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
11234 10241 10240 0 1236 1456 6 10:08 pts /0 00:00:00 -bash
11234 12169 10241 0 953 472 1 10:50 pts /0 00:00:00 sleep 10000
11234 12170 10241 0 1132 900 1 10:50 pts /0 00:00:00 ps -F
[france ~]$ kill 12169
[1]+ Terminated sleep 10000
Programmer avec la Message Passing Interface (MPI)
Multiple Program Multiple Data : MPMD
Single Program Multiple Data : SPMD
Taxonomie de Flynn (1972). SPMD (GPU), MPMD (Playstation R 3).
MPI : le standard/la biblioth´eque
Outre les calculs locaux sur chaque processus, on a aussi :
des mouvements de donn´ees via des envois et r´eceptions de messages
(broadcast, scatter, gather, all-to-all, etc.),
de la synchronisation (barri`ere o`u tous les processus s’attendent avant
de pouvoir continuer),
du calcul global (comme des op´erations de sommes cumul´ees, reduce et
scan ou parallel prefix).
MPI : Les communications collectives usuelles
Concernent tous les processus d’un groupe de communication (souvent
WORLD)
diffusion
broadcast
Mi
M1 M2 M3
M
M M M
M
diffusion
personnalis´ee
scatter
M1 M2 M3
rassemblement
gather
Mi
M1 M2 M3
2 3 1 r´eduction
reduce
2 3 1
6
processus appelant
AVANT APR`ES
P0
P1 P2 P3
message
messages personnalis´es M1, M2, M3 `a envoyer
Mi
messages personnalis´es M1, M2, M3 re¸cus
MPI : Les communications collectives
un `a tous (one-to-all) :
La diffusion, Broadcast : MPI Bcast, message entier
La difusion personnalis´ee, Scatter : MPI Scatter, message partitionn´e en
morceaux
tous `a un (all-to-one) :
La r´eduction, Reduce : MPI Reduce, op´eration comme MPI SUM, etc.
Le rassemblement, Gather : MPI Gather, assemble le message `a partir des
messages par morceaux
tous `a tous (all-to-all, total exchange), le comm´erage : MPI Alltoall
MPI : les deux op´erations de base send et receive
Communications bloquantes
send(&data, n, Pdest) :
Envoie n donn´ees point´ees par &data au processeur Pdest
receive(&data,n, Psrc) :
Re¸coit n donn´ees `a l’adresse point´ee par &data du processeur Psrc
Que se passe t’il dans ce petit exemple ?
P0 P1...
a=442;
send(&a, 1, P1);
a=0;
...
receive(&a, 1, P0);
cout << a << endl;
Communications bloquantes (non-bufferis´ees)
⇒ provoque de l’attente (idling)
Envoyeur ou receveur doivent s’attendre mutuellement (hand-shaking).
MPI Init(&argc ,& argv ) ;
MPI Comm size (MPI COMM WORLD,&numprocs ) ;
MPI Comm rank(MPI COMM WORLD,&myid ) ;
tag =442; source =0; d e s t i n a t i o n =1; count =1;
i f ( myid == source ) {
b u f f e r =2015;
MPI Send(& buffer , count , MPI INT , d es t i n a t i on , tag ,
MPI COMM WORLD) ;
p r i n t f ( ”Le p r oces s eu r %d a envoye %dn” , myid ,
b u f f e r ) ;
}
i f ( myid == d e s t i n a t i o n ) {
MPI Recv(& buffer , count , MPI INT , source , tag ,
MPI COMM WORLD,& s t a t u s ) ;
p r i n t f ( ”Le p r oc e s s e u r %d a recu %dn” , myid ,
b u f f e r ) ;
}
. . .
tag =442; source =0; d e s t i n a t i o n =1; count =1;
i f ( myid == source ) {
b u f f e r =2015;
MPI Send(& buffer , count , MPI INT , d es t i n a t i on , tag ,
MPI COMM WORLD) ;
p r i n t f ( ”Le p r oces s eu r %d a envoye %dn” , myid ,
b u f f e r ) ;
}
i f ( myid == d e s t i n a t i o n ) {
MPI Recv(& buffer , count , MPI INT , source , tag ,
MPI COMM WORLD,& s t a t u s ) ;
p r i n t f ( ”Le p r oc e s s e u r %d a recu %dn” , myid ,
b u f f e r ) ;
}
. . .
Le processeur 0 a envoye 2015
Le processeur 1 a recu 2015
Minimiser les temps d’attente
Pour des communications bloquantes, on cherche donc `a minimiser le temps
d’attente (on verra plus tard l’´equilibrage de charge, le load balancing).
Temps d’attente pour le receveur
Receveur prˆet avant l’envoyeur (communications bloquantes)
MPI : les situations de blocages (deadlocks)
Que se passe t’il dans cet exemple ?
P0 P1
send(&a, 1, P1);
receive(&b, 1, P1);
send(&a, 1, P0);
receive(&b, 1, P0);
Envoyeur P0 attend le “OK pour envoi” de P1
Envoyeur P1 attend le “OK pour envoi” de P0
C¸a bloque. On est en situation de deadlock !
(Ctrl-C pour tuer le programme...)
Programmer avec MPI peut-ˆetre complexe `a d´eboguer
MPI : les blocages (deadlocks)
Les communications bloquantes sont n´ecessaires pour assurer la
consistence (s´emantique) des programmes mais font apparaˆıtre des
situations ind´esirables de blocage.
Pour le send, on peut pr´e-allouer un espace m´emoire “buffer donn´ees”
(Data buffer, DB) `a chaque processus, puis envoyer les donn´ees en deux
temps :
Envoi sur le Data Buffer DB,
Sur le processeur receveur, recopie le DB `a l’endroit &data,
Implant´e soit mat´eriellement soit par un protocole logiciel.
N´eanmoins, il subsiste toujours une situation de blocage lorsque le buffer
de donn´ees DB devient plein
MPI : les blocages (deadlocks)
Mˆeme si on g`ere bien les appels send, le probl`eme du deadlock subsiste.
Le probl`eme des receive...
P0 P1
receive(&a, 1, P1);
send(&b, 1, P1);
receive(&a, 1, P0);
send(&b, 1, P0);
⇒ blocage
MPI : Send/Receive non-bloquantes et non-bufferis´ees
Comment envoyer/recevoir des messages avec des communications
non-bloquantes...
L’envoyeur poste un message “Demande d’envoi” (pending message) et
continue l’ex´ecution de son programme,
Le receveur poste un “OK pour envoi”, et le transfert de donn´ees
s’effectue,
Quand le transfert de donn´ees est fini, un check status indique qu’on
peut toucher aux donn´ees sans danger
⇒ communications non-bloquantes
commnonbloq442.cpp
MPI Status s t a t u s ; MPI Request r eq u es t ;
MPI Init(&argc ,& argv ) ;
MPI Comm size (MPI COMM WORLD,&numprocs ) ;
MPI Comm rank(MPI COMM WORLD,&myid ) ;
tag =442; source =0; d e s t i n a t i o n =1; count =1;
r e q u e s t=MPI REQUEST NULL ;
i f ( myid == source ) {
b u f f e r =2015;
MPI Isend(& buffer , count , MPI INT , d es t i n a t i on , tag ,
MPI COMM WORLD,& r e q u e s t ) ;
}
i f ( myid == d e s t i n a t i o n ) {
MPI Irecv(& buffer , count , MPI INT , source , tag ,
MPI COMM WORLD,& r e q u e s t ) ;
}
MPI Wait(&request ,& s t a t u s ) ;
p r i n t f ( ” [ proc %d ] s t a t u s de MPI WAIT : %dn” , myid ,
s t a t u s ) ;
i f ( myid == source ) {
p r i n t f ( ”Le p r oces s eu r %d a envoye %dn” , myid ,
b u f f e r ) ;
}
i f ( myid == d e s t i n a t i o n ) {
p r i n t f ( ”Le p r oc e s s e u r %d a bien recu %dn” , myid
, b u f f e r ) ;
}
attente avec MPI_WAIT ...
attente avec MPI_WAIT ...
[proc 0] status de MPI_WAIT : 0
Le processeur 0 a envoye 2015
[proc 1] status de MPI_WAIT : 0
Le processeur 1 a bien recu 2015
MPI : Les six routines standards sont...
proc´edures , types de donn´ees et constantes sont pr´efix´ees par MPI
(fichier mpi.h)
100+ proc´edures dont les six principales sont :
MPI Init Initialisation de la biblioth`eque
MPI Finalize Termine l’utilisation de MPI
MPI Comm size Donne le nombre de processus
MPI Comm rank ´Etiquette du processus appelant
MPI Send Envoi un message (bloquant)
MPI Recv Re¸coit un message (bloquant)
Ces proc´edures retournent MPI SUCCESS en cas de succ`es, sinon un code
d’erreur.
Quelques hypoth`eses sur la concurrence
le processeur (ou PE) peut effectuer plusieurs “choses” en mˆeme temps
Par exemple, on peut supposer
MPI IRecv(), non-bloquant
MPI ISend(), non-bloquant
+ calcul local
il faut donc que ces 3 op´erations soient ind´ependantes !
donc on ne peut pas envoyer le r´esultat du calcul
on ne peut pas forwarder = envoyer ce que l’on re¸coit
en pseudo-code, on note les activit´es concurrentes par ||
(une double barre)
Activit´e1||Activit´e2||Activit´e3
MPI : Les types de donn´ees enMPI
Ce qu’on envoie/re¸coˆıt... MPI_Commande(&buffer,count,MPI_INT, ...)
Type MPI Type dans le langage C
MPI CHAR signed char
MPI SHORT signed short int
MPI INT signed int
MPI LONG signed long int
MPI UNSIGNED CHAR unsigned char
MPI UNSIGNED SHORT unsigned short int
MPI UNSIGNED unsigned int
MPI UNSIGNED LONG unsigned long int
MPI FLOAT float
MPI DOUBLE double
MPI LONG DOUBLE long double
MPI BYTE
MPI PACKED
MPI : La primitive send
https://www.open-mpi.org/doc/v1.4/man3/MPI_Send.3.php
Syntaxe en C :
#i n c l u d e <mpi . h>
i n t MPI Send ( void ∗buf , i n t count , MPI Datatype
datatype , i n t dest , i n t tag , MPI Comm comm)
Syntaxe en C++ (plus mis `a jour depuis MPI-2) :
#i n c l u d e <mpi . h>
void Comm : : Send ( const void ∗ buf , i n t count , const
Datatype& datatype , i n t dest , i n t tag ) const
tag : Message tag (integer), utile pour la filtration et l’appariemment des
op´erations send/receive. Par d´efault, tag=0
On utilise la syntaxe d’appel en C du MPI dans nos programmes C++
MPI : les communications non-bloquantes (C API) “I”
i n t MPI Isend ( void ∗buf , i n t count , MPI Datatype
datatype , i n t dest , i n t tag , MPI Comm comm,
MPI Request ∗ req )
i n t MPI Irecv ( void ∗buf , i n t count , MPI Datatype
datatype , i n t src , i n t tag , MPI Comm comm,
MPI Request ∗ req )
L’objet MPI Request est utilis´e dans les routines suivantes :
Retourne *flag=1 si l’op´eration *req est finie, 0 sinon
i n t MPI Test ( MPI Request ∗req , i n t ∗ flag , MPI Status
∗ s t a t u s )
Attend jusqu’`a ce que l’op´eration associ´ee avec *req soit finie.
i n t MPI Wait ( MPI Request ∗req , MPI Status ∗ s t a t u s )
MPI : les groupes de communication, communicators
D´efini le cadre des op´erations de communication,
Chaque processus inclus dans un communicator a un rang associ´e,
Par d´efaut, MPI COMM WORLD inclut tous les p processus, rang de 0 `a
p − 1,
On peut cr´eer des communicators pour des groupes de processus,
int MPI Comm size(MPI Comm comm, int *size) et int
MPI Comm rank(MPI Comm comm, int *size)
Barri`ere de synchronisation : MPI Barrier
MPI Barrier : Bloque jusqu’`a temps que tous les processus arrivent `a cette
routine = synchronisation !
Barri`ere de synchronisation
Barri`ere de synchronisation
Mesurer le temps sous MPI : MPI Wtime
double start, end;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Barrier(MPI_COMM_WORLD); /* IMPORTANT */
start = MPI_Wtime();
/* faire le calcul ici */
calculINF442();
MPI_Barrier(MPI_COMM_WORLD); /* IMPORTANT */
end = MPI_Wtime();
MPI_Finalize();
if (rank == 0) {cout<< end-start <<endl;}
Ou alors utiliser MPI Reduce() pour calculer les temps minima/maxima (et
autres statistiques) des processus...
MPI : Calcul globaux Reduce
C :
#i n c l u d e <mpi . h>
i n t MPI Reduce ( void ∗ sendbuf , void ∗ recvbuf , i n t count
, MPI Datatype datatype , MPI Op op , i n t root ,
MPI Comm comm)
https://www.open-mpi.org/doc/v1.5/man3/MPI_Reduce.3.php
Arbre de r´eduction (d´epend de la topologie)
(+ 1 2 3 4) (+ (+ 1 2) (+ 3 4))
MPI : Reduce, op´erations de calcul pr´ed´efinies
Op´erateur binaire associatif et commutatif
Nom Signification
MPI MAX maximum
MPI MIN minimum
MPI SUM sum
MPI PROD product
MPI LAND logical and
MPI BAND bit-wise and
MPI LOR logical or
MPI BOR bit-wise or
MPI LXOR logical xor
MPI BXOR bit-wise xor
MPI MAXLOC max value and location
MPI MINLOC min value and location
Calcul de la factorielle...factoriellempireduce442.cpp
i n t i , moi , nproc s ;
i n t nombre , g l o b a l F a c t =−1, l o c a l F a c t ;
MPI Init (&argc ,& argv ) ;
MPI Comm size (MPI COMM WORLD,& nproc s ) ;
MPI Comm rank (MPI COMM WORLD,&moi ) ;
nombre=moi+1;
// dans l e s arguments , se r a p p e l e r l ’ o r d r e ( source , d e s t i n a t i o n )
MPI Reduce(&nombre ,& globalFac t , 1 , MPI INT ,MPI PROD , 0 ,MPI COMM WORLD) ;
i f ( moi==0)
{ p r i n t f ( ” f a c t o r i e l l e avec re duc e pour %d p r o c e s s u s = %dn” , nprocs , g l o b a l F a c t ) ;}
l o c a l F a c t =1; f o r ( i =0; i<nproc s ; i++) { l o c a l F a c t ∗=( i +1);}
i f ( moi==0)
{ p r i n t f ( ” f a c t o r i e l l e l o c a l e : %dn” , l o c a l F a c t ) ;}
M P I F i n a l i z e () ;
MPI : Les commandes Scan/ Pr´efixe parall`ele
i n t MPI Scan ( void ∗ sendbuf , void ∗ recvbuf , i n t count ,
MPI Datatype datatype , MPI Op op ,MPI Comm comm )
processus P0 P1 P2 P3
entr´ee (vi ) 1 2 3 4
sortie 1 3 (= 1 + 2) 6 (= 1 + 2 + 3) 10 (= 1 + 2 + 3 + 4)
P0
P1
P2
P3
a
b
c
d
a + b + c + d
b
c
d
reduce
P0
P1
P2
a0
a1
c0b0
b1
c2a2 b2
c1
scan
a0
a0 + a1
a0 + a1 + a2
b0
b0 + b1
b0 + b1 + b2
c0
c0 + c1
c0 + c1 + c2
P0
P1
P2
P3
a
b
c
d
a + b + c + d
Allreduce a + b + c + d
a + b + c + d
a + b + c + d
Algorithme parall`ele pour les
k-moyennes
Parallel k-means
MPI
Frank Nielsen 4.k-moyennes sous MPI A2-47
Parall´elisation : propri´et´e de composition du centro¨ıde
Soit X et X deux jeux de donn´ees pond´er´es avec leurs sommes des poids
totaux W et W (X ∩ X = ∅). Alors on a la r`egle de composition :
¯x(X ∪ X ) =
W
W + W
¯x(X) +
W
W + W
¯x(X )
Tr`es utile pour partager le calcul des donn´ees sur plusieurs processeurs...
On fait des paquets X1, ..., Xp ´equilibr´es de taille n
p
Propri´et´e forte de la g´eom´etrie Euclidienne (pas vrai en g´eom´etrie
hyperbolique)
Frank Nielsen 4.k-moyennes sous MPI A2-48
R`egle de composition : preuve ´el´ementaire
Prenons X ∩ X = ∅.
¯x(X ∪ X ) =
W
W + W
¯x(X) +
W
W + W
¯x(X )
¯x(X) =
1
|X|
x∈X
x
¯x(X ∪ X ) =
1
|X| + |X |
x∈X
x +
x ∈X
x
x∈X
x = |X|¯x(X),
x ∈X
x = |X |¯x(X )
W = |X| et W = |X |, idem pour des poids arbitraires W et W .
Frank Nielsen 4.k-moyennes sous MPI A2-49
Parall´elisation de l’heuristique de Lloyd
Soit p processeurs P0, ..., Pp−1, tous les processeurs lisent leurs n
p donn´ees
(tient dans la m´emoire vive, RAM).
Utilisons la propri´et´e de d´ecomposition des centro¨ıdes :
¯x(X) = p−1
i=0
1
p ¯x(Xp).
Un des processeurs, disons P0 s’occupe de l’initialisation des centroides,
puis diffuse (broadcast) cette initialisation `a tous les autres processeurs.
En MPI, commande MPI Bcast.
Chaque processeur Pr s’occupe d’ un paquet de n
p donn´ees
Xr = {xr n
p
...x(r+1) n
p
−1} en calculant la distance minimale de ses xi aux
centres. On met `a jour la fonction de coˆut et on calcule les centro¨ıdes et
cardinalit´e ind´ependamment dans chaque paquet : G1(r), ..., Gk (r) avec
n1(r) = |G1(r)|, ..., nk (r) = |Gk(r)|.
Puis on r´eduit (op´eration reduce) tous les cj (r) et nj (r) en faisant la
somme (op´eration d´edi´ee de MPI) : MPI Allreduce
On r´ep´ete jusqu’`a convergence (ou lorsque la d´ecroissance de la fonction
de coˆut passe sous un seuil donn´e).
Frank Nielsen 4.k-moyennes sous MPI A2-50
Frank Nielsen 4.k-moyennes sous MPI A2-51
Les k-moyennes en MPI : analyse de la complexit´e
Algorithme s´equentiel : O(dnks), s : nombre d’it´erations (Lloyd).
Les op´erations ´el´ementaires comme Reduce, Bcast, etc. d´ependent de la
topologie du r´eseau d’interconnexion .
Initialisation des centro¨ıdes par le processeur P0 en temps O(dk)
Coˆut total :
O dk + Bcast(p, dk) + s
dn
p
+ Reduce(p, dk) ∼n>>k,d O
dkns
p
→ Facteur d’acc´el´eration (speed-up, rapport du temps s´equentiel sur le
temps parall`ele) α = O dkns
dkns
p
= O(p).
Philosophie diff´erente de MapReduce (Hadoop) : Autre mod`ele de calcul
distribu´e simple.
Frank Nielsen 4.k-moyennes sous MPI A2-52
Les k-moyennes : Un clustering
par partition
= clustering plat
vs
Regroupement hi´erarchique
Frank Nielsen 5.Regroupement A2-53
Trouver des liens de proximit´e entre les donn´ees
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240 D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280 C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450 SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450 SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450 SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1 -9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914 -2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142 E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Frank Nielsen 5.Regroupement A2-54
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Merc240D
LotusEuropa
Merc230
Volvo142E
Datsun710
ToyotaCorona
Porsche914−2
MaseratiBora
Hornet4Drive
Valiant
Merc450SLC
Merc450SE
Merc450SL
DodgeChallenger
AMCJavelin
ChryslerImperial
CadillacFleetwood
LincolnContinental
FordPanteraL
Duster360
CamaroZ28
HornetSportabout
PontiacFirebird
050100150200250
Regroupement hierarchique (distance moyenne)
hauteur
Frank Nielsen 5.Regroupement A2-55
Les sciences du vivant adorent le regroupement
hi´erarchique !
Gene expression patterns of breast carcinomas distinguish tumor subclasses
with clinical implications http://www.pnas.org/content/98/19/10869.figures-only
Frank Nielsen 5.Regroupement A2-56
Le regroupement hi´erarchique : reconnaissance de visages
Hierarchical Clustering With Prototypes via Minimax Linkage, 2011.
Frank Nielsen 5.Regroupement A2-57
Le clustering/regroupement hi´erarchique ascendant
On part des donn´ees X = {x1, ..., xn} qui sont des feuilles et on fusionne
i´erativement au fur et `a mesure les sous-arbres jusqu’`a ne plus qu’avoir un
seul arbre. Les feuilles initiales forment une forˆet d’arbres `a une feuille, puis
on fait de la fusion d’arbres...
Plusieurs crit`eres pour la fusion de deux sous-arbres (dont les sous-ensembles
de donn´ees Gi et Gj sont stock´ees dans leurs feuilles). On calcule Δ(Gi , Gj )
la distance entre deux sous-ensembles.
strat´egie du saut minimum :ΔSL → Single Linkage (SL)
strat´egie du saut maximum (ou diam`etre) : ΔCL → Complete Linkage
(CL)
strat´egie du saut moyen : ΔGA → Group Average (GA)
⇒ algorithme glouton : Choix it´eratif de la meilleure paire de groupes (avec
tie-breaking rule)
Frank Nielsen 5.Regroupement A2-58
Pour se fixer une id´ee : saut moyen, Single Linkage (SL)
Fonction de chaˆınage entre deux groupes
Δ(Gi , Gj ) = min
xi ∈Gi ,xj ∈Gj
D(xi , xj )
o`u D(x, y) est une distance ´el´ementaire .
⇒ regroupement hi´erarchique agglom´eratif avec un saut minimum
(nearest-neighbor clustering)
Frank Nielsen 5.Regroupement A2-59
Quelle distance ´el´ementaire entre deux donn´ees ?
On doit toujours avoir bien entendu Δ({xi }, {xj }) = D(xi , xj ).
Exemples de distances ´el´ementaires :
Distance Euclidienne (L2) : D(p, q) = d
i=1(pi − qi )2
Distance de Manhattan (city block, L1) : D1(p, q) = d
i=1 |pi − qi |
Distance de Minkowski induite par Lp :
Dp(p, q) =
d
i=1
|pi − qi |p
1
p
Distance de Mahalanobis :
DΣ(p, q) = (p − q) Σ−1(p − q) = D(L p, L q),
avec Σ−1 = L L provenant de la factorisation de Cholesky
M´etrique, non-m´etrique, distance & similarit´e, etc.
Frank Nielsen 5.Regroupement A2-60
Le clustering par agglom´eration
Hierarchical Cluster Analysis (HCA) : regroupement hi´erarchique
Initialiser xi dans un cluster singleton Gi = {xi }
Tant qu’il reste au moins deux clusters :
Choisir Gi et Gj tel que Δ(Gi , Gj ) soit minimal
Fusionner Gi,j = Gi ∪ Gj (ajouter Gi,j et retirer Gi et Gj )
Retourner le dernier nœud comme la racine de l’arbre de fusion
⇒ le r´esultat d’un regroupement hi´erarchique est un arbre binaire appel´e
dendrogramme . On fusionne n − 1 fois (les ´etapes de fusion).
Diff´erent d’un algorithme de partitionnement comme les k-moyennes :
Clustering hi´erarchique = not Clustering plat (par partition)
Ici, pas de fonction de coˆut globale `a optimiser mais un algorithme de fusion
Frank Nielsen 5.Regroupement A2-61
Distance de chaˆınage Δ(Gi, Gj)
Single Linkage
saut minimum
Complete Linkage
saut maximum
diam`etre
Group Average
saut moyen
Algorithme glouton :
arg min
i,j=i
Δ(Gi , Gj )
⇒ les groupes Gi et Gj sont voisins r´eciproques !
Gi = PPVG(Gj ) = arg minG∈G Δ(Gj , G).
Gj = PPVG(Gi ) = arg minG∈G Δ(Gi , G).
PPV = Plus Proche Voisin. G : ensemble des groupes.
Frank Nielsen 5.Regroupement A2-62
Dessinons un dendrogramme...
Par exemple, choisissons la hauteur comme le nombre d’ ´etapes de fusion :
I N F 4 4 2
I, N 4, 4
I, N, F 4, 4, 2
I,N,F,4,4,2
feuilles
nœuds internes
hauteur :
nombre de fusions
0
1
2
3
Dendrogramme = Graphique d’un arbre binaire, enracin´e et plong´e dans le
plan.
Frank Nielsen 5.Regroupement A2-63
Autre visualisation de la hi´erarchie par inclusion
I N F 4 4 2
I, N 4, 4
I, N, F 4, 4, 2
I,N,F,4,4,2
I
N
F
4
4
2
nested clusters
Frank Nielsen 5.Regroupement A2-64
Le clustering hi´erarchique : single linkage (SL)
Δ(Gi , Gj ) = min
xi ∈Gi ,xj ∈Gj
D(xi , xj )
R´epeter tant que toutes les donn´ees xi ne soient pas contenues dans un seul
cluster, on fusionne les deux groupes les plus proche. `A chaque instant tous
les sous-arbres forment une forˆet (partitition de X).
Single linkage → nearest-neighbor clustering
S’il existe plus d’une paire de groupes donnant le Δ minimal, on choisit
un ordre (lexicographique). Si on fait une permutation sur les donn´ees, on
n’obtiendra pas le mˆeme dendrogramme : unicit´e .
Probl`eme de chaˆınage (artefact) dans le clustering final
Complexit´e : na¨ıf O(n3), algorithme SLINK en O(n2) (1973), temps
quadratique et espace lin´eaire en utilisant l’arbre recouvrant de poids
minimal (MST : Minimum Spanning Tree, 1969).
Frank Nielsen 5.Regroupement A2-65
MaseratiBora
FordPanteraL
Duster360
CamaroZ28
ChryslerImperial
CadillacFleetwood
LincolnContinental
HornetSportabout
PontiacFirebird
Merc450SLC
Merc450SE
Merc450SL
DodgeChallenger
AMCJavelin
Hornet4Drive
Valiant
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
Merc240D
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
LotusEuropa
Merc230
Datsun710
Volvo142E
ToyotaCorona
Porsche914−2
020406080
Regroupement hierarchique (saut minimum)
hauteur
Frank Nielsen 5.Regroupement A2-66
Le clustering hi´erarchique : Complete Linkage
Complete linkage (CL) : CLINK in O(n2) (1977)
ΔCL(Gi , Gj ) = max
xi ∈Gi ,xj ∈Gj
D(xi , xj ) ,
appel´e aussi diam`etre .
Probl`eme du diam`etre : si un point artefact (outlier) est tr`es ´eloign´e des
autres, la distance inter-groupe devient grande (et n’est pas significative).
Complete linkage → furthest-neighbor clustering
Frank Nielsen 5.Regroupement A2-67
MaseratiBora
ChryslerImperial
CadillacFleetwood
LincolnContinental
FordPanteraL
Duster360
CamaroZ28
HornetSportabout
PontiacFirebird
Hornet4Drive
Valiant
Merc450SLC
Merc450SE
Merc450SL
DodgeChallenger
AMCJavelin
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
FerrariDino
LotusEuropa
Merc230
Volvo142E
Datsun710
ToyotaCorona
Porsche914−2
Merc240D
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
0100200300400
Regroupement hierarchique (saut maximum)
hauteur
Frank Nielsen 5.Regroupement A2-68
Le clustering hi´erarchique : Average Linkage
Average Linkage (AL) : O(n2) (1984)
ΔAL(Gi , Gj ) =
1
ni nj
xi ∈Gi xj ∈Gj
D(xi , xj )
La moyenne de toutes les paires de distance !
Frank Nielsen 5.Regroupement A2-69
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Merc240D
LotusEuropa
Merc230
Volvo142E
Datsun710
ToyotaCorona
Porsche914−2
MaseratiBora
Hornet4Drive
Valiant
Merc450SLC
Merc450SE
Merc450SL
DodgeChallenger
AMCJavelin
ChryslerImperial
CadillacFleetwood
LincolnContinental
FordPanteraL
Duster360
CamaroZ28
HornetSportabout
PontiacFirebird
050100150200250
Regroupement hierarchique (distance moyenne)
hauteur
Frank Nielsen 5.Regroupement A2-70
Frank Nielsen 5.Regroupement A2-71
Crit`ere de fusion de Ward : la variance
Variance = somme des distances euclidiennes au carr´e par rapport au
centro¨ıde :
v(X) =
x∈X
x − c(X) 2
, c(X) =
1
|X|
x∈X
x
Distance entre clusters (crit`ere de Ward) pour Gi (ni = |Gi |) et Gj
(nj = |Gj |) :
Δ(Gi , Gj ) = v(Gi ∪ Gj ) − (v(Gi ) + v(Gj ))) =
ni nj
ni + nj
c(Gi ) − c(Gj ) 2
≥ 0
Δ({xi }, {xj }) = D(xi , xj ) = xi − xj
2
Quand on fusionne deux groupes, la variance ne peut pas diminuer !
Quand on rajoute des clusters, la somme pond´er´ee des variances diminue
Δ(Gi , Gj ) = k-moyennes(Gi ∪ Gj) − (k-moyennes(Gi ) + k-moyennes(Gj ))
Frank Nielsen 5.Regroupement A2-72
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Merc240D
LotusEuropa
Merc230
Volvo142E
Datsun710
ToyotaCorona
Porsche914−2
MaseratiBora
Hornet4Drive
Valiant
Merc450SLC
Merc450SE
Merc450SL
DodgeChallenger
AMCJavelin
ChryslerImperial
CadillacFleetwood
LincolnContinental
FordPanteraL
Duster360
CamaroZ28
HornetSportabout
PontiacFirebird
050100150200250
Regroupement hierarchique (distance moyenne)
INF442 (voitures)
x
hauteur
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
Merc240D
LotusEuropa
Merc230
Volvo142E
Datsun710
ToyotaCorona
Porsche914−2
FerrariDino
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Hornet4Drive
Valiant
Merc450SLC
Merc450SE
Merc450SL
DodgeChallenger
AMCJavelin
MaseratiBora
FordPanteraL
Duster360
CamaroZ28
ChryslerImperial
CadillacFleetwood
LincolnContinental
HornetSportabout
PontiacFirebird
05001000150020002500
Regroupement hierarchique (Ward)
INF442 (voitures)
x
hauteur
Average Group Crit`ere de Ward
Frank Nielsen 5.Regroupement A2-73
Le clustering descendant hi´erarchique par division
Version top-down : on part d’un cluster contenant toutes les donn´ees X
et on divise r´ecursivement jusqu’`a temps qu’on obtienne les n feuilles
qui contiennent les donn´ees individuelles.
Pour casser un cluster en deux, on utilise un algorithme de clustering par
partitionnement pour k = 2 (comme celui des k-moyennes par exemple)
En g´en´eral, plus coˆuteux qu’un regroupement hi´erarchique agglom´eratif
(bottom-top)
Frank Nielsen 5.Regroupement A2-74
Dendrogramme : obtenir des partitions `a partir du
dendrogramme
Pour k ∈ [n] = {1, ..., n}, on peut extraire des partitions en k-sous-ensembles
de X.
877511973859339482263114311821864425204048399392158353212893053273817622369162764350599690413634496170685655951424672835998474755458365814598465272379110088129697477166607879577710134280266482
0.00.51.01.52.02.5
Regroupement hierarchique
INF442
x
hauteur
Frank Nielsen 5.Regroupement A2-75
Convertir un clustering hi´erarchique en une partition
Si on ne choisit pas k mais une valeur de seuillage...
Parcourir r´ecursivement l’arbre et on arrˆete la r´ecursivit´e quand
Δ(nœud) = Δ(nœudfils gauche, nœudfils droit) ≤ seuil
saut maximum (CL, diam`etre) : les clusters ont un diam`etre ≤ seuil
(hauteur constante)
chaˆınage de Ward : les clusters ont une variance ≤ seuil (hauteur pas
constante car inversions)
Δ < Δ∗
Δ < Δ∗
Frank Nielsen 5.Regroupement A2-76
Convertir un clustering hi´erarchique en une partition
Si on veut choisir k...
Clustering hi´erarchique → Clustering plat (partition)
On choisit une hauteur pour trouver une partition en k clusters
Meilleure hauteur par Programmation Dynamique. Meilleure hauteur pour
T (X) `a k sous-ensembles :
Fit(T = (L, R), k) = min
k1,k2 k1+k2=k
Fit(L, k1) + Fit(R, k2)
Pour les k-moyennes (clustering plat, NP-dur en g´en´eral) on obtient une
k-partition optimale `a partir d’un clustering hierarchique (facile `a
calculer, SL) sous l’hypoth`ese de satisfaire un crit`ere de s´eparabilit´e.
Frank Nielsen 5.Regroupement A2-77
Distances : m´etriques et ultra-m´etriques
Une distance d(·, ·) est :
m´etrique si elle satisfait les axiomes :
d(x, y) ≥ 0 avec ´egalit´e pour x = y seulement
d(x, y) = d(y, x) sym´etrie
d(x, y) ≤ d(x, z) + d(z, y), in´egalit´e triangulaire
ultra-m´etrique si elle satisfait les axiomes :
d(x, y) ≥ 0 avec ´egalit´e pour x = y seulement
d(x, y) = d(y, x) sym´etrie
d(x, y) ≤ max(d(x, z), d(z, y))
Frank Nielsen 5.Regroupement A2-78
Distance et ´evolution (horloge)
Dans les arbres phylog´en´etiques, la distance entre deux esp`eces impose des
restrictions sur la fonction distance.
Arbre additif (additive tree) : poids sur chaque arˆete tel que pour
chaque paire de feuilles, la distance est la somme des distances des arˆetes
les reliant.
Arbre ultram´etrique : distances entre deux feuilles Gi et Gj et leur
ancˆetre commun Gk sont ´egales : di,k = dj,k.
hk = 1
2di,j (hauteur) correspond au temps ´ecoul´e
permet de d´efinir une horloge globale sur l’axe vertical
Frank Nielsen 5.Regroupement A2-79
Dendrogrammes et arbres phylog´en´etiques
Frank Nielsen 5.Regroupement A2-80
Regroupement hi´erarchique avec l’algorithme UPGMA
UPGMA : Unweighted Pair Group Method using arithmetic Averages
Clustering hi´erarchique avec la distance de chaˆınage Average Linkage
(AL) :
Δ(Gi , Gj ) =
1
ni nj
xi ∈Gi xj ∈Gj
D(xi , xj ) = Δi,j
UPGMA garantie de produire un arbre ultram´etrique
Frank Nielsen 5.Regroupement A2-81
Regroupement hi´erarchique par UPGMA
Initialise xi a son cluster Ci et positionne ce nœud `a hauteur t = 0.
Tant qu’il reste plus de deux clusters :
Trouver les clusters Ci et Cj qui ont la distance Δi,j minimale
D´efinir un nouveau cluster Ck = Ci ∪ Cj et calculer la distance Δk,l pour
tout l
Ajouter un nœud k avec les fils Ci et Cj et positionner le `a hauteur
tk = 1
2 Δi,j
Retirer Ci et Cj de la liste des clusters, et continuer jusqu’`a temps d’avoir
deux clusters
Pour les deux derniers clusters Ci , and Cj , placer la racine `a hauteur
1
2Δ(Ci , Cj )
Frank Nielsen 5.Regroupement A2-82
Regroupement hi´erarchique par UPGMA
Th´eor`eme
Si les donn´ees sur les distances sont ultram´etriques (v´erifiable sur la matrice
des distances), alors il existe un unique arbre ultram´etrique et l’algorithme
UPGMA le construit.
... malheureusement les donn´ees (bruit´ees) ne sont pas ultram´etriques en
g´en´eral !
Tester si une matrice de distances est ultram´etrique : na¨ıvement en O(n3).
Frank Nielsen 5.Regroupement A2-83
Dissimilarit´e, similarit´e et inversions
similarit´e entre deux groupes : S(Xi , Xj ) = −Δ(Xi , Xj ). Ainsi si on a
Δ(Gi , Gk) > Δ(Gi , Gj ) alors on a l’ordre inverse S < S(Gi , Gj )
pour un chemin du dendrogramme d’une feuille `a la racine, s´equence de
fusion monotone ssi. la similarit´e d´ecroit quand on se rapproche de la
racine : S1 ≥ S2 ≥ ... ≥ Sracine. Autrement dit, la valeur du crit`ere de
fusion augmente quand on va vers la racine.
non-monotone s’il existe au moins une inversion Si < Si+1 sur un chemin
du dendrogramme. Cela veut dire que deux groupes peuvent ˆetre plus
similaire `a l’´etape i + 1 que les deux groupes fusionn´es `a l’´etape i.
crit`ere de Ward ne garantie pas la monotonie (inversions). Par
contre, Single Linkage, Complete Linkage et Average Linkage garantissent
la monotonie.
Frank Nielsen 5.Regroupement A2-84
Inversion possible pour le crit`ere de Ward
x3x2x1
S({x1, x2}, {x3})
x1
x2
x3
S({x1}, {x2})
Inversion car un nœud parent se trouve “plus bas” que les deux nœuds fils.
Frank Nielsen 5.Regroupement A2-85
C++ : Contenu des m´ethodes `a l’ext´erieur des classes
#i n c l u d e <iostream >
using namespace std ;
c l a s s CEntier
{
p u b l i c : i n t v a l ;
CEntier ( i n t v ) { t h i s −>v a l=v ;}
void ajoute ( i n t v2 ) ;
};
// D´efinition `a l’ext´erieur de class
void CEntier : : ajoute ( i n t v2 ) { v a l+=v2 ;}
i n t main ()
{ CEntier ∗e1=new CEntier (5) ; e1−>ajoute (8) ;
cout<<e1−>val <<endl ;
r e t u r n 0;}
Frank Nielsen 5.Regroupement A2-86
Structures de donn´ees abstraites
D´efini une interface pour acc´eder aux donn´ees.
Peut-ˆetre cod´e du plusieurs mani`eres diff´erentes.
les piles (Last In First Out, LIFO)
les files (First In First Out,FIFO)
les arbres
les graphes
les matrices creuses
etc.
Par exemple, les piles et files peuvent ˆetre implant´e soit avec des tableaux soit
avec des listes chaˆın´ees.
Frank Nielsen 5.Regroupement A2-87
c l a s s CNoeud{C++ : // la classe nœud
p u b l i c : CNoeud ∗gauche , ∗ d r o i t ;
i n t v a l ;
p u b l i c :
CNoeud( i n t v ) { t h i s −>v a l=v ; gauche=d r o i t=NULL;}
CNoeud( i n t val , CNoeud∗ Arbre1 , CNoeud∗ Arbre2 )
{ t h i s −>v a l=v a l ; gauche=Arbre1 ; d r o i t=Arbre2 ;}
s t r i n g P r i n t ()
{ char b u f f e r [ 2 0 ] ; s t r i n g s v a l=s t r i n g ( i t o a ( val , buffer
,10) ) ;
s t r i n g sgauche , s d r o i t ;
i f ( gauche==NULL) sgauche=” n i l ” ;
e l s e sgauche=gauche−>P r i n t () ;
i f ( d r o i t==NULL) s d r o i t=” n i l ” ;
e l s e s d r o i t=d r oi t −>P r i n t () ;
r e t u r n ” ( ”+s v a l+” , ”+sgauche+” , ”+s d r o i t+” ) ” ;
}};
Frank Nielsen 5.Regroupement A2-88
. . .
CNoeud ∗ Arbre442=new CNoeud (3 , new CNoeud (2) ,
new CNoeud (1 , new CNoeud (4) ,new CNoeud (5) ) ) ;
cout<<Arbre442−>P r i n t ()<<endl ;
Ex´ecution donne `a la console :
(3,(2,nil,nil),(1,(4,nil,nil),(5,nil,nil)))
Frank Nielsen 5.Regroupement A2-89
C++ : r´ecup´eration de la m´emoire
tilde ∼, un seul destructeur par classe C++
˜CNoeud ()
{
i f ( gauche!=NULL)
d e l e t e gauche ;
i f ( d r o i t !=NULL)
d e l e t e d r o i t ;
cerr <<” d e l e t e ”<<val <<endl ;
}
(3,(2,nil,nil),(1,(4,nil,nil),(5,nil,nil)))
delete 2
delete 4
delete 5
delete 1
delete 3
Frank Nielsen 5.Regroupement A2-90
Diff´erences principales entre C++ et Java
null en Java et NULL en C++
this.variable en Java/C++ (r´ef´erence) et this->variable en C++
(pointeur)
class INF442{} en Java et class INF442{}; en C++
On peut rajouter le corps des m´ethodes en C++ apr`es sa d´eclaration
dans la classe : void CNoeud::Addition(int v)
ajouter un destructeur dans la classe en C++
array.length en Java. On utilise la classe vector de la STL C++ et
.size()
import en Java et include en C++ (STL) etc.
En C++ dans les classes, mettre explicitement public (sinon on est
private par d´efaut)
Frank Nielsen 5.Regroupement A2-91
R´esum´e A2
HPC : acc´el´eration, loi d’Amdahl et loi de Gustafson
MPI :
les communications bloquantes, les situations de blocage, les
communications non-bloquantes, les barri`eres de synchronisation
les calculs collaboratifs : r´eduction (somme, reduce & Allreduce), et les
op´erations de pr´efixe parall`ele (scan)
Science des donn´ees :
les k-moyennes avec MPI
regroupement hi´erarchique vs. regroupement plat.
arbre ultram´etrique et chaˆınage par saut moyen (average link).
C++ : les classes objets. Lire le memento C++ sur la page Moodle !
Pour la prochaine fois : lire le chapitre 8 et relire le chapitre 2 du
polycopi´e
Frank Nielsen 5.Regroupement A2-92

Más contenido relacionado

La actualidad más candente

Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
1 entropie-capacite theorie de l'information
1 entropie-capacite theorie de l'information1 entropie-capacite theorie de l'information
1 entropie-capacite theorie de l'informationAbdou Obado
 
Distances sémantiques dans des applications utilisant le web sémantique
Distances sémantiques dans des applications utilisant le web sémantiqueDistances sémantiques dans des applications utilisant le web sémantique
Distances sémantiques dans des applications utilisant le web sémantiqueFabien Gandon
 
Rapport - Partie th‚orique
Rapport - Partie th‚oriqueRapport - Partie th‚orique
Rapport - Partie th‚oriqueBelkacem KAID
 
P8 03 presentation
P8 03 presentationP8 03 presentation
P8 03 presentationrajiasellami
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmiqueHajer Trabelsi
 
Graphics card as computation engine
Graphics card as computation engineGraphics card as computation engine
Graphics card as computation enginevalery brasseur
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG EditionCamblor Frédéric
 

La actualidad más candente (9)

Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
1 entropie-capacite theorie de l'information
1 entropie-capacite theorie de l'information1 entropie-capacite theorie de l'information
1 entropie-capacite theorie de l'information
 
Rapport MOGPL
Rapport MOGPLRapport MOGPL
Rapport MOGPL
 
Distances sémantiques dans des applications utilisant le web sémantique
Distances sémantiques dans des applications utilisant le web sémantiqueDistances sémantiques dans des applications utilisant le web sémantique
Distances sémantiques dans des applications utilisant le web sémantique
 
Rapport - Partie th‚orique
Rapport - Partie th‚oriqueRapport - Partie th‚orique
Rapport - Partie th‚orique
 
P8 03 presentation
P8 03 presentationP8 03 presentation
P8 03 presentation
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmique
 
Graphics card as computation engine
Graphics card as computation engineGraphics card as computation engine
Graphics card as computation engine
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
 

Destacado

Traitement des données massives (INF442, A3)
Traitement des données massives (INF442, A3)Traitement des données massives (INF442, A3)
Traitement des données massives (INF442, A3)Frank Nielsen
 
Classification with mixtures of curved Mahalanobis metrics
Classification with mixtures of curved Mahalanobis metricsClassification with mixtures of curved Mahalanobis metrics
Classification with mixtures of curved Mahalanobis metricsFrank Nielsen
 
Traitement massif des données 2016
Traitement massif des données 2016Traitement massif des données 2016
Traitement massif des données 2016Frank Nielsen
 
Traitement des données massives (INF442, A5)
Traitement des données massives (INF442, A5)Traitement des données massives (INF442, A5)
Traitement des données massives (INF442, A5)Frank Nielsen
 
Traitement des données massives (INF442, A7)
Traitement des données massives (INF442, A7)Traitement des données massives (INF442, A7)
Traitement des données massives (INF442, A7)Frank Nielsen
 
Traitement des données massives (INF442, A6)
Traitement des données massives (INF442, A6)Traitement des données massives (INF442, A6)
Traitement des données massives (INF442, A6)Frank Nielsen
 
Computational Information Geometry: A quick review (ICMS)
Computational Information Geometry: A quick review (ICMS)Computational Information Geometry: A quick review (ICMS)
Computational Information Geometry: A quick review (ICMS)Frank Nielsen
 
The dual geometry of Shannon information
The dual geometry of Shannon informationThe dual geometry of Shannon information
The dual geometry of Shannon informationFrank Nielsen
 
Patch Matching with Polynomial Exponential Families and Projective Divergences
Patch Matching with Polynomial Exponential Families and Projective DivergencesPatch Matching with Polynomial Exponential Families and Projective Divergences
Patch Matching with Polynomial Exponential Families and Projective DivergencesFrank Nielsen
 
(ISIA 5) Cours d'algorithmique (1995)
(ISIA 5) Cours d'algorithmique (1995)(ISIA 5) Cours d'algorithmique (1995)
(ISIA 5) Cours d'algorithmique (1995)Frank Nielsen
 
On representing spherical videos (Frank Nielsen, CVPR 2001)
On representing spherical videos (Frank Nielsen, CVPR 2001)On representing spherical videos (Frank Nielsen, CVPR 2001)
On representing spherical videos (Frank Nielsen, CVPR 2001)Frank Nielsen
 
Traitement des données massives (INF442, A1)
Traitement des données massives (INF442, A1)Traitement des données massives (INF442, A1)
Traitement des données massives (INF442, A1)Frank Nielsen
 
Computational Information Geometry for Machine Learning
Computational Information Geometry for Machine LearningComputational Information Geometry for Machine Learning
Computational Information Geometry for Machine LearningFrank Nielsen
 
A series of maximum entropy upper bounds of the differential entropy
A series of maximum entropy upper bounds of the differential entropyA series of maximum entropy upper bounds of the differential entropy
A series of maximum entropy upper bounds of the differential entropyFrank Nielsen
 
Divergence center-based clustering and their applications
Divergence center-based clustering and their applicationsDivergence center-based clustering and their applications
Divergence center-based clustering and their applicationsFrank Nielsen
 

Destacado (15)

Traitement des données massives (INF442, A3)
Traitement des données massives (INF442, A3)Traitement des données massives (INF442, A3)
Traitement des données massives (INF442, A3)
 
Classification with mixtures of curved Mahalanobis metrics
Classification with mixtures of curved Mahalanobis metricsClassification with mixtures of curved Mahalanobis metrics
Classification with mixtures of curved Mahalanobis metrics
 
Traitement massif des données 2016
Traitement massif des données 2016Traitement massif des données 2016
Traitement massif des données 2016
 
Traitement des données massives (INF442, A5)
Traitement des données massives (INF442, A5)Traitement des données massives (INF442, A5)
Traitement des données massives (INF442, A5)
 
Traitement des données massives (INF442, A7)
Traitement des données massives (INF442, A7)Traitement des données massives (INF442, A7)
Traitement des données massives (INF442, A7)
 
Traitement des données massives (INF442, A6)
Traitement des données massives (INF442, A6)Traitement des données massives (INF442, A6)
Traitement des données massives (INF442, A6)
 
Computational Information Geometry: A quick review (ICMS)
Computational Information Geometry: A quick review (ICMS)Computational Information Geometry: A quick review (ICMS)
Computational Information Geometry: A quick review (ICMS)
 
The dual geometry of Shannon information
The dual geometry of Shannon informationThe dual geometry of Shannon information
The dual geometry of Shannon information
 
Patch Matching with Polynomial Exponential Families and Projective Divergences
Patch Matching with Polynomial Exponential Families and Projective DivergencesPatch Matching with Polynomial Exponential Families and Projective Divergences
Patch Matching with Polynomial Exponential Families and Projective Divergences
 
(ISIA 5) Cours d'algorithmique (1995)
(ISIA 5) Cours d'algorithmique (1995)(ISIA 5) Cours d'algorithmique (1995)
(ISIA 5) Cours d'algorithmique (1995)
 
On representing spherical videos (Frank Nielsen, CVPR 2001)
On representing spherical videos (Frank Nielsen, CVPR 2001)On representing spherical videos (Frank Nielsen, CVPR 2001)
On representing spherical videos (Frank Nielsen, CVPR 2001)
 
Traitement des données massives (INF442, A1)
Traitement des données massives (INF442, A1)Traitement des données massives (INF442, A1)
Traitement des données massives (INF442, A1)
 
Computational Information Geometry for Machine Learning
Computational Information Geometry for Machine LearningComputational Information Geometry for Machine Learning
Computational Information Geometry for Machine Learning
 
A series of maximum entropy upper bounds of the differential entropy
A series of maximum entropy upper bounds of the differential entropyA series of maximum entropy upper bounds of the differential entropy
A series of maximum entropy upper bounds of the differential entropy
 
Divergence center-based clustering and their applications
Divergence center-based clustering and their applicationsDivergence center-based clustering and their applications
Divergence center-based clustering and their applications
 

Similar a Traitement des données massives (INF442, A2)

Digital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdfDigital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdfHouBou3
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétudeSana Aroussi
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite Saddem Chikh
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Arthur Lutz
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonMohammed TAMALI
 
Les mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’informationLes mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’informationDany-Jack Mercier
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmiqueAtef MASMOUDI
 
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...Pôle Systematic Paris-Region
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Loic Ortola
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 

Similar a Traitement des données massives (INF442, A2) (20)

Digital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdfDigital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdf
 
C1_AlgoSdd.pdf
C1_AlgoSdd.pdfC1_AlgoSdd.pdf
C1_AlgoSdd.pdf
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Les mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’informationLes mathématiques au service du transport de l’information
Les mathématiques au service du transport de l’information
 
2-Algo.ppt
2-Algo.ppt2-Algo.ppt
2-Algo.ppt
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmique
 
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 

Traitement des données massives (INF442, A2)

  • 1. INF442 : Traitement des donn´ees massives A2 : Le regroupement plat et le regroupement hi´erarchique Frank Nielsen X2013 15 avril 2015
  • 2. Administratif dernier d´epˆot des TDs : le dimanche soir `a 23h59m59s suivant le mercredi du TD ´election du d´el´egu´e de cours : ? ? ? TD1 : ok, f´elicitations ! TD2 commence par l’exercice MPI du TD1. tutorat langage C++ mis en place par la DE. Deux cr´eneaux : le mardi et le jeudi de 18h `a 20h (Ivan Ustinov) Voir les planches du memento C++ sous moodle Rassurez-vous, TD 3 (d´etecteur de pourriels) et TD 4 (chiffrement de Hill) sont bien moins copieux !
  • 3. Projet informatique responsable PIs : Claudia D’Ambrosio dambrosio@lix.polytechnique.fr 3 choix pour le 20 avril 2015 PI valid´e le 23 avril 2015 Date de remise sous Moodle : ≤ 22 mai 2015 Soutenance PI : entre le 1er juin et le 12 juin 2015 Sujets/difficult´es (* : facile , ** : moyen, *** : difficile) : 442-1 * Lancer de rayon (image de synth`ese) S. Redon 442-2 * PageRank (matrices) P.L. Poirion 442-3 ** CASP : Assessment Protein Structure Prediction A. H´eliou & P. Chassignet 442-4 ** Graphes & arbres recouvrants (most vital edge) S. Toubaline 442-5 *** D´etecteur de Viola Jones (vision) J.-B. Bordes 442-6 *** Repliement des prot´eines (biologie) P. Chassignet 442-7 ? Projet au choix, sujet `a r´ediger et valider ? 442-7 : Projet au choix en C++ (sans MPI) ´egalement possible.
  • 4.
  • 5. HPC : quelques cas pour le Super-Computing (SC) HPC = on recherche l’ efficacit´e ! Utiliser des mod`eles pour de la simulation parce que sinon c’est trop difficile `a construire (souffleries) trop cher `a construire (crash d’avion/voiture) trop lent `a attendre (´evolution du climat, galaxies) trop dangereux (armes, drogues, pollutions, ´epid´emies) Avoir des r´esultats rapides voire en ligne on-line, incremental : valeur temporelle du r´esultat (m´et´eo) ˆetre le premier `a avoir le r´esultat (bourse, trading HFT) ˆetre le premier `a avoir “une analyse” (incluant le coˆut de d´evelopement) Donn´ees massives, le Big Data : analyse du g´enome/d’une famille de g´enomes recherche d’intelligence extraterrestre (SETI)
  • 6. Acc´el´eration, efficacit´e et scalabilit´e tseq : temps ´ecoul´e par le programme s´equentiel tP : ... par programme parall`ele sur P proc. t1 : ... par le programme parall`ele ex´ecut´e en s´equentiel, P = 1 bien sˆur, t1 ≥ tseq sinon on aurait un meilleur algo. s´equentiel Acc´el´eration : speedup(P) = tseq tP , souvent tseq tP t1 tP Efficacit´e : e(P) = speedup(P) P = tseq P×tP par rapport au speed-up lin´eaire, e(P) = 1 ⇔ tP = tseq P Speed-up, efficiency
  • 7. Loi d’Amdahl (1967) : un frein au parall´elisme ? gain de performance id´eal : α = fraction du code parall`elisable αseq = fraction du code non-parall`elisable avec αseq + α = 1 speedup(P) = t1 tn = (αseq + α )t1 (αseq + α P )t1 = 1 αseq + α P lim P→∞ speedup(P) = 1 αseq = 1 1 − α ⇒ acc´el´eration born´ee par la fraction de code αseq non-parall`elisable (celle qui est intrins´equement s´equentielle)
  • 8. Loi d’Amdahl : comportement asymptotique 0 2 4 6 8 10 12 14 16 18 20 1 4 16 64 256 1024 4096 16384 65536 speed−up nombre de processeurs (P) 0.75 0.9 0.95
  • 9. Loi d’Amdahl : un exemple visuel pour concr´etiser αseq = 20% et donc α = 80% Temps P = 1 P=2 P=4 P=8 S = 1 S = 5 3 S = 2 5 S = 10 3 S = 5 P → ∞ seq par ... lim P→∞ speedup(P) = 1 αseq =⇒ speedup ≤ ×5 Est-ce alors int´eressant d’avoir des grands clusters de machines ?
  • 10. Loi de Gustafson : scale speed-up, `a la rescousse ! Simulation : taille des mailles d’une grille 2D/3D = fonction de P Vid´eo : SD, HD, 4K, 8K, etc. Concept = Charge de travail (workload) grandit lin´eairement avec P n n’est pas fix´e ! (= cas d’Amdahl) t1(P) = αseqtP + P × (α × tP) speedupGustafson(P) = αseq + P × (1 − αseq) Gustafson = parall´elisme de donn´ees .
  • 11. Loi de Gustafson : un exemple visuel Loi de Gustafson : speedup(P) = αseq + P × α . scale speed-up P = 1 P = 2 P = 4 P = 8 n 2n 4n 8n temps la taille des donn´ees n augmente seq par speedup(P) = 0.2 + 0.8 × P Parfois, en pratique, on obtient un speed-up super-lin´eaire (hyper-lin´eaire), qui s’explique par le cache hi´erarchique des donn´ees Pensez au cheminement complexe des donn´ees vers le processeur dans le mat´eriel !
  • 12. Comparaison des lois d’Amdahl et de Gustafson Amdahl : tP est une fonction de (t1, α , P) Gustafson : t1 est une fonction de (tP , α , P) efficacit´e(P) = acc´el´eration(P) P efficacit´e asymptotique d’Amdahl : limP→∞ eAmdahl(P) = 0. Acc´el´eration toujours born´ee . efficacit´e asymptotique de Gustafson : limP→∞ eGustafson(P) = α . Acc´el´eration non-born´ee asymptotiquement. ... pas de contradiction car αseq de Gustafson = αseq d’Amdahl.
  • 13. Loi de Moore (1975) En fait, une loi empirique , une conjecture... que l’industrie essaye de satisfaire! nombre de transistors des processeurs double tous les 18 mois
  • 14. Cluster de machines : une architecture `a m´emoire distribu´ee espace m´emoire local associ´e `a chaque processeur processeurs connect´e par un r´eseau d’interconnexion acc`es m´emoire aux autres processeurs explicite par ´echanges de messages sur le r´eseau le r´eseau d’interconnexion d´etermine la vitesse d’acc`es aux donn´ees caract´eristiques du r´eseau : transmission avec mod`ele de coˆut α + τ × Longueur(message) : latence : temps pour initier une communication (α) bande passante : vitesse de transfert des donn´ees (τ) topologie : architectures physique (mat´eriel) et logique (utilis´e par les algorithmes //)
  • 15. Processus Les syst`emes d’exploitation modernes sont multi-tˆaches : plusieurs applications non-bloquantes peuvent tourner en “mˆeme temps” (time-slicing). un seul processus en cours d’ex´ecution sur le CPU `a un instant donn´e, un ordonnanceur de tˆaches qui alloue les processus aux CPUs/cœurs, ´etat d’un processus : en cours d’ex´ecution, prˆet en attente de CPU, bloqu´e (suspendu/attente de r´eveil). Cadre th´eorique : un processus tourne sur un processeur (mono-cœur) qui constitue un nœud du cluster. P/Proc. (= processus, = processeur)
  • 16. Tˆaches (jobs) sous UNIX [france ~]$ sleep 10000 & [1] 12027 [france ~]$ sleep 15000 & [2] 12065 [france ~]$ jobs [1]- Running sleep 10000 & [2]+ Running sleep 15000 & [france ~]$ kill %1 [1]- Terminated sleep 10000 [france ~]$ fg %2 sleep 15000 On suspend une tˆache avec Ctrl-Z , et on la fait passer dans le fond avec bg % (background) Une tˆache peut lancer plusieurs processus (souvent c’est un seul)
  • 17. Tˆaches (jobs) sous UNIX : tuer une tˆache [france ~]$ ps PID TTY TIME CMD 10241 pts /0 00:00:00 bash 12167 pts /0 00:00:00 ps [france ~]$ sleep 10000 & [1] 12169 [france ~]$ ps -F UID PID PPID C SZ RSS PSR STIME TTY TIME CMD 11234 10241 10240 0 1236 1456 6 10:08 pts /0 00:00:00 -bash 11234 12169 10241 0 953 472 1 10:50 pts /0 00:00:00 sleep 10000 11234 12170 10241 0 1132 900 1 10:50 pts /0 00:00:00 ps -F [france ~]$ kill 12169 [1]+ Terminated sleep 10000
  • 18. Programmer avec la Message Passing Interface (MPI) Multiple Program Multiple Data : MPMD Single Program Multiple Data : SPMD Taxonomie de Flynn (1972). SPMD (GPU), MPMD (Playstation R 3).
  • 19. MPI : le standard/la biblioth´eque Outre les calculs locaux sur chaque processus, on a aussi : des mouvements de donn´ees via des envois et r´eceptions de messages (broadcast, scatter, gather, all-to-all, etc.), de la synchronisation (barri`ere o`u tous les processus s’attendent avant de pouvoir continuer), du calcul global (comme des op´erations de sommes cumul´ees, reduce et scan ou parallel prefix).
  • 20. MPI : Les communications collectives usuelles Concernent tous les processus d’un groupe de communication (souvent WORLD) diffusion broadcast Mi M1 M2 M3 M M M M M diffusion personnalis´ee scatter M1 M2 M3 rassemblement gather Mi M1 M2 M3 2 3 1 r´eduction reduce 2 3 1 6 processus appelant AVANT APR`ES P0 P1 P2 P3 message messages personnalis´es M1, M2, M3 `a envoyer Mi messages personnalis´es M1, M2, M3 re¸cus
  • 21. MPI : Les communications collectives un `a tous (one-to-all) : La diffusion, Broadcast : MPI Bcast, message entier La difusion personnalis´ee, Scatter : MPI Scatter, message partitionn´e en morceaux tous `a un (all-to-one) : La r´eduction, Reduce : MPI Reduce, op´eration comme MPI SUM, etc. Le rassemblement, Gather : MPI Gather, assemble le message `a partir des messages par morceaux tous `a tous (all-to-all, total exchange), le comm´erage : MPI Alltoall
  • 22. MPI : les deux op´erations de base send et receive Communications bloquantes send(&data, n, Pdest) : Envoie n donn´ees point´ees par &data au processeur Pdest receive(&data,n, Psrc) : Re¸coit n donn´ees `a l’adresse point´ee par &data du processeur Psrc Que se passe t’il dans ce petit exemple ? P0 P1... a=442; send(&a, 1, P1); a=0; ... receive(&a, 1, P0); cout << a << endl;
  • 23. Communications bloquantes (non-bufferis´ees) ⇒ provoque de l’attente (idling) Envoyeur ou receveur doivent s’attendre mutuellement (hand-shaking).
  • 24. MPI Init(&argc ,& argv ) ; MPI Comm size (MPI COMM WORLD,&numprocs ) ; MPI Comm rank(MPI COMM WORLD,&myid ) ; tag =442; source =0; d e s t i n a t i o n =1; count =1; i f ( myid == source ) { b u f f e r =2015; MPI Send(& buffer , count , MPI INT , d es t i n a t i on , tag , MPI COMM WORLD) ; p r i n t f ( ”Le p r oces s eu r %d a envoye %dn” , myid , b u f f e r ) ; } i f ( myid == d e s t i n a t i o n ) { MPI Recv(& buffer , count , MPI INT , source , tag , MPI COMM WORLD,& s t a t u s ) ; p r i n t f ( ”Le p r oc e s s e u r %d a recu %dn” , myid , b u f f e r ) ; }
  • 25. . . . tag =442; source =0; d e s t i n a t i o n =1; count =1; i f ( myid == source ) { b u f f e r =2015; MPI Send(& buffer , count , MPI INT , d es t i n a t i on , tag , MPI COMM WORLD) ; p r i n t f ( ”Le p r oces s eu r %d a envoye %dn” , myid , b u f f e r ) ; } i f ( myid == d e s t i n a t i o n ) { MPI Recv(& buffer , count , MPI INT , source , tag , MPI COMM WORLD,& s t a t u s ) ; p r i n t f ( ”Le p r oc e s s e u r %d a recu %dn” , myid , b u f f e r ) ; } . . . Le processeur 0 a envoye 2015 Le processeur 1 a recu 2015
  • 26. Minimiser les temps d’attente Pour des communications bloquantes, on cherche donc `a minimiser le temps d’attente (on verra plus tard l’´equilibrage de charge, le load balancing).
  • 27. Temps d’attente pour le receveur Receveur prˆet avant l’envoyeur (communications bloquantes)
  • 28. MPI : les situations de blocages (deadlocks) Que se passe t’il dans cet exemple ? P0 P1 send(&a, 1, P1); receive(&b, 1, P1); send(&a, 1, P0); receive(&b, 1, P0); Envoyeur P0 attend le “OK pour envoi” de P1 Envoyeur P1 attend le “OK pour envoi” de P0 C¸a bloque. On est en situation de deadlock ! (Ctrl-C pour tuer le programme...) Programmer avec MPI peut-ˆetre complexe `a d´eboguer
  • 29. MPI : les blocages (deadlocks) Les communications bloquantes sont n´ecessaires pour assurer la consistence (s´emantique) des programmes mais font apparaˆıtre des situations ind´esirables de blocage. Pour le send, on peut pr´e-allouer un espace m´emoire “buffer donn´ees” (Data buffer, DB) `a chaque processus, puis envoyer les donn´ees en deux temps : Envoi sur le Data Buffer DB, Sur le processeur receveur, recopie le DB `a l’endroit &data, Implant´e soit mat´eriellement soit par un protocole logiciel. N´eanmoins, il subsiste toujours une situation de blocage lorsque le buffer de donn´ees DB devient plein
  • 30. MPI : les blocages (deadlocks) Mˆeme si on g`ere bien les appels send, le probl`eme du deadlock subsiste. Le probl`eme des receive... P0 P1 receive(&a, 1, P1); send(&b, 1, P1); receive(&a, 1, P0); send(&b, 1, P0); ⇒ blocage
  • 31. MPI : Send/Receive non-bloquantes et non-bufferis´ees Comment envoyer/recevoir des messages avec des communications non-bloquantes... L’envoyeur poste un message “Demande d’envoi” (pending message) et continue l’ex´ecution de son programme, Le receveur poste un “OK pour envoi”, et le transfert de donn´ees s’effectue, Quand le transfert de donn´ees est fini, un check status indique qu’on peut toucher aux donn´ees sans danger ⇒ communications non-bloquantes
  • 32. commnonbloq442.cpp MPI Status s t a t u s ; MPI Request r eq u es t ; MPI Init(&argc ,& argv ) ; MPI Comm size (MPI COMM WORLD,&numprocs ) ; MPI Comm rank(MPI COMM WORLD,&myid ) ; tag =442; source =0; d e s t i n a t i o n =1; count =1; r e q u e s t=MPI REQUEST NULL ; i f ( myid == source ) { b u f f e r =2015; MPI Isend(& buffer , count , MPI INT , d es t i n a t i on , tag , MPI COMM WORLD,& r e q u e s t ) ; } i f ( myid == d e s t i n a t i o n ) { MPI Irecv(& buffer , count , MPI INT , source , tag , MPI COMM WORLD,& r e q u e s t ) ; }
  • 33. MPI Wait(&request ,& s t a t u s ) ; p r i n t f ( ” [ proc %d ] s t a t u s de MPI WAIT : %dn” , myid , s t a t u s ) ; i f ( myid == source ) { p r i n t f ( ”Le p r oces s eu r %d a envoye %dn” , myid , b u f f e r ) ; } i f ( myid == d e s t i n a t i o n ) { p r i n t f ( ”Le p r oc e s s e u r %d a bien recu %dn” , myid , b u f f e r ) ; } attente avec MPI_WAIT ... attente avec MPI_WAIT ... [proc 0] status de MPI_WAIT : 0 Le processeur 0 a envoye 2015 [proc 1] status de MPI_WAIT : 0 Le processeur 1 a bien recu 2015
  • 34. MPI : Les six routines standards sont... proc´edures , types de donn´ees et constantes sont pr´efix´ees par MPI (fichier mpi.h) 100+ proc´edures dont les six principales sont : MPI Init Initialisation de la biblioth`eque MPI Finalize Termine l’utilisation de MPI MPI Comm size Donne le nombre de processus MPI Comm rank ´Etiquette du processus appelant MPI Send Envoi un message (bloquant) MPI Recv Re¸coit un message (bloquant) Ces proc´edures retournent MPI SUCCESS en cas de succ`es, sinon un code d’erreur.
  • 35. Quelques hypoth`eses sur la concurrence le processeur (ou PE) peut effectuer plusieurs “choses” en mˆeme temps Par exemple, on peut supposer MPI IRecv(), non-bloquant MPI ISend(), non-bloquant + calcul local il faut donc que ces 3 op´erations soient ind´ependantes ! donc on ne peut pas envoyer le r´esultat du calcul on ne peut pas forwarder = envoyer ce que l’on re¸coit en pseudo-code, on note les activit´es concurrentes par || (une double barre) Activit´e1||Activit´e2||Activit´e3
  • 36. MPI : Les types de donn´ees enMPI Ce qu’on envoie/re¸coˆıt... MPI_Commande(&buffer,count,MPI_INT, ...) Type MPI Type dans le langage C MPI CHAR signed char MPI SHORT signed short int MPI INT signed int MPI LONG signed long int MPI UNSIGNED CHAR unsigned char MPI UNSIGNED SHORT unsigned short int MPI UNSIGNED unsigned int MPI UNSIGNED LONG unsigned long int MPI FLOAT float MPI DOUBLE double MPI LONG DOUBLE long double MPI BYTE MPI PACKED
  • 37. MPI : La primitive send https://www.open-mpi.org/doc/v1.4/man3/MPI_Send.3.php Syntaxe en C : #i n c l u d e <mpi . h> i n t MPI Send ( void ∗buf , i n t count , MPI Datatype datatype , i n t dest , i n t tag , MPI Comm comm) Syntaxe en C++ (plus mis `a jour depuis MPI-2) : #i n c l u d e <mpi . h> void Comm : : Send ( const void ∗ buf , i n t count , const Datatype& datatype , i n t dest , i n t tag ) const tag : Message tag (integer), utile pour la filtration et l’appariemment des op´erations send/receive. Par d´efault, tag=0 On utilise la syntaxe d’appel en C du MPI dans nos programmes C++
  • 38. MPI : les communications non-bloquantes (C API) “I” i n t MPI Isend ( void ∗buf , i n t count , MPI Datatype datatype , i n t dest , i n t tag , MPI Comm comm, MPI Request ∗ req ) i n t MPI Irecv ( void ∗buf , i n t count , MPI Datatype datatype , i n t src , i n t tag , MPI Comm comm, MPI Request ∗ req ) L’objet MPI Request est utilis´e dans les routines suivantes : Retourne *flag=1 si l’op´eration *req est finie, 0 sinon i n t MPI Test ( MPI Request ∗req , i n t ∗ flag , MPI Status ∗ s t a t u s ) Attend jusqu’`a ce que l’op´eration associ´ee avec *req soit finie. i n t MPI Wait ( MPI Request ∗req , MPI Status ∗ s t a t u s )
  • 39. MPI : les groupes de communication, communicators D´efini le cadre des op´erations de communication, Chaque processus inclus dans un communicator a un rang associ´e, Par d´efaut, MPI COMM WORLD inclut tous les p processus, rang de 0 `a p − 1, On peut cr´eer des communicators pour des groupes de processus, int MPI Comm size(MPI Comm comm, int *size) et int MPI Comm rank(MPI Comm comm, int *size)
  • 40. Barri`ere de synchronisation : MPI Barrier MPI Barrier : Bloque jusqu’`a temps que tous les processus arrivent `a cette routine = synchronisation ! Barri`ere de synchronisation Barri`ere de synchronisation
  • 41. Mesurer le temps sous MPI : MPI Wtime double start, end; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Barrier(MPI_COMM_WORLD); /* IMPORTANT */ start = MPI_Wtime(); /* faire le calcul ici */ calculINF442(); MPI_Barrier(MPI_COMM_WORLD); /* IMPORTANT */ end = MPI_Wtime(); MPI_Finalize(); if (rank == 0) {cout<< end-start <<endl;} Ou alors utiliser MPI Reduce() pour calculer les temps minima/maxima (et autres statistiques) des processus...
  • 42. MPI : Calcul globaux Reduce C : #i n c l u d e <mpi . h> i n t MPI Reduce ( void ∗ sendbuf , void ∗ recvbuf , i n t count , MPI Datatype datatype , MPI Op op , i n t root , MPI Comm comm) https://www.open-mpi.org/doc/v1.5/man3/MPI_Reduce.3.php Arbre de r´eduction (d´epend de la topologie) (+ 1 2 3 4) (+ (+ 1 2) (+ 3 4))
  • 43. MPI : Reduce, op´erations de calcul pr´ed´efinies Op´erateur binaire associatif et commutatif Nom Signification MPI MAX maximum MPI MIN minimum MPI SUM sum MPI PROD product MPI LAND logical and MPI BAND bit-wise and MPI LOR logical or MPI BOR bit-wise or MPI LXOR logical xor MPI BXOR bit-wise xor MPI MAXLOC max value and location MPI MINLOC min value and location
  • 44. Calcul de la factorielle...factoriellempireduce442.cpp i n t i , moi , nproc s ; i n t nombre , g l o b a l F a c t =−1, l o c a l F a c t ; MPI Init (&argc ,& argv ) ; MPI Comm size (MPI COMM WORLD,& nproc s ) ; MPI Comm rank (MPI COMM WORLD,&moi ) ; nombre=moi+1; // dans l e s arguments , se r a p p e l e r l ’ o r d r e ( source , d e s t i n a t i o n ) MPI Reduce(&nombre ,& globalFac t , 1 , MPI INT ,MPI PROD , 0 ,MPI COMM WORLD) ; i f ( moi==0) { p r i n t f ( ” f a c t o r i e l l e avec re duc e pour %d p r o c e s s u s = %dn” , nprocs , g l o b a l F a c t ) ;} l o c a l F a c t =1; f o r ( i =0; i<nproc s ; i++) { l o c a l F a c t ∗=( i +1);} i f ( moi==0) { p r i n t f ( ” f a c t o r i e l l e l o c a l e : %dn” , l o c a l F a c t ) ;} M P I F i n a l i z e () ;
  • 45. MPI : Les commandes Scan/ Pr´efixe parall`ele i n t MPI Scan ( void ∗ sendbuf , void ∗ recvbuf , i n t count , MPI Datatype datatype , MPI Op op ,MPI Comm comm ) processus P0 P1 P2 P3 entr´ee (vi ) 1 2 3 4 sortie 1 3 (= 1 + 2) 6 (= 1 + 2 + 3) 10 (= 1 + 2 + 3 + 4)
  • 46. P0 P1 P2 P3 a b c d a + b + c + d b c d reduce P0 P1 P2 a0 a1 c0b0 b1 c2a2 b2 c1 scan a0 a0 + a1 a0 + a1 + a2 b0 b0 + b1 b0 + b1 + b2 c0 c0 + c1 c0 + c1 + c2 P0 P1 P2 P3 a b c d a + b + c + d Allreduce a + b + c + d a + b + c + d a + b + c + d
  • 47. Algorithme parall`ele pour les k-moyennes Parallel k-means MPI Frank Nielsen 4.k-moyennes sous MPI A2-47
  • 48. Parall´elisation : propri´et´e de composition du centro¨ıde Soit X et X deux jeux de donn´ees pond´er´es avec leurs sommes des poids totaux W et W (X ∩ X = ∅). Alors on a la r`egle de composition : ¯x(X ∪ X ) = W W + W ¯x(X) + W W + W ¯x(X ) Tr`es utile pour partager le calcul des donn´ees sur plusieurs processeurs... On fait des paquets X1, ..., Xp ´equilibr´es de taille n p Propri´et´e forte de la g´eom´etrie Euclidienne (pas vrai en g´eom´etrie hyperbolique) Frank Nielsen 4.k-moyennes sous MPI A2-48
  • 49. R`egle de composition : preuve ´el´ementaire Prenons X ∩ X = ∅. ¯x(X ∪ X ) = W W + W ¯x(X) + W W + W ¯x(X ) ¯x(X) = 1 |X| x∈X x ¯x(X ∪ X ) = 1 |X| + |X | x∈X x + x ∈X x x∈X x = |X|¯x(X), x ∈X x = |X |¯x(X ) W = |X| et W = |X |, idem pour des poids arbitraires W et W . Frank Nielsen 4.k-moyennes sous MPI A2-49
  • 50. Parall´elisation de l’heuristique de Lloyd Soit p processeurs P0, ..., Pp−1, tous les processeurs lisent leurs n p donn´ees (tient dans la m´emoire vive, RAM). Utilisons la propri´et´e de d´ecomposition des centro¨ıdes : ¯x(X) = p−1 i=0 1 p ¯x(Xp). Un des processeurs, disons P0 s’occupe de l’initialisation des centroides, puis diffuse (broadcast) cette initialisation `a tous les autres processeurs. En MPI, commande MPI Bcast. Chaque processeur Pr s’occupe d’ un paquet de n p donn´ees Xr = {xr n p ...x(r+1) n p −1} en calculant la distance minimale de ses xi aux centres. On met `a jour la fonction de coˆut et on calcule les centro¨ıdes et cardinalit´e ind´ependamment dans chaque paquet : G1(r), ..., Gk (r) avec n1(r) = |G1(r)|, ..., nk (r) = |Gk(r)|. Puis on r´eduit (op´eration reduce) tous les cj (r) et nj (r) en faisant la somme (op´eration d´edi´ee de MPI) : MPI Allreduce On r´ep´ete jusqu’`a convergence (ou lorsque la d´ecroissance de la fonction de coˆut passe sous un seuil donn´e). Frank Nielsen 4.k-moyennes sous MPI A2-50
  • 51. Frank Nielsen 4.k-moyennes sous MPI A2-51
  • 52. Les k-moyennes en MPI : analyse de la complexit´e Algorithme s´equentiel : O(dnks), s : nombre d’it´erations (Lloyd). Les op´erations ´el´ementaires comme Reduce, Bcast, etc. d´ependent de la topologie du r´eseau d’interconnexion . Initialisation des centro¨ıdes par le processeur P0 en temps O(dk) Coˆut total : O dk + Bcast(p, dk) + s dn p + Reduce(p, dk) ∼n>>k,d O dkns p → Facteur d’acc´el´eration (speed-up, rapport du temps s´equentiel sur le temps parall`ele) α = O dkns dkns p = O(p). Philosophie diff´erente de MapReduce (Hadoop) : Autre mod`ele de calcul distribu´e simple. Frank Nielsen 4.k-moyennes sous MPI A2-52
  • 53. Les k-moyennes : Un clustering par partition = clustering plat vs Regroupement hi´erarchique Frank Nielsen 5.Regroupement A2-53
  • 54. Trouver des liens de proximit´e entre les donn´ees mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 Merc 240 D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 Merc 280 C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 Merc 450 SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 Merc 450 SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 Merc 450 SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 Fiat X1 -9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 Porsche 914 -2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 Volvo 142 E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 Frank Nielsen 5.Regroupement A2-54
  • 56. Les sciences du vivant adorent le regroupement hi´erarchique ! Gene expression patterns of breast carcinomas distinguish tumor subclasses with clinical implications http://www.pnas.org/content/98/19/10869.figures-only Frank Nielsen 5.Regroupement A2-56
  • 57. Le regroupement hi´erarchique : reconnaissance de visages Hierarchical Clustering With Prototypes via Minimax Linkage, 2011. Frank Nielsen 5.Regroupement A2-57
  • 58. Le clustering/regroupement hi´erarchique ascendant On part des donn´ees X = {x1, ..., xn} qui sont des feuilles et on fusionne i´erativement au fur et `a mesure les sous-arbres jusqu’`a ne plus qu’avoir un seul arbre. Les feuilles initiales forment une forˆet d’arbres `a une feuille, puis on fait de la fusion d’arbres... Plusieurs crit`eres pour la fusion de deux sous-arbres (dont les sous-ensembles de donn´ees Gi et Gj sont stock´ees dans leurs feuilles). On calcule Δ(Gi , Gj ) la distance entre deux sous-ensembles. strat´egie du saut minimum :ΔSL → Single Linkage (SL) strat´egie du saut maximum (ou diam`etre) : ΔCL → Complete Linkage (CL) strat´egie du saut moyen : ΔGA → Group Average (GA) ⇒ algorithme glouton : Choix it´eratif de la meilleure paire de groupes (avec tie-breaking rule) Frank Nielsen 5.Regroupement A2-58
  • 59. Pour se fixer une id´ee : saut moyen, Single Linkage (SL) Fonction de chaˆınage entre deux groupes Δ(Gi , Gj ) = min xi ∈Gi ,xj ∈Gj D(xi , xj ) o`u D(x, y) est une distance ´el´ementaire . ⇒ regroupement hi´erarchique agglom´eratif avec un saut minimum (nearest-neighbor clustering) Frank Nielsen 5.Regroupement A2-59
  • 60. Quelle distance ´el´ementaire entre deux donn´ees ? On doit toujours avoir bien entendu Δ({xi }, {xj }) = D(xi , xj ). Exemples de distances ´el´ementaires : Distance Euclidienne (L2) : D(p, q) = d i=1(pi − qi )2 Distance de Manhattan (city block, L1) : D1(p, q) = d i=1 |pi − qi | Distance de Minkowski induite par Lp : Dp(p, q) = d i=1 |pi − qi |p 1 p Distance de Mahalanobis : DΣ(p, q) = (p − q) Σ−1(p − q) = D(L p, L q), avec Σ−1 = L L provenant de la factorisation de Cholesky M´etrique, non-m´etrique, distance & similarit´e, etc. Frank Nielsen 5.Regroupement A2-60
  • 61. Le clustering par agglom´eration Hierarchical Cluster Analysis (HCA) : regroupement hi´erarchique Initialiser xi dans un cluster singleton Gi = {xi } Tant qu’il reste au moins deux clusters : Choisir Gi et Gj tel que Δ(Gi , Gj ) soit minimal Fusionner Gi,j = Gi ∪ Gj (ajouter Gi,j et retirer Gi et Gj ) Retourner le dernier nœud comme la racine de l’arbre de fusion ⇒ le r´esultat d’un regroupement hi´erarchique est un arbre binaire appel´e dendrogramme . On fusionne n − 1 fois (les ´etapes de fusion). Diff´erent d’un algorithme de partitionnement comme les k-moyennes : Clustering hi´erarchique = not Clustering plat (par partition) Ici, pas de fonction de coˆut globale `a optimiser mais un algorithme de fusion Frank Nielsen 5.Regroupement A2-61
  • 62. Distance de chaˆınage Δ(Gi, Gj) Single Linkage saut minimum Complete Linkage saut maximum diam`etre Group Average saut moyen Algorithme glouton : arg min i,j=i Δ(Gi , Gj ) ⇒ les groupes Gi et Gj sont voisins r´eciproques ! Gi = PPVG(Gj ) = arg minG∈G Δ(Gj , G). Gj = PPVG(Gi ) = arg minG∈G Δ(Gi , G). PPV = Plus Proche Voisin. G : ensemble des groupes. Frank Nielsen 5.Regroupement A2-62
  • 63. Dessinons un dendrogramme... Par exemple, choisissons la hauteur comme le nombre d’ ´etapes de fusion : I N F 4 4 2 I, N 4, 4 I, N, F 4, 4, 2 I,N,F,4,4,2 feuilles nœuds internes hauteur : nombre de fusions 0 1 2 3 Dendrogramme = Graphique d’un arbre binaire, enracin´e et plong´e dans le plan. Frank Nielsen 5.Regroupement A2-63
  • 64. Autre visualisation de la hi´erarchie par inclusion I N F 4 4 2 I, N 4, 4 I, N, F 4, 4, 2 I,N,F,4,4,2 I N F 4 4 2 nested clusters Frank Nielsen 5.Regroupement A2-64
  • 65. Le clustering hi´erarchique : single linkage (SL) Δ(Gi , Gj ) = min xi ∈Gi ,xj ∈Gj D(xi , xj ) R´epeter tant que toutes les donn´ees xi ne soient pas contenues dans un seul cluster, on fusionne les deux groupes les plus proche. `A chaque instant tous les sous-arbres forment une forˆet (partitition de X). Single linkage → nearest-neighbor clustering S’il existe plus d’une paire de groupes donnant le Δ minimal, on choisit un ordre (lexicographique). Si on fait une permutation sur les donn´ees, on n’obtiendra pas le mˆeme dendrogramme : unicit´e . Probl`eme de chaˆınage (artefact) dans le clustering final Complexit´e : na¨ıf O(n3), algorithme SLINK en O(n2) (1973), temps quadratique et espace lin´eaire en utilisant l’arbre recouvrant de poids minimal (MST : Minimum Spanning Tree, 1969). Frank Nielsen 5.Regroupement A2-65
  • 67. Le clustering hi´erarchique : Complete Linkage Complete linkage (CL) : CLINK in O(n2) (1977) ΔCL(Gi , Gj ) = max xi ∈Gi ,xj ∈Gj D(xi , xj ) , appel´e aussi diam`etre . Probl`eme du diam`etre : si un point artefact (outlier) est tr`es ´eloign´e des autres, la distance inter-groupe devient grande (et n’est pas significative). Complete linkage → furthest-neighbor clustering Frank Nielsen 5.Regroupement A2-67
  • 69. Le clustering hi´erarchique : Average Linkage Average Linkage (AL) : O(n2) (1984) ΔAL(Gi , Gj ) = 1 ni nj xi ∈Gi xj ∈Gj D(xi , xj ) La moyenne de toutes les paires de distance ! Frank Nielsen 5.Regroupement A2-69
  • 72. Crit`ere de fusion de Ward : la variance Variance = somme des distances euclidiennes au carr´e par rapport au centro¨ıde : v(X) = x∈X x − c(X) 2 , c(X) = 1 |X| x∈X x Distance entre clusters (crit`ere de Ward) pour Gi (ni = |Gi |) et Gj (nj = |Gj |) : Δ(Gi , Gj ) = v(Gi ∪ Gj ) − (v(Gi ) + v(Gj ))) = ni nj ni + nj c(Gi ) − c(Gj ) 2 ≥ 0 Δ({xi }, {xj }) = D(xi , xj ) = xi − xj 2 Quand on fusionne deux groupes, la variance ne peut pas diminuer ! Quand on rajoute des clusters, la somme pond´er´ee des variances diminue Δ(Gi , Gj ) = k-moyennes(Gi ∪ Gj) − (k-moyennes(Gi ) + k-moyennes(Gj )) Frank Nielsen 5.Regroupement A2-72
  • 73. FerrariDino HondaCivic ToyotaCorolla Fiat128 FiatX1−9 MazdaRX4 MazdaRX4Wag Merc280 Merc280C Merc240D LotusEuropa Merc230 Volvo142E Datsun710 ToyotaCorona Porsche914−2 MaseratiBora Hornet4Drive Valiant Merc450SLC Merc450SE Merc450SL DodgeChallenger AMCJavelin ChryslerImperial CadillacFleetwood LincolnContinental FordPanteraL Duster360 CamaroZ28 HornetSportabout PontiacFirebird 050100150200250 Regroupement hierarchique (distance moyenne) INF442 (voitures) x hauteur HondaCivic ToyotaCorolla Fiat128 FiatX1−9 Merc240D LotusEuropa Merc230 Volvo142E Datsun710 ToyotaCorona Porsche914−2 FerrariDino MazdaRX4 MazdaRX4Wag Merc280 Merc280C Hornet4Drive Valiant Merc450SLC Merc450SE Merc450SL DodgeChallenger AMCJavelin MaseratiBora FordPanteraL Duster360 CamaroZ28 ChryslerImperial CadillacFleetwood LincolnContinental HornetSportabout PontiacFirebird 05001000150020002500 Regroupement hierarchique (Ward) INF442 (voitures) x hauteur Average Group Crit`ere de Ward Frank Nielsen 5.Regroupement A2-73
  • 74. Le clustering descendant hi´erarchique par division Version top-down : on part d’un cluster contenant toutes les donn´ees X et on divise r´ecursivement jusqu’`a temps qu’on obtienne les n feuilles qui contiennent les donn´ees individuelles. Pour casser un cluster en deux, on utilise un algorithme de clustering par partitionnement pour k = 2 (comme celui des k-moyennes par exemple) En g´en´eral, plus coˆuteux qu’un regroupement hi´erarchique agglom´eratif (bottom-top) Frank Nielsen 5.Regroupement A2-74
  • 75. Dendrogramme : obtenir des partitions `a partir du dendrogramme Pour k ∈ [n] = {1, ..., n}, on peut extraire des partitions en k-sous-ensembles de X. 877511973859339482263114311821864425204048399392158353212893053273817622369162764350599690413634496170685655951424672835998474755458365814598465272379110088129697477166607879577710134280266482 0.00.51.01.52.02.5 Regroupement hierarchique INF442 x hauteur Frank Nielsen 5.Regroupement A2-75
  • 76. Convertir un clustering hi´erarchique en une partition Si on ne choisit pas k mais une valeur de seuillage... Parcourir r´ecursivement l’arbre et on arrˆete la r´ecursivit´e quand Δ(nœud) = Δ(nœudfils gauche, nœudfils droit) ≤ seuil saut maximum (CL, diam`etre) : les clusters ont un diam`etre ≤ seuil (hauteur constante) chaˆınage de Ward : les clusters ont une variance ≤ seuil (hauteur pas constante car inversions) Δ < Δ∗ Δ < Δ∗ Frank Nielsen 5.Regroupement A2-76
  • 77. Convertir un clustering hi´erarchique en une partition Si on veut choisir k... Clustering hi´erarchique → Clustering plat (partition) On choisit une hauteur pour trouver une partition en k clusters Meilleure hauteur par Programmation Dynamique. Meilleure hauteur pour T (X) `a k sous-ensembles : Fit(T = (L, R), k) = min k1,k2 k1+k2=k Fit(L, k1) + Fit(R, k2) Pour les k-moyennes (clustering plat, NP-dur en g´en´eral) on obtient une k-partition optimale `a partir d’un clustering hierarchique (facile `a calculer, SL) sous l’hypoth`ese de satisfaire un crit`ere de s´eparabilit´e. Frank Nielsen 5.Regroupement A2-77
  • 78. Distances : m´etriques et ultra-m´etriques Une distance d(·, ·) est : m´etrique si elle satisfait les axiomes : d(x, y) ≥ 0 avec ´egalit´e pour x = y seulement d(x, y) = d(y, x) sym´etrie d(x, y) ≤ d(x, z) + d(z, y), in´egalit´e triangulaire ultra-m´etrique si elle satisfait les axiomes : d(x, y) ≥ 0 avec ´egalit´e pour x = y seulement d(x, y) = d(y, x) sym´etrie d(x, y) ≤ max(d(x, z), d(z, y)) Frank Nielsen 5.Regroupement A2-78
  • 79. Distance et ´evolution (horloge) Dans les arbres phylog´en´etiques, la distance entre deux esp`eces impose des restrictions sur la fonction distance. Arbre additif (additive tree) : poids sur chaque arˆete tel que pour chaque paire de feuilles, la distance est la somme des distances des arˆetes les reliant. Arbre ultram´etrique : distances entre deux feuilles Gi et Gj et leur ancˆetre commun Gk sont ´egales : di,k = dj,k. hk = 1 2di,j (hauteur) correspond au temps ´ecoul´e permet de d´efinir une horloge globale sur l’axe vertical Frank Nielsen 5.Regroupement A2-79
  • 80. Dendrogrammes et arbres phylog´en´etiques Frank Nielsen 5.Regroupement A2-80
  • 81. Regroupement hi´erarchique avec l’algorithme UPGMA UPGMA : Unweighted Pair Group Method using arithmetic Averages Clustering hi´erarchique avec la distance de chaˆınage Average Linkage (AL) : Δ(Gi , Gj ) = 1 ni nj xi ∈Gi xj ∈Gj D(xi , xj ) = Δi,j UPGMA garantie de produire un arbre ultram´etrique Frank Nielsen 5.Regroupement A2-81
  • 82. Regroupement hi´erarchique par UPGMA Initialise xi a son cluster Ci et positionne ce nœud `a hauteur t = 0. Tant qu’il reste plus de deux clusters : Trouver les clusters Ci et Cj qui ont la distance Δi,j minimale D´efinir un nouveau cluster Ck = Ci ∪ Cj et calculer la distance Δk,l pour tout l Ajouter un nœud k avec les fils Ci et Cj et positionner le `a hauteur tk = 1 2 Δi,j Retirer Ci et Cj de la liste des clusters, et continuer jusqu’`a temps d’avoir deux clusters Pour les deux derniers clusters Ci , and Cj , placer la racine `a hauteur 1 2Δ(Ci , Cj ) Frank Nielsen 5.Regroupement A2-82
  • 83. Regroupement hi´erarchique par UPGMA Th´eor`eme Si les donn´ees sur les distances sont ultram´etriques (v´erifiable sur la matrice des distances), alors il existe un unique arbre ultram´etrique et l’algorithme UPGMA le construit. ... malheureusement les donn´ees (bruit´ees) ne sont pas ultram´etriques en g´en´eral ! Tester si une matrice de distances est ultram´etrique : na¨ıvement en O(n3). Frank Nielsen 5.Regroupement A2-83
  • 84. Dissimilarit´e, similarit´e et inversions similarit´e entre deux groupes : S(Xi , Xj ) = −Δ(Xi , Xj ). Ainsi si on a Δ(Gi , Gk) > Δ(Gi , Gj ) alors on a l’ordre inverse S < S(Gi , Gj ) pour un chemin du dendrogramme d’une feuille `a la racine, s´equence de fusion monotone ssi. la similarit´e d´ecroit quand on se rapproche de la racine : S1 ≥ S2 ≥ ... ≥ Sracine. Autrement dit, la valeur du crit`ere de fusion augmente quand on va vers la racine. non-monotone s’il existe au moins une inversion Si < Si+1 sur un chemin du dendrogramme. Cela veut dire que deux groupes peuvent ˆetre plus similaire `a l’´etape i + 1 que les deux groupes fusionn´es `a l’´etape i. crit`ere de Ward ne garantie pas la monotonie (inversions). Par contre, Single Linkage, Complete Linkage et Average Linkage garantissent la monotonie. Frank Nielsen 5.Regroupement A2-84
  • 85. Inversion possible pour le crit`ere de Ward x3x2x1 S({x1, x2}, {x3}) x1 x2 x3 S({x1}, {x2}) Inversion car un nœud parent se trouve “plus bas” que les deux nœuds fils. Frank Nielsen 5.Regroupement A2-85
  • 86. C++ : Contenu des m´ethodes `a l’ext´erieur des classes #i n c l u d e <iostream > using namespace std ; c l a s s CEntier { p u b l i c : i n t v a l ; CEntier ( i n t v ) { t h i s −>v a l=v ;} void ajoute ( i n t v2 ) ; }; // D´efinition `a l’ext´erieur de class void CEntier : : ajoute ( i n t v2 ) { v a l+=v2 ;} i n t main () { CEntier ∗e1=new CEntier (5) ; e1−>ajoute (8) ; cout<<e1−>val <<endl ; r e t u r n 0;} Frank Nielsen 5.Regroupement A2-86
  • 87. Structures de donn´ees abstraites D´efini une interface pour acc´eder aux donn´ees. Peut-ˆetre cod´e du plusieurs mani`eres diff´erentes. les piles (Last In First Out, LIFO) les files (First In First Out,FIFO) les arbres les graphes les matrices creuses etc. Par exemple, les piles et files peuvent ˆetre implant´e soit avec des tableaux soit avec des listes chaˆın´ees. Frank Nielsen 5.Regroupement A2-87
  • 88. c l a s s CNoeud{C++ : // la classe nœud p u b l i c : CNoeud ∗gauche , ∗ d r o i t ; i n t v a l ; p u b l i c : CNoeud( i n t v ) { t h i s −>v a l=v ; gauche=d r o i t=NULL;} CNoeud( i n t val , CNoeud∗ Arbre1 , CNoeud∗ Arbre2 ) { t h i s −>v a l=v a l ; gauche=Arbre1 ; d r o i t=Arbre2 ;} s t r i n g P r i n t () { char b u f f e r [ 2 0 ] ; s t r i n g s v a l=s t r i n g ( i t o a ( val , buffer ,10) ) ; s t r i n g sgauche , s d r o i t ; i f ( gauche==NULL) sgauche=” n i l ” ; e l s e sgauche=gauche−>P r i n t () ; i f ( d r o i t==NULL) s d r o i t=” n i l ” ; e l s e s d r o i t=d r oi t −>P r i n t () ; r e t u r n ” ( ”+s v a l+” , ”+sgauche+” , ”+s d r o i t+” ) ” ; }}; Frank Nielsen 5.Regroupement A2-88
  • 89. . . . CNoeud ∗ Arbre442=new CNoeud (3 , new CNoeud (2) , new CNoeud (1 , new CNoeud (4) ,new CNoeud (5) ) ) ; cout<<Arbre442−>P r i n t ()<<endl ; Ex´ecution donne `a la console : (3,(2,nil,nil),(1,(4,nil,nil),(5,nil,nil))) Frank Nielsen 5.Regroupement A2-89
  • 90. C++ : r´ecup´eration de la m´emoire tilde ∼, un seul destructeur par classe C++ ˜CNoeud () { i f ( gauche!=NULL) d e l e t e gauche ; i f ( d r o i t !=NULL) d e l e t e d r o i t ; cerr <<” d e l e t e ”<<val <<endl ; } (3,(2,nil,nil),(1,(4,nil,nil),(5,nil,nil))) delete 2 delete 4 delete 5 delete 1 delete 3 Frank Nielsen 5.Regroupement A2-90
  • 91. Diff´erences principales entre C++ et Java null en Java et NULL en C++ this.variable en Java/C++ (r´ef´erence) et this->variable en C++ (pointeur) class INF442{} en Java et class INF442{}; en C++ On peut rajouter le corps des m´ethodes en C++ apr`es sa d´eclaration dans la classe : void CNoeud::Addition(int v) ajouter un destructeur dans la classe en C++ array.length en Java. On utilise la classe vector de la STL C++ et .size() import en Java et include en C++ (STL) etc. En C++ dans les classes, mettre explicitement public (sinon on est private par d´efaut) Frank Nielsen 5.Regroupement A2-91
  • 92. R´esum´e A2 HPC : acc´el´eration, loi d’Amdahl et loi de Gustafson MPI : les communications bloquantes, les situations de blocage, les communications non-bloquantes, les barri`eres de synchronisation les calculs collaboratifs : r´eduction (somme, reduce & Allreduce), et les op´erations de pr´efixe parall`ele (scan) Science des donn´ees : les k-moyennes avec MPI regroupement hi´erarchique vs. regroupement plat. arbre ultram´etrique et chaˆınage par saut moyen (average link). C++ : les classes objets. Lire le memento C++ sur la page Moodle ! Pour la prochaine fois : lire le chapitre 8 et relire le chapitre 2 du polycopi´e Frank Nielsen 5.Regroupement A2-92