INF442 : Traitement des donn´ees massives
A2 : Le regroupement plat et le regroupement hi´erarchique
Frank Nielsen
X2013
1...
Administratif
dernier d´epˆot des TDs : le dimanche soir `a 23h59m59s suivant le
mercredi du TD
´election du d´el´egu´e de...
Projet informatique
responsable PIs : Claudia D’Ambrosio
dambrosio@lix.polytechnique.fr
3 choix pour le 20 avril 2015
PI v...
HPC : quelques cas pour le Super-Computing (SC)
HPC = on recherche l’ efficacit´e !
Utiliser des mod`eles pour de la simulat...
Acc´el´eration, efficacit´e et scalabilit´e
tseq : temps ´ecoul´e par le programme s´equentiel
tP : ... par programme parall...
Loi d’Amdahl (1967) : un frein au parall´elisme ?
gain de performance id´eal :
α = fraction du code parall`elisable
αseq =...
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 d...
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
...
Loi de Gustafson : scale speed-up, `a la rescousse !
Simulation : taille des mailles d’une grille 2D/3D = fonction de P
Vi...
Loi de Gustafson : un exemple visuel
Loi de Gustafson : speedup(P) = αseq + P × α . scale speed-up
P = 1 P = 2 P = 4 P = 8...
Comparaison des lois d’Amdahl et de Gustafson
Amdahl : tP est une fonction de (t1, α , P)
Gustafson : t1 est une fonction ...
Loi de Moore (1975)
En fait, une loi empirique , une conjecture... que l’industrie essaye de
satisfaire!
nombre de transis...
Cluster de machines : une architecture `a m´emoire
distribu´ee
espace m´emoire local associ´e `a chaque processeur
process...
Processus
Les syst`emes d’exploitation modernes sont multi-tˆaches : plusieurs
applications non-bloquantes peuvent tourner...
Tˆaches (jobs) sous UNIX
[france ~]$ sleep 10000 &
[1] 12027
[france ~]$ sleep 15000 &
[2] 12065
[france ~]$ jobs
[1]- Run...
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:0...
Programmer avec la Message Passing Interface (MPI)
Multiple Program Multiple Data : MPMD
Single Program Multiple Data : SP...
MPI : le standard/la biblioth´eque
Outre les calculs locaux sur chaque processus, on a aussi :
des mouvements de donn´ees ...
MPI : Les communications collectives usuelles
Concernent tous les processus d’un groupe de communication (souvent
WORLD)
d...
MPI : Les communications collectives
un `a tous (one-to-all) :
La diffusion, Broadcast : MPI Bcast, message entier
La difus...
MPI : les deux op´erations de base send et receive
Communications bloquantes
send(&data, n, Pdest) :
Envoie n donn´ees poi...
Communications bloquantes (non-bufferis´ees)
⇒ provoque de l’attente (idling)
Envoyeur ou receveur doivent s’attendre mutue...
MPI Init(&argc ,& argv ) ;
MPI Comm size (MPI COMM WORLD,&numprocs ) ;
MPI Comm rank(MPI COMM WORLD,&myid ) ;
tag =442; so...
. . .
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(& buff...
Minimiser les temps d’attente
Pour des communications bloquantes, on cherche donc `a minimiser le temps
d’attente (on verr...
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...
MPI : les blocages (deadlocks)
Les communications bloquantes sont n´ecessaires pour assurer la
consistence (s´emantique) d...
MPI : les blocages (deadlocks)
Mˆeme si on g`ere bien les appels send, le probl`eme du deadlock subsiste.
Le probl`eme des...
MPI : Send/Receive non-bloquantes et non-bufferis´ees
Comment envoyer/recevoir des messages avec des communications
non-blo...
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 W...
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...
MPI : Les six routines standards sont...
proc´edures , types de donn´ees et constantes sont pr´efix´ees par MPI
(fichier mpi...
Quelques hypoth`eses sur la concurrence
le processeur (ou PE) peut effectuer plusieurs “choses” en mˆeme temps
Par exemple,...
MPI : Les types de donn´ees enMPI
Ce qu’on envoie/re¸coˆıt... MPI_Commande(&buffer,count,MPI_INT, ...)
Type MPI Type dans ...
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 ...
MPI : les communications non-bloquantes (C API) “I”
i n t MPI Isend ( void ∗buf , i n t count , MPI Datatype
datatype , i ...
MPI : les groupes de communication, communicators
D´efini le cadre des op´erations de communication,
Chaque processus inclu...
Barri`ere de synchronisation : MPI Barrier
MPI Barrier : Bloque jusqu’`a temps que tous les processus arrivent `a cette
ro...
Mesurer le temps sous MPI : MPI Wtime
double start, end;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI...
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 : Reduce, op´erations de calcul pr´ed´efinies
Op´erateur binaire associatif et commutatif
Nom Signification
MPI MAX maxi...
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...
MPI : Les commandes Scan/ Pr´efixe parall`ele
i n t MPI Scan ( void ∗ sendbuf , void ∗ recvbuf , i n t count ,
MPI Datatype...
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
b...
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...
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|
...
Parall´elisation de l’heuristique de Lloyd
Soit p processeurs P0, ..., Pp−1, tous les processeurs lisent leurs n
p donn´ee...
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 ...
Les k-moyennes : Un clustering
par partition
= clustering plat
vs
Regroupement hi´erarchique
Frank Nielsen 5.Regroupement ...
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...
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Merc240D
LotusEuropa
Merc230
V...
Les sciences du vivant adorent le regroupement
hi´erarchique !
Gene expression patterns of breast carcinomas distinguish t...
Le regroupement hi´erarchique : reconnaissance de visages
Hierarchical Clustering With Prototypes via Minimax Linkage, 201...
Le clustering/regroupement hi´erarchique ascendant
On part des donn´ees X = {x1, ..., xn} qui sont des feuilles et on fusi...
Pour se fixer une id´ee : saut moyen, Single Linkage (SL)
Fonction de chaˆınage entre deux groupes
Δ(Gi , Gj ) = min
xi ∈Gi...
Quelle distance ´el´ementaire entre deux donn´ees ?
On doit toujours avoir bien entendu Δ({xi }, {xj }) = D(xi , xj ).
Exe...
Le clustering par agglom´eration
Hierarchical Cluster Analysis (HCA) : regroupement hi´erarchique
Initialiser xi dans un c...
Distance de chaˆınage Δ(Gi, Gj)
Single Linkage
saut minimum
Complete Linkage
saut maximum
diam`etre
Group Average
saut moy...
Dessinons un dendrogramme...
Par exemple, choisissons la hauteur comme le nombre d’ ´etapes de fusion :
I N F 4 4 2
I, N 4...
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 c...
Le clustering hi´erarchique : single linkage (SL)
Δ(Gi , Gj ) = min
xi ∈Gi ,xj ∈Gj
D(xi , xj )
R´epeter tant que toutes le...
MaseratiBora
FordPanteraL
Duster360
CamaroZ28
ChryslerImperial
CadillacFleetwood
LincolnContinental
HornetSportabout
Ponti...
Le clustering hi´erarchique : Complete Linkage
Complete linkage (CL) : CLINK in O(n2) (1977)
ΔCL(Gi , Gj ) = max
xi ∈Gi ,x...
MaseratiBora
ChryslerImperial
CadillacFleetwood
LincolnContinental
FordPanteraL
Duster360
CamaroZ28
HornetSportabout
Ponti...
Le clustering hi´erarchique : Average Linkage
Average Linkage (AL) : O(n2) (1984)
ΔAL(Gi , Gj ) =
1
ni nj
xi ∈Gi xj ∈Gj
D(...
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Merc240D
LotusEuropa
Merc230
V...
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 :...
FerrariDino
HondaCivic
ToyotaCorolla
Fiat128
FiatX1−9
MazdaRX4
MazdaRX4Wag
Merc280
Merc280C
Merc240D
LotusEuropa
Merc230
V...
Le clustering descendant hi´erarchique par division
Version top-down : on part d’un cluster contenant toutes les donn´ees ...
Dendrogramme : obtenir des partitions `a partir du
dendrogramme
Pour k ∈ [n] = {1, ..., n}, on peut extraire des partition...
Convertir un clustering hi´erarchique en une partition
Si on ne choisit pas k mais une valeur de seuillage...
Parcourir r´...
Convertir un clustering hi´erarchique en une partition
Si on veut choisir k...
Clustering hi´erarchique → Clustering plat ...
Distances : m´etriques et ultra-m´etriques
Une distance d(·, ·) est :
m´etrique si elle satisfait les axiomes :
d(x, y) ≥ ...
Distance et ´evolution (horloge)
Dans les arbres phylog´en´etiques, la distance entre deux esp`eces impose des
restriction...
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
Clusteri...
Regroupement hi´erarchique par UPGMA
Initialise xi a son cluster Ci et positionne ce nœud `a hauteur t = 0.
Tant qu’il res...
Regroupement hi´erarchique par UPGMA
Th´eor`eme
Si les donn´ees sur les distances sont ultram´etriques (v´erifiable sur la ...
Dissimilarit´e, similarit´e et inversions
similarit´e entre deux groupes : S(Xi , Xj ) = −Δ(Xi , Xj ). Ainsi si on a
Δ(Gi ...
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 s...
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...
Structures de donn´ees abstraites
D´efini une interface pour acc´eder aux donn´ees.
Peut-ˆetre cod´e du plusieurs mani`eres...
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( ...
. . .
CNoeud ∗ Arbre442=new CNoeud (3 , new CNoeud (2) ,
new CNoeud (1 , new CNoeud (4) ,new CNoeud (5) ) ) ;
cout<<Arbre4...
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...
Diff´erences principales entre C++ et Java
null en Java et NULL en C++
this.variable en Java/C++ (r´ef´erence) et this->var...
R´esum´e A2
HPC : acc´el´eration, loi d’Amdahl et loi de Gustafson
MPI :
les communications bloquantes, les situations de ...
Traitement des données massives (INF442, A2)
Prochain SlideShare
Chargement dans…5
×

Traitement des données massives (INF442, A2)

103 vues

Publié le

Traitement des données massives (INF442, A2)

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
103
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Traitement des données massives (INF442, A2)

  1. 1. INF442 : Traitement des donn´ees massives A2 : Le regroupement plat et le regroupement hi´erarchique Frank Nielsen X2013 15 avril 2015
  2. 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. 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. 4. 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)
  5. 5. 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
  6. 6. 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)
  7. 7. 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
  8. 8. 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 ?
  9. 9. 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 .
  10. 10. 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 !
  11. 11. 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.
  12. 12. 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
  13. 13. 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 //)
  14. 14. 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)
  15. 15. 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)
  16. 16. 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
  17. 17. 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).
  18. 18. 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).
  19. 19. 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
  20. 20. 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
  21. 21. 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;
  22. 22. Communications bloquantes (non-bufferis´ees) ⇒ provoque de l’attente (idling) Envoyeur ou receveur doivent s’attendre mutuellement (hand-shaking).
  23. 23. 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 ) ; }
  24. 24. . . . 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
  25. 25. 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).
  26. 26. Temps d’attente pour le receveur Receveur prˆet avant l’envoyeur (communications bloquantes)
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. 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
  31. 31. 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 ) ; }
  32. 32. 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
  33. 33. 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.
  34. 34. 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
  35. 35. 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
  36. 36. 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++
  37. 37. 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 )
  38. 38. 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)
  39. 39. 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
  40. 40. 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...
  41. 41. 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))
  42. 42. 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
  43. 43. 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 () ;
  44. 44. 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)
  45. 45. 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
  46. 46. Algorithme parall`ele pour les k-moyennes Parallel k-means MPI Frank Nielsen 4.k-moyennes sous MPI A2-47
  47. 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
  48. 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
  49. 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
  50. 50. Frank Nielsen 4.k-moyennes sous MPI A2-51
  51. 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
  52. 52. Les k-moyennes : Un clustering par partition = clustering plat vs Regroupement hi´erarchique Frank Nielsen 5.Regroupement A2-53
  53. 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
  54. 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
  55. 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
  56. 56. Le regroupement hi´erarchique : reconnaissance de visages Hierarchical Clustering With Prototypes via Minimax Linkage, 2011. Frank Nielsen 5.Regroupement A2-57
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 70. Frank Nielsen 5.Regroupement A2-71
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. 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
  79. 79. Dendrogrammes et arbres phylog´en´etiques Frank Nielsen 5.Regroupement A2-80
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. 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
  88. 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
  89. 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
  90. 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
  91. 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

×