3. Στόχος της εργασίας
Ανάπτυξη ενός προγράμματος που θα υλοποιεί τον Markov Cluster Algorithm (MCL) σε
κατανεμημένο περιβάλλον.
Cloud vs. Grid?
Cloud επειδή επιτρέπει εύκολη προσαρμογή των υπολογιστικών πόρων
Το πρόγραμμα:
θα εκτελεί την ομαδοποίηση των στοιχείων σε οσοδήποτε μεγάλο όγκο δεδομένων
θα παρέχει αποτελέσματα σε κατανοητή και βολική μορφή για το χρήστη
θα έχει φιλική διεπαφή
θα μειώσει το συνολικό χρόνο εκτέλεσης της ομαδοποίησης μεγάλων σετ δεδομένων
3
16/03/2017
4. Θεωρητικό Υπόβαθρο
Τι είναι το clustering (ομαδοποίηση);
Clustering είναι η μέθοδος με την οποία τα αντικείμενα ενός συνόλου δεδομένων
οργανώνονται σε ομάδες ανάλογα με το βαθμό ομοιότητας τους
Γιατί η ομαδοποίηση πρωτεϊνών είναι σημαντική για τη Βιοπληροφορική;
Πρωτεΐνες με άγνωστη λειτουργία συσχετίζονται με πρωτεΐνες με γνωστές
ιδιότητες και λειτουργία
Γιατί πρέπει το πρόγραμμα να εκτελείται σε κατανεμημένο περιβάλλον;
Η Βιοπληροφορική είναι πλέον ένα Big Data Domain
Ρυθμοί αύξησης των δεδομένων >> Ρυθμοί αύξησης της υπολογιστικής ισχύος
4
16/03/2017
5. 5
Δυνατότητες MPI/OpenMP Apache Hadoop Apache Spark CUDA
Ανεξάρτητο από ειδικό
Hardware
✔ ✔ ✔ ✘
Υποστήριξη Big Data ✔ ✔ ✔ ✘
Αξιοποίηση Μεγέθους
Σύγχρονων Σκληρών
Δίσκων
✔ ✔ ✔ ✘
Αξιοποίηση Ταχύτητας
Σύγχρονων Μνημών RAM
✔ ✘ ✔ ✔
Διανεμημένο Σύστημα
Αποθήκευσης Αρχείων
✘ ✔ ✔ (HDFS) ✘
Απόδοση
(το 1 είναι το πιο γρήγορο
γρήγορο σύστημα)
2 4 3 1
Έλεγχός Υποδομής σε
Διανεμημένα Συστήματα
✘ ✔ ✔ ✘
Αντιμετώπιση σφαλμάτων ✘ ✔ ✔ ✘
Distributed
Computing
Frameworks
APACHE SPARK IT IS!
16/03/2017
8. Περιγραφή υλοποιήσεων
MCL
Η υλοποίηση του αλγορίθμου έγινε σε SCALA με τη χρήση του API και των δομών δεδομένων του Apache Spark
Εισήχθη μια απλοϊκή (naïve) συνάρτηση για την εκμετάλλευση του αραιού χαρακτήρα πινάκων στο διανεμημένο
πολλαπλασιασμό πινάκων
R-MCL
Η υλοποίηση του αλγορίθμου έγινε σε Python με τη χρήση του API του Apache Spark
Για την υλοποίηση του αλγορίθμου χρησιμοποιήθηκαν οι εξής βιβλιοθήκες:
1. SciPy
2. Pandas
3. NetworkX
8
16/03/2017
9. 9
Χρησιμοποιώντας το Apache
Spark στο μέγιστο
• Αλλαγή σειράς πράξεων
• Έλεγχος σύγκλισης μετά την 5η επανάληψη
• Αλλαγή Blocksize και Partitionsize
Στο κύριο επαναληπτικό κομμάτι του αυθεντικού MCL τα βήματα είναι:
EXPAND → INFLATΙΟΝ → NORMALIZATION → PRUNING → NORMALIZATION
Προτεινόμενο κύριο επαναληπτικό κομμάτι του τροποποιημένου MCL:
EXPAND → PRUNING → INFLATION → NORMALIZATION 16/03/2017
10. 10
Πολυπλοκότητα
• Ο MCL χωρίς τροποποιήσεις απαιτεί:
𝑶 𝑵 𝟑
• Υλοποίηση MCL σε SCALA για την παρούσα διπλωματική εργασία:
𝑶 𝒂 𝟐
∗ 𝑵 𝟑
• Υλοποίηση R-MCL σε Python για την παρούσα διπλωματική εργασία:
𝑶 𝒕 ∗ 𝒔 ∗ 𝑵 𝟑
Όπου
Πίνακας εισόδου διαστάσεων NxN
Ν: αριθμός γραμμών πίνακα εισόδου
a: πυκνότητα πίνακα που προκύπτει σε κάθε
επανάληψη
t: πυκνότητα πίνακα που προκύπτει σε κάθε
επανάληψη
s: πυκνότητα αρχικού στοχαστικού πίνακα
Πυκνότητα Πί𝜈𝛼𝜅𝛼 =
𝛼𝜌𝜄𝜃𝜇ό𝜍 𝜇𝜂 𝜇𝜂𝛿𝜀𝜈𝜄𝜅ώ𝜈 𝜎𝜏𝜊𝜄𝜒𝜀ί𝜔𝜈
𝛼𝜌𝜄𝜃𝜇ό𝜍 𝛾𝜌𝛼𝜇𝜇ώ𝜈 ∗ 𝛼𝜌𝜄𝜃𝜇ό𝜍 𝜎𝜏𝜂𝜆ώ𝜈
(Η Πυκνότητα στην περίπτωση μας παίρνει
τιμές <<1)
16/03/2017
11. 11
Περιγραφή Datasets και αποτελεσμάτων
clustering του MCL με SCALA MCL
2ο Dataset:
1ο Dataset:
3ο Dataset:
Πειράματα με πραγματικά δεδομένα
SampleData 3ο Dataset 2ο Dataset
Ομάδες Αυθεντικού MCL (OG) 2,248 25,354 57,570
Ομάδες SCALA MCL (MOD) 2,394 27,959 65,703
SampleData:
Αριθμός cluster που προκύπτουν σε διάφορα datasets από
τον αυθεντικό MCL και τον MCL SCALA
16/03/2017
Normal File Size: 722.9KB
NNZ: 16,466
Matrix Dimensions: 3,7752
Normal File Size: 8.3GB
NNZ: 142,298,957
Matrix Dimensions: 1,908,1422
Normal File Size: 1.7GB
NNZ: 29,425,239
Matrix Dimensions: 357,8742
Normal File Size: 948.8MB
NNZ: 16,424,393
Matrix Dimensions: 186,1902
12. 12 Επαλήθευση αποτελεσμάτων clustering του MCL
SCALA SampleData 3ο Dataset 2ο Dataset
Αριθμός ίδιων cluster αναμεσά στις δυο υλοποιήσεις 2,120 23,380 51,477
Αριθμός στοιχείων που περιέχουν τα ίδια cluster 3,216 104,442 167,968
Αριθμός Singletons σε OG / MOD / κοινά σε OG &
MOD
1,672/1,837/1,672 15,599/17,337/15,598 34,278/39,760/34,271
Αριθμός cluster που δεν είναι ίδια σε OG / MOD 128/274 1,974/4,579 6,093/14,226
Αριθμός cluster του OG που μπορούν να
δημιουργηθούν με τον αριθμό singletons του MOD
48/165 99/1,739 233/5,489
Μέσος αριθμός singletons που συνδυάστηκαν και ο
αριθμός των στοιχείων που απομένουν
3.4375/394 17.5656/80,009 23.5579/184,417
Αριθμός cluster του OG που μπορούν να
αναδημιουργηθούν ακριβώς χρησιμοποιώντας cluster
του MOD (OG/MOD)
36/54 547/1,330 1,494/4,003
Αριθμός των cluster του OG που δεν μπορούν να
αναδημιουργηθούν ακριβώς με τα cluster του MOD
και ο αριθμός των στοιχείων που περιέχουν αυτά.
44/55/249 1,328/1,510/66,090 4,366/4,734/155,397
Ποσοστό επιτυχίας σχεδιασμού των cluster του OG
που δεν μπορούν να δημιουργηθούν ακριβώς με τα
cluster που έχουν μείνει στο MOD
98.80% 84.90% 82.08%
Συνολικό ποσοστό στοιχείων που βρίσκονται στα σωστά
cluster
99.92% 94.64% 92.22%
16/03/2017
13. Αποτελέσματα
13
1289
843
653
713
825
0
500
1000
1500
seconds
Hardware Configurations
3ο Dataset
2166
1328
1019 1107 1247
0
1000
2000
3000
seconds
Hardware Configurations
2ο Dataset
12 CPU Cores - 2 Executors
24 CPU Cores - 4 Executors
30 CPU Cores - 5 Executors
60 CPU Cores - 10 Executors
32 CPU Cores - 4 Executors - Different Settings
12 CPU
Cores - 2
Executors,
88357
30 CPU
Cores - 5
Executors,
15372
60 CPU
Cores - 10
Executors,
8141
0
20000
40000
60000
80000
100000
seconds
Hardware Configurations
1ο Dataset
Συνολικός χρόνος εκτέλεσης (seconds)
του MCL SCALA για κάθε Hardware
Configuration σε κάθε Dataset.
16/03/2017
15. Σύγκριση μετρήσεων R-MCL Python, MCL
SCALA και Original MCL
16/03/2017
15
Dataset R-MCL
Python
MCL SCALA Original
MCL
2nd 48,121 65,703 57,570
3rd 22,314 27,959 25,354
Dataset R-MCL Python MCL SCALA
2nd 307.23 653.94
3rd 609.75 1,019.75
Αριθμός cluster που προκύπτουν από κάθε
αλγόριθμο
Χρόνος εκτέλεσης σε seconds του R-
MCL & MCL SCALA
O R-MCL Python δημιουργεί τα λιγότερα cluster O R-MCL Python είναι πιο
γρήγορος από τον MCL SCALA
Σύμφωνα με θεωρία:
O R-MCL δημιουργεί ποιοτικότερα cluster
16. 16
HWC1 HWC2 HWC3 HWC4 HWC5
Matrix-
100000-
0.0001 0.107497 0.14015556 0.14676667 0.354884 0.1543694
Matrix-
100000-
0.001 0.608685 0.68491111 0.68464667 0.879939 0.6558222
Matrix-
1000000-
0.00001 1.206065 1.10570833 0.9896833 1.385358 1.7456638
3rd Dataset
0.255652 0.27865833 0.25902333 0.518509 0.2727083
2nd Dataset
0.42959 0.43897778 0.4042033 0.805035 0.4122027
1st Dataset
17.52414
-
6.09756 5.920316
-
Συνολικό κόστος ($) για την ομαδοποίηση κάθε Dataset γ
κάθε Hardware Configuration
Τα Hardware Configurations (HWC) αντιστοιχούν στους παρακάτω
υπολογιστικούς πόρους:
1. 20 CPU πυρήνες – 48 GB RAM – 480 GB SSD
2. 36 CPU πυρήνες – 80 GB RAM – 800 GB SSD
3. 44 CPU πυρήνες – 96 GB RAM – 960 GB SSD
4. 84 CPU πυρήνες – 176 GB RAM – 1.76 TB SSD
5. 40 CPU πυρήνες – 80 GB RAM – 800 GB SSD
HWC1 HWC2 HWC3 HWC4 HWC5
Cost ($)
Per
Hour
0.714 1.19 1.428 2.618 1.19
Κόστος ενοικίασης ($) κάθε Hardware
Configuration ανά ώρα
Τα resources ενοικιάστηκαν από την
16/03/2017
Γιατί όχι ;
Κομβόι με μνήμη RAM ≤ 8GB
Πολύ αργοί υπολογιστικοί πυρήνες
17. Συμπεράσματα
17
Η προσφορά αυτής της διπλωματικής είναι η Distributed computing και horizontally
scalable υλοποίηση του αλγορίθμου MCL
Το πρόγραμμα λειτουργεί για οσοδήποτε μεγάλο γράφο εισόδου
Ο χρόνος εκτέλεσης του προγράμματος επηρεάζεται από το μέγεθος του γράφου εισόδου και
από τους διαθέσιμους υπολογιστικούς πόρους
Πιο φθηνή λύση ανά ώρα ≠ πιο συμφέρουσα λύση
16/03/2017
18. Μελλοντικές Επεκτάσεις
18
¤ Εγγενής υποστήριξη διανεμημένου πολλαπλασιασμού πινάκων από το Apache Spark που
να εκμεταλλεύεται τις ιδιότητες των αραιών πινάκων
► Καλύτερη εκμετάλλευση της τοπικότητας των δεδομένων στις συναρτήσεων Normalize,
Pruning και Inflation
► Αυτόματη ρύθμιση των παραμέτρων εισόδου μέσω τεχνικής βελτιστοποίησης
υπερπαραμέτρων με τη χρήση είτε γενετικών αλγορίθμων είτε Particle Swarm Optimization
αλγορίθμων
► Αυτόματη ρύθμιση των διαθέσιμων υπολογιστικών πόρων ανάλογα με το εκάστοτε
πρόβλημα
► Δυναμική αλλαγή των διαθέσιμων υπολογιστικών πόρων ανάλογα με το ποσό απαιτητικό
είναι το σημείο του προγράμματος που εκτελείται
Ανανέωση της υλοποίησης για τη σωστή λειτουργία σε Spark 2.x 16/03/2017
19. Τέλος
Ευχαριστώ θερμά:
τον καθηγητή Περικλή Α. Μήτκα
τον μεταδιδακτορικό ερευνητή Φώτη Ε. Ψωμόπουλο
τον υποψήφιο διδάκτορα Αθανάσιο Κιντσάκη
τον Ohad Raviv και Joan André
τους καθηγητές Ανδρέα Συμεωνίδη και Αναστάσιο Ντελόπουλο
Εσάς για την προσοχή σας
Ερωτήσεις;
16/03/2017
Editor's Notes
Γεια σας και απο εμενα, ονομαζομαι Καλτσικης Αγγελος και θα σας παρουσιασω την διπλωματικη μου εργασια που πραγματευεται την παραλληλη υλοποιηση του αλγοριθμου MCL με χρηση πορων του Cloud.
Στην παρουσιαση που ακολουθει αρχικα θα δουμε τον στοχο της εργασιας. Στη συνεχεια θα παρουσιαστει ενα θεωρητικο υποβραθρο για την καλυτερη κατανοηση του προβληματος που καλουμαστε να αντιμετωπισουμε. Θα ακολουθησει η περιγραφη της μεθοδολογιας και της πολυπλοκοτητας του προγραμματος. Θα αναφερθουν τα αποτελεσματα της εργασιας, τα συμπερασματα και τελος οι μελλοντικες επεκτασεις.
Στοχος της εργασιας ηταν η αναπτυξη ενος προγραμματος που να υλοποιει τον Markov Cluster Algorithm σε κατανεμημενο περιβαλλον. Επιλεχθηκε η υλοποιηση του σε Cloud περιβαλλον και οχι σε Grid λογω της πολυ ευκολης προσαρμογης των υπολογιστικων πορων αναλογα με το εκαστοτε προβλημα. Το προγραμμα πρεπει να ειναι ικανο να δεχεται οσοδηποτε μεγαλη εισοδο και να παραγει τα αποτελεσματα της ομαδοποιησης σε κατανοητη και βολικη μορφη για το χρηστη. Επισης πρεπει να παρεχει μια φιλικη διεπαφη ετσι ωστε να διευκολυνει τη χρηση της υλοποιησης απο οσο το δυνατον περισσοτερα μελη της ερευνιτικης κοινοτητας. Με την υλοποιηση αυτη επιζητειται η μειωση του συνολικου χρονου εκτελεσης ομαδοποιησης σε μεγαλα σετ δεδομενων αλλα και η παροχη της δυνατοτητας ομαδοποιησης ογκου δεδομενων που ηταν απαγορευτικα μεγαλος για τις προηγουμενες υλοποιησεις.
Ομως ας ξεκινησουμε με μερικες βασικες εννοιες που θα σας βοηθησουν να κατανοησετε καλυτερα την παρακατω παρουσιαση. To clustering ειναι η μεθοδος με την οποια αντικειμενα τα οποια μοιαζουν περισσοτερο μεταξυ τους παρα με αλλα κατατασονται σε μια ομαδα. Η ομαδοποιηση των πρωτεινων ειναι αρκετα σημαντικη για τη Βιοπληροφορικη γιατι ετσι καθοριζονται οι λειτουργιες και ιδιοτητες πρωτεινων που δεν ειναι γνωστες εφοσον ομαδοποιουνται με αλλες για τις οποιες γνωριζουμε τα στοιχεια αυτα. Υπαρχουν ηδη αρκετες υλοποιησεις του MCL οι οποιες εχουν σχεδιασθει για διαφορους σκοπους. Ωστοσο κατα την σχεδιαση τους δεν ειχε ληφθει υποψη το μεγεθος των δεδομενων που θα επρεπε να αντιμετωπισουν στο μελλον. Για την ακριβεια η Βιοπληροφορικη χαρακτηριζεται ως ενας τομεας που ασχολειται με τεραστιο ογκο δεδομενων (Big Data). Λογω του μεγεθους των δεδομενων που καλειται να αντιμετωπισει η υλοποιηση μας αλλα σε συνδιασμο με το γεγονος οτι ο ρυθμος αυξησης του ογκου των δεδομενων ειναι μεγαλυτερος απο τον ρυθμο αυξησης της υπολογιστικης ισχυος επιλεχθηκε η υλοποιηση του αλγοριθμου σε κατανεμημενο περιβαλλον.
Για την υλοποιηση του προγραμματος μετα την οριστικοποιηση της αποφασης για χρηση μιας cloud υποδομης τεθηκε το ερωτημα για το αν θα επρεπε να σχεδιασθει ενα custom framework για της αναγκες του προγραμματος ή θα ηταν καλυτερο να χρησιμοποιηθει ενα ηδη ευραιως γνωστο και χρησιμοποιηουμενο framework. Αν και η κατασκευη ενος ειδικα σχεδιασμενου framework για το προβλημα θα εδινε καλυτερη αποδοση επιλεχθηκε να μην "ξανα εφευρεθει ο τροχος" και να χρησιμοποιηθει ενα απο τα ηδη υπαρχοντα framework που παρεχουν πολυ καλη υποστηριξη απο την κοινοτητα τους. Συγκρινοντας τα MPI/OpenMP, Apache Hadoop, Apache Spark και CUDA επιλεχθηκε το Apache Spark γιατι υποστηριζει ταυτοχρονα τη δυνατοτητα αξιοποιησης του μεγεθους των σκληρων δισκων και της ταχυτητας των μνημων ram σε συνδιασμο με την υποστηριξη διανεμημενου συστηματος αποθηκευσης αρχειων επομενως και τη δυνατοτητα επιλυσης προβληματων Big Data. Καποια κριτηρια που επαιξαν σημαντικο ρολο ειναι η αντιμετωπση σφαλματων απο το framework, η δυνατοτητα ελεγχου της υποδομης σε διανεμημενα συστηματα και η δυνατοτητα εκτελεσης του σε οποιοδηποτε συστημα χωρις αναγκες για ειδικο hardware.
Στο σημειο αυτο εφοσον ξεκαθαριστηκε το framework που επιλεξαμε παραθετουμε τον ψευδοκωδικα του MCL και το διαγραμμα ροης του. Οπως βλεπουμε και στον ψευδοκωδικα ο αλγοριθμος MCL αποτελειται απο καποιες βασικες ενεργειες οι οποιες ειναι αρχικα η εισαγωγη των self loops και η αρχικη κανονικοποιηση του πινακα γειτνιασης του γραφου ετσι ωστε να ειναι στοχαστικος κατα στηλη. Στη συνεχεια περιλαμβανει την διαδικασια του Expand που ειναι ουσιαστικα πολλαπλασιασμος πινακων, την διαδικασια του inflate που ειναι η υψωση των στοιχειων του πινακα σε μια δυναμη, επειτα η κανονικοποιηση του πινακα κατα στηλη και στη συνεχεια του prunning δηλαδη την αποκοπη των χαμηλοτερων τιμων απο ενα κατωφλι και η επανακανονικοποιηση του πινακα ετσι ωστε να ειναι στοχαστικος. Οι λειτουργιες αυτες εκτελουνται επαναληπτικα μεχρι ο αλγοριθμος να συγκλινει και στη συνεχεια διερμηνευονται τα cluster που προκυπτουν.
Περα απο τον αλγοριθμο MCL δημιουργηθηκαν διαφορες παραλλαγες του ετσι ωστε να αντιμετωπιστουν καποιες απο τις αδυναμιες του. Στη παρουσα διπλωματικη εργασια επιλαξαμε να υλοποιησουμε περα απο τον κανονικο MCL την παραλλαγη του Regularized MCL που βελτιωνει την "αδυναμια" του MCL του κατακερματισμου των ομαδων σε πολλες μικροτερες. Οπως βλεπουμε και στον ψευδοκωδικα η μονη διαφορα του R-MCL και του MCL ειναι η εισαγωγη της μεταβλητης MG ο οποιος ειναι ο αρχικος πινακας γειτνιασης του γραφου. Με αυτον πολλαπλασιαζεται στο βημα του expand ο πινακας γειτνιασης που εχει προκυψει σε καθε επαναληψη μεχρι την συγκλιση του αλγοριθμου. Με τον τροπο αυτο χρησιμοποιουνται τα χαρακτηριστικα στοιχεια του αρχικου πινακα γειτνιασης καθ ολη την διαρκει εκτελεσης του αλγοριθμου σε αντιθεση με τον απλο MCL.
Η υλοποιηση του MCL εγινε σε SCALA και χρησιμοποιει το API του Apache Spark και τις δομες δεδομενων που παρεχει το Spark για την διανεμημενη αποθηκευση των γραφων που επιθημουμε να ομαδοποιησουμε σε δομες δεδομενων σχεδιασμενες για αραιους πινακες. Αν και το Spark χρησιμοποιειται ευραιως σε προβληματα Big Data και υποστηριζει αραιες μορφες αποθηκευσης δεν υπηρχε ηδη ενσωματωμενη η δυνατοτητα εκτελεσης διανεμημενουν πολλαπλασιασμου πινακων που να εκμεταλευεται τον αραιο χαρακτηρα των δεδομενων. Εγιναν διαφορες προσπαθειες επιλυσης του προβληματος αυτου και τελικα επειτα απο συνεργασια με τους μηχανικους του Paypal Israel βρεθηκε μια λυση που ναι μεν ηταν απλοικη και δεν ειχε βελτιστοποιηθει αλλα δουλευε. Απο την αλλη πλευρα ο R-MCL με την μικρη αυτη τροποποιηση μας δινει τη δυνατοτητα να εκμεταλευτουμε την πανισχυρη βιβλιοθηκη SciPy που μας εκτελει τον πολλαπλασιασμο πινακων σε αραιη μορφη πολυ γρηγορα και με χαμηλη πολυπλοκοτητα. Επομενως επιλεχθηκε η υλοποιηση αυτη να πραγματοποιηθει σε Python και να χρησιμοποιηθει ξανα το API του Apache Spark. Περα απο αυτο ομως χρησιμοποιηθηκαν οι βιβλιοθηκες SciPy οπως προαναφεραμε, η βιβλιοθηκη Pandas και η βιβλιοθηκη NetworkX.
Για την περαιτερω βελτιωση της αποδοσης του προγραμαμτος επιλεχθηκε η εισαγωγη διαφορων κολπων τα οποια δεν θα μετεβαλλαν τα αποτελεσματα. Πρωτη αλλαγη ισως και η πιο σημαντικη ειναι η αλλαγη της ροης των ενεργειων που γινονται στον αλγοριθμο του MCL ετσι ωστε να διαγραφουν καποια βηματα που πλεον δεν θα ειναι αναγκαια. Βασιζόμενοι στο οτι η συναρτηση του pruning πρεπει να δεχθει εναν πινακα ο οποιος να ειναι στοχαστικος και η συναρτηση της υψωσης στοχαστικου πινακα σε δυναμη δινει και παλι στοχαστικο πινακα προταθηκε η σειρα των πραξεων να γινει Expand -> pruning -> inflation και επειτα normalization και επομενως η διαγραφη ενος βηματος normalization. Σημαντικη παρατηρηση εδω ειναι πως σε αυτη την περιπτωση η τιμη του κατωφλιου πρεπει να ειναι διαφορετικη σε σχεση με την αρχικη ροη. Επειδη η διαδικασια ελεγχου για τη συγκλιση του αλγοριθμου συγκρινει τον πινακα της προηγουμενης επαναληψης με τον πινακα που εχει προκυψει στην παρουσα επαναληψη, διαδικασια που για μεγαλους πινακες μπορει να γινει ιδιαιτερα απαιτητικη και χρονοβορα, επιλεχθηκε ο ελεγχος να πραγματοποιειται απο την 5η επαναληψη και μετα οπου ο πινακας εχει γινει αρκετα πιο αραιος απο οτι ηταν στην αρχη.*** Αντιστοιχα εφοσον κατα την παροδο των επαναληψεων ο πινακας περιεχει ολο και λιγοτερα στοιχεια ρυθμιστηκε το προγραμμα να αλλαζει το blocksize για τον πολλαπλασιασμο των αραιων πινακων και τον αριθμο των partition που ειναι διανεμημενα τα δεδομενα αναμεσα στους κομβους.
Οσο αφορα την πολυπλοκοτητα των προγραμματων η ροη του MCL χωρις καποια τροποποιηση εχει πολυπλοκοτητα της ταξης O(N^3). Η δικια μας υλοποιηση για τον MCL σε Scala εχει O(a^2*N^3) που αντικατροπτιζεται στον πολλαπλασιασμο αραιων πινακων που ειναι και η πιο απαιτητικη διαδικασια. Η υλοποιηση του R-MCL σε Python είναι της ταξης (t*s*N^3) οπου τ ειναι η πυκνοτητα του πινακα που προκυπτει σε κάθε επαναληψη και s πυκνοτητα του αρχικου στοχαστικου πινακα.
Για το κομματι των αποτελεσματων της διπλωματικης χρησιμοποιηθηκαν τεχνητα και πραγματικα δεδομενα. Στην παρουσιαση θα επικεντρωθουμε στα πραγματικα δεδομενα και παραθετουμε μια συνοπτικη περιγραφη των Dataset αυτων. Κατα την διαρκεια αναπτυξης του προγραμματος χρησιμοποιηθηκε το αρχει SampleData το οποιο λογω του μικρου του μεγεθους ηταν καταλληλο για την αναπτυξη και την διορθωση του προγραμματος. Στη συνεχεια το προγραμμα εκτελεστηκε με τα τρια Dataset που βλεπουμε στο αριστερο μερος της οθονης μας. Για την εκτελεση των πειραματων χρησιμοποιηθηκαν διαφορα spark clusters τα οποια ειχα διαφορετικους διαθεσιμους πορους σε καθε περιπτωση. Εκτελεστηκε η υλοποιηση του MCL σε Scala και οπως βλεπουμε ο αριθμος των ομαδων που παρηγαγε σαν αποτελεσμα διαφερει απο τον αριθμο των ομαδων που προεκυψαν χρησιμοποιοντας τον αρχικο MCL.
Εφοσον τα αποτελεσματα δεν ειναι ιδια χρησιμοποιησαμε μια σειρα εξαντλητικων συγκρισεων ετσι ωστε να συγκρινουμε αν ειναι ομοια σε ικανοποιητικο βαθμο. Αρχικα ελεχθηκε ο αριθμος των ακριβως ιδιων ομαδων και ο αριθμος των στοιχειων που περιεχονται σε αυτες τις ομαδες. Στη συνεχεια ελεγχθηκε ο αριθμος των singletons για τους δυο αλγοριθμους καθως και ο αριθμος των singletons του αυθεντικου MCL που περιεχονται στα αποτελεσματα της SCALA. Επισης μετρηθηκε ο αριθμος των cluster του αρχικου MCL που δεν ειναι ιδια αλλα και ο αριθμος των cluster που μπορουν να δημιουργηθουν με singletons του MCL SCALA. Καταγραφεται ο μεσος αριθμος των singletons που χρησιμοποιηηκαν για το σχηματισμο καθε ομαδας του Original MCL καθως και ο αριθμος των στοιχειων που δεν εχουν ακομα ελεχθει. Στη συνεχεια παρουσιαζεται ποσες ομαδες του original μπορουν να σχεδιασθουν ακριβως χρησιμοποιοντας ομαδες του Scala MCL και ο αριθμος των cluster που δεν μπορουν να αναμηιουργηθουν ακριβως καθως και ο αριθμος των στοιχειων που περιερχουν αυτα. Τελος καταγραφεται το ποσοστο επιτυχιας για αναδημιουργια των cluster που απεμειναν και δεν ταυτιζονται ακριβως αλλα και το συνολικο ποσοστο στοιχειων που μπορουν να βρεθουν στο ιδιο cluster συμφωνα με τον αρχικο MCL. Συμφωνα με τον κυριο Stijn van Dongen οσο μεγαλυτερος ειναι ο γραφος εισοδου τοσο μεγαλυτερες μπορει να ειναι και οι διαφορες στα αποτελεσματα ομαδοποιησης κυριως λογω του διαφορετικους τροπου που χειριζομαστε τους αραιους πινακες και του διαφορετικο τροπου απλoπoιησεων και διαχειρησης των self loops. Αυτο επαληθευεται και στον πινακα αυτο.
Εφοσον δειχθηκε πως τα αποτελεσματα της ομαδοποιησης εχουν μεγαλο βαθμο ομοιοτητας και επομενως το προγραμμα λειτουργει σωστα παρουσιαζουμε μερικα αποτελεσματα απο τα πειραματα. Αρχικα βλεπουμε το συνολικο χρονο εκτελεσης του MCL SCALA για καθε dataset σε διαφορετικα hardware configurations. Παρατηρειται πως στο πρωτο και στο δευτερο διαγραμμα οι περισσοτεροι υπολογιστικοι ποροι δεν εχουν και τον μικροτερο χρονο εκτελεσης που θεωρειται η βελτιστη αποδοση. Αντιθετα στο τριτο διαγραμμα για το 1o dataset η περιπτωση των 60 πυρηνων εχει χρονο κατα πολυ μικροτερο απο την περιπτωση των 30 πυρηνων. Αυτο συμβαινει γιατι σε μικρα dataset η παροχη παρα πολλων διαθεσιμων πορων δημιουργει επιπλεον overheads χωρις ουσιαστικα οφελη ενω στην περιπτωση ενος μεγαλου dataset η επιπλεον αυτη υπολογιστικη ισχυς αξιοποιειται.
Παρουσιαζονται διαγραμματα για το χρονο εκτελεσης καθε επαναληψης στο επαναληπτικο κομματι του MCL για διαφορα Dataset με τη χρηση διαφορετικων hardware configurations. Οπως ειναι ηδη γνωστο απο την θεωρια η πρωτες επαναληψεις (μεχρι τη 10η) ειναι και οι πιο απαιτητικες υπολογιστικα και ειναι αυτες στις οποιες γινεται η καλυτερη αξιοποιηση των περισσοτερων υπολογιστικων πορων. Αντιθετα στις επομενες επαναληψεις οι περισσοτεροι υπολογιστικοι ποροι οχι μονο δεν βελτιωνουν την αποδοση αλλα ταυτοχρονα δημιουργουν επιπλεον overheads.
Επισης συγκριθηκε ο αριθμος των cluster που προκυπτουν απο τον R-MCL, MCL SCALA και απο τον αρχικο MCL και επαληθευεται η θεωρια πως ο R-MCL δινει σαν αποτελεσμα λιγοτερα και ποιοτικοτερα cluster. Επισης συγκριθηκε ο χρονος εκτελεσης του RMCL σε Python και του MCL σε SCALA και ο R-MCL ειναι πιο γρηγορος κατι το οποιο ειναι λογικο αν αναλογιστει κανεις πως ο πολλαπλασιασμος πινακων που ειναι το κομματι που ειναι το πιο απαιτητικο εχει χαμηλοτερη πολυπλοκοτητα. Επειδη οι υπολογιστικοι ποροι ενοικιαστηκαν απο τη Digitalocean το τελευταιο πειραμα ασχοληθηκε με την συγκριση των χρηματικων ποσων που δαπανηθηκαν για την ολοκληρωση της ομαδοποιησης καθε dataset για διαφορετικα hardware configurations. Ειναι ευκολα αντιληπτο πως αν και καποια hardware configurations ειχαν μικροτερο κοστος ενοικιασης του ανα ωρα εδιναν μεγαλυτερο κοστος για την εκτελεση του προγραμματος εκτος απο τον περισσοτερο χρονο εκτελεσης.
Επισης συγκριθηκε ο αριθμος των cluster που προκυπτουν απο τον R-MCL, MCL SCALA και απο τον αρχικο MCL και επαληθευεται η θεωρια πως ο R-MCL δινει σαν αποτελεσμα λιγοτερα και ποιοτικοτερα cluster. Επισης συγκριθηκε ο χρονος εκτελεσης του RMCL σε Python και του MCL σε SCALA και ο R-MCL ειναι πιο γρηγορος κατι το οποιο ειναι λογικο αν αναλογιστει κανεις πως ο πολλαπλασιασμος πινακων που ειναι το κομματι που ειναι το πιο απαιτητικο εχει χαμηλοτερη πολυπλοκοτητα. Επειδη οι υπολογιστικοι ποροι ενοικιαστηκαν απο τη Digitalocean το τελευταιο πειραμα ασχοληθηκε με την συγκριση των χρηματικων ποσων που δαπανηθηκαν για την ολοκληρωση της ομαδοποιησης καθε dataset για διαφορετικα hardware configurations. Ειναι ευκολα αντιληπτο πως αν και καποια hardware configurations ειχαν μικροτερο κοστος ενοικιασης του ανα ωρα εδιναν μεγαλυτερο κοστος για την εκτελεση του προγραμματος εκτος απο τον περισσοτερο χρονο εκτελεσης.
Η προσφορα της παρουσας διπλωματικης ειναι η δημιουργια μιας distributed computing και horizontally scalable υλοποιηση του αλγοριθμου MCL. Επομενως τα συμπερασματα που προεκυψαν ειναι πως το προγραμμα εχει τη δυνατοτητα να λειτουργει για οσοδηποτε μεγαλο γραφο εισοδου αρκει να του παρεχονται αρκετοι υπολογιστικοι ποροι για το καθε πειραμα. Αν και ο χρονος εκτελεσης επηρεαζεται απο το μεγεθος του γραφου εισοδου, ο χρονος αυτος μπορει να επηρεαστει απο τους υπολογιστικους πορους που εχει το υπολογιστικο cluster στη διαθεση του. Συμφνωνα με το τελευταιο πειραμα παρατηρησαμε πως δεν ισχυει συνηθως οτι η πιο φθηνη λυση ανα ωρα ειναι και η πιο συμφερουσα τελικα. Επισης για τη βελτιστη αποδοση των υλοποιησεων που αναπτυχθηκαν συστηνεται η χρηση της λειτουργιας του checkpointing και η παροχη υπολογιστικων πορων περισσοτερων απο τον ελαχιστο αναγκαιο. Επισης πολυ σημαντικο ρολο παιζει η σωστη ρυθμιση της δομης και των παραμετρων του υπολογιστικου cluster αλλα και η σωστη ρυθμιση των παραμετρων εισοδου αναλογα με το καθε προβλημα.
Τελος οι μελλοντικες επεκτασεις που θα βελτιωσουν περαιταιρω την υπαρχουσα υλοποιηση ειναι πρωτον η εγγενης υποστηριξη και βελτιστοποιηση του διανεμημενου πολλαπλασιασμου αραιων πινακων απο το Spark, η καλυτερη εκμεταλευση της τοπικοτητας των δεδομενων απο τις συναρτησεις Normalize, pruning και inflation. Επισης η αυτοματη ρυθμιση των παραμετρων εισοδου χρησιμοποιοντας τεχνικες βελτιστοποιησης υπερπαραμετρων ειτε με τη χρηση γενετικων αλγοριθμων ειτε με PSO. Στη συνεχεια η αυτοματη ρυθμιση των καταλληλων υπολογιστικων πορων για καθε προβλημα αλλα και η δυναμικη αλλαγη των πορων που διατειθενται σε αυτο αναλογα με το ποσο απαιτητικο ειναι το σημειο του προγραμματος που εκτελειται την καθε στιγμη. Τελος η ανανεωση της υλοποιησης για υποστηριξη και σωστη λειτουργια των νεων εκδοσεων του Spark.