Ώρα | Τίτλος | Ομιλητής |
---|---|---|
10:00 - 10:15 | Εισαγωγή | Παύλος Σερμπέζης |
10:15 - 10:45 | Tutorial χρήσης της υποδομής “Αριστοτέλης” του ΑΠΘ για εφαρμογές Τεχνητής Νοημοσύνης | Πασχάλης Κορόσογλου, Αλεξάνδρα Χαραλαμπίδου, Βασίλης Αστερίου |
10:45 - 11:00 | Cross-lingual transfer learning: A PARAFAC2 approach | Ιωάννης Τσιγγαλης |
11:00 - 11:15 | High Performance Computing practices for deep learning-based speech enhancement | Ιορδάνης Θωίδης |
11:15 - 11:30 | Machine learning interatomic potentials based on ab initio large-scale data | Ιωσήφ Κιοσέογλου |
11:30 - 11:40 | Ερωτήσεις/Συζήτηση | - |
11:40 - 12:00 | Διάλλειμα | - |
12:00 - 14:00 | AutoML: High Performance Machine Learning Algorithms for Tabular Datasets | Νίκος Μπάκας |
Zoom link:
https://authgr.zoom.us/j/99555423507
Κατά τη διάρκεια των παρουσιάσεων μπορείτε να χρησιμοποιείτε το παρόν κείμενο για να κάνετε ερωτήσεις (το chat του zoom προτείνουμε να χρησιμοποιείται μόνο για θέματα που σχετίζονται με το zoom).
Για να χρησιμοποιήσετε το HackMD document δεν απαιτείται να κάνετε signup ή login.
To HackMD είναι real-time editor και viewer.
Οι βασικές επιλογές του editor είναι αυτές που εμφανίζονται στην παρακάτω εικόνα.
Γενικά, ό,τι λέει εδώ.
Ειδικά, για την hands-on εκπαίδευση (μέρος Β') σας παροτρύνουμε:
Για το μέρος Β' (hands-on) θα χρειαστείτε (όσοι επιθυμείτε να ακολουθήσετε τις ασκήσεις του εκπαιδευτή) λογαριασμό στη συστοιχία.
Αν έχετε ιδρυματικό λογαριασμό ΑΠΘ αλλά δεν έχετε πρόσβαση στη συστοιχία HPC "Αριστοτέλης" μπορείτε να συμπληρώσετε την αίτηση για πρόσβαση στη συστοιχία.
Αν δεν έχετε λογαριασμό ΑΠΘ μπορείτε να συνδεθείτε με τα παρακάτω προσωρινά credentials:
Αφότου συνδεθείτε επιτυχώς με ssh φτιάξτε ένα φάκελο (με όνομα που θα επιλέξετε εσείς, π.χ. jim
) και μεταβείτε μέσα σε αυτόν για να τοποθετήσετε τα δεδομένα σας.
Για σύνδεση με SSH ακολουθείστε τις οδηγίες εδώ.
Καθώς η σύνδεση με SSH είναι διαθέσιμη μέσα από το δίκτυο του ΑΠΘ, εφόσον παρακολουθείτε μέσω zoom και δεν έχετε τη δυνατότητα σύνδεσης στο VPN του Πανεπιστημίου, μπορείτε να συνδεθείτε σε terminal μέσω της σελίδας https://hpc.auth.gr (επιλογή Clusters -> Aristotle Shell Access).
Αφού συνδεθείτε στον Αριστοτέλη μπορείτε να αντιγράψετε τα παραδείγματα (scripts και Jupyter notebook) αυτής της παρουσίασης με την παρακάτω εντολή:
Για το παράδειγμα χρησιμοποιήσαμε το παρακάτω αρχείο υποβολής εργασίας. Οι γραμμές με πρόθεμα #SBATCH
αποτελούν "οδηγίες" για το slurm (πόσοι υπολογιστικοί πόροι θα χρειαστούν και για πόση ώρα)
sinfo
Για να δούμε την κατάσταση μίας ουράς (π.χ. της rome
) εκτελούμε την παρακάτω εντολή. Στα σχόλια γίνεται μιά επεξήγηση του τι βλέπουμε στην έξοδο αυτής της εντολής.
sbatch
Χρησιμοποιείται για να υποβάλλουμε προς εκτέλεση κάποια εργασία:
squeue
Χρησιμοποιείται για να δούμε την κατάσταση των εργασιών. Π.χ. για να δούμε τις εργασίες του χρήστη μας (testnoc5
) η εντολή είναι η παρακάτω. Στα σχόλια γίνεται επεξήγηση του τι βλέπουμε ανά γραμμή.
Πως διαλέγουμε σε ποιο partition θα στείλουμε το job μας; Όχι τεχνικά, αλλά για ποιο λόγο να διαλέξουμε πχ rome αντί ampere κλπ.
Το καθορίζουμε στο job file με την παράμετρο –partition, π.χ.:
#SBATCH --partition=rome
Η επιλογή του partition έχει να κάνει με το τι resources θα χρειαστεί να χρησιμοποιήσουμε. Π.χ. αν χρειαζόμαστε για το εκάστοτε job μας πρόσβαση σε GPU πόρους θε επιλέξουμε είτε το gpu
είτε το ampere
partition. Τα διαθέσιμα partitions, οι πόροι που διαθέτει το καθένα και τα όρια χρήσης δίνονται στον εξής σύνδεσμο:
Τα δεδομένα μας πως τα περνάμε στη συστοιχία; Έχω πχ 10GB δεδομένων που θέλω να αναλύσω. Που τα ανεβάζω;
rsync
ή scp
. Συνήθως χρησιμοποιείται το πρώτο για πολλά αρχεία και φακέλους και το δεύτερο για λίγα αρχεία. Κάποιες σύντομες οδηγίες υπάρχουν εδώ. Εφόσον όμως τα δεδομένα υπάρχουν σε κάποιο cloud storage (π.χ. dropbox ή google drive) μπορεί να χρησιμοποιηθεί το rclone
utility (https://hpc.it.auth.gr/transfer-cloud/).Πώς μπορούμε να εγκαταστήσουμε μία βιβλιοθήκη της python στο δικό μας χώρο στη συστοιχία (στο home directory μας);
Μπορούμε να εγκαταστήσουμε πακέτα στο χώρο μας στη συστοιχία χρησιμοποιώντας environments, είτε python virtual environments + pip, είτε anaconda virtual environments.
Η συστοιχία διαθέτει κεντρικά εγκατεστημένη τη διανομή miniconda3 του anaconda. Για να τη χρησιμοποιήσουμε μπορούμε να τη «φορτώσουμε» στο περιβάλλον μας με την εντολή
module load gcc/12.2.0 miniconda3
Υπάρχει η δυνατότητα να πάρουμε μια εκτίμηση για το πότε θα εκτελεστεί το job μας;
Ναι, μπορούμε να έχουμε μιά εκτίμηση χρησιμοποιώντας την παράμετρο --test-only
στην sbatch, ως εξής:
$ sbatch --test-only xgboost-job.sh
sbatch: Job 1708173 to start at 2023-10-11T11:13:44 using 8 processors on nodes cn42 in partition rome
Σημειώστε ότι με την παράμετρο --test-only
το job μας δεν θα υποβληθεί. Απλά μας δίνει μιά ένδειξη καταρχήν ότι δεν έχουμε κάποιο typo στο job file και επίσης και μια εκτίμηση του εκτιμόμενου χρονου εκκίνησης. Για να μπει στην ουρά το job θα πρέπει να ξανατρέξουμε την εντολή χωρίς την παράμετρο --test-only
.
Πώς μπορούμε να εκτιμήσουμε σωστά πόσα resources χρειάζεται για το job μας ώστε να τα καθορίσουμε σωστά στο job file μας;
Για να γίνει καλή εκτίμηση δυστυχώς χρειάζεται να έχει χρησιμοποιηθεί το cluster ώστε να έχουμε εικόνα των χρόνων επίλυσης και πώς αυτοί μειώνονται ή αυξάνονται όταν προσθέτουμε ή μειώνουμε πόρους. Η πρότασή μας είναι να ξεκινάμε τη διαστασιολόγηση αυτή (benchmarking) με μικρά jobs στην αρχή τα οποία προοδευτικά μπορούμε να αυξάνουμε σε μέγεθος. Στην πορεία πολύ χρήσιμη θα μας φανεί η χρήση της εντολής seff
που μας δίνει για ένα ολοκληρωμένο job το CPU και memory efficiency που επιτεύχθηκε. Π.χ. για το παράδειγμα της xgboost:
# seff 1708163
Job ID: 1708163
Cluster: aristotle
User/Group: testnoc5/authusers
State: COMPLETED (exit code 0)
Nodes: 1
Cores per node: 8
CPU Utilized: 00:42:20
CPU Efficiency: 74.88% of 00:56:32 core-walltime
Job Wall-clock time: 00:07:04
Memory Utilized: 119.68 MB
Memory Efficiency: 0.75% of 15.62 GB
Βλέπουμε στο παραπάνω ότι έχουμε σχετικά καλό CPU efficiency (74.88%
), οπότε ίσως είναι ΟΚ να μεγαλώσουμε το job size (π.χ. να το υποβάλλουμε να τρέξει σε 16 Cpu Cores) και να δούμε αν βελτιώνεται ή έστω παραμένει στα ίδια επίπεδα το CPU efficiency. Αν χειροτερεύει (π.χ. έχει τιμή κάτω από 60%) προτείνουμε να μην κλιμακώσουμε περαιτέρω το job size.
Ποιοι είναι οι συνήθεις χρόνοι αναμονής για μικρές/μεσαίες/μεγάλες εργασίες;
Αν δηλώσω ένα εκτιμώμενο χρόνο για το job και ο χρόνος αυτός παρέλθει, τι συμβαίνει με το job μου; Θα διακοπεί;
Υπάρχει άνω όριο στην τιμή του walltime που μπορώ να δηλώσω;
batch
partition οι εργασίες μπορούν να τρέξουν έως και 7 ημέρες ενώ στο rome
partition το μέγιστο walltime είναι 2 ημέρες.batch
, rome
και ampere
εφόσον υποβάλουμε τις εργασίες μας κάτω από συγκεκριμένα QOS accounts
χρησιμοποιώντας όμως λιγότερα resources από αυτά που μπορούν να χρησιμοποιηθούν by default. Για παράδειγμα, στο batch partition
μπορούμε να τρέξουμε μία εργασία με διάρκεια έως και 7 ημέρες με έως 140 CPU cores
, αλλά εάν θέλουμε να χρησιμοποιήσουμε την επέκταση του χρονικού ορίου (batch-extd
), μπορούμε να τρέξουμε μία εργασία με διάρκεια έως και 12 ημέρες με έως 40 CPU cores
. Για να υποβάλουμε την εργασία μας κάτω από ένα QOS account
μπορούμε να χρησιμοποιήσουμε το directive --qos
στο script υποβολής:
Πόσο καιρό σας πήραν τα jobs για την ολοκλήρωση των πειραμάτων (DL σε GPU). Εκτίμηση μαζί με Queue time + πειράματα. Επίσης συγκεκριμένα τι Queue times συναντήσατε? Π.χ. στην συγκεκριμένη δουλεία, που το μοντέλο χρειαζόταν 33 ώρες εκπαίδευσης, για την εκπαίδευση στο cluster πόση ώρα πήρε?
Όταν ξεκινας τη διαδικασία του hyperparameter tuning, πάρχουν καποια standard best practices ώστε να περιορίσεις κάπως το εύρος των τιμών που πρέπει να εξετάσεις στο κάθε hyperparameter ή έστω να βρεις κάποιο starting point στην περιοχή του οποίου να εξετάσεις πιο διεξοδικά?
Η παρουσίαση υπάρχει στο github repository? Δεν τη βρίσκω!
Αν θέλετε πάντως ανεβάστε την παρουσίαση στο GitHub, ήταν πολύ ενδιαφέρουσα
Error (κατέβασα όλα τα αρχεία από το Instructions.txt): more slurm-1708277.out
Traceback (most recent call last):
File "/mnt/scratch_b/users/t/testnoc5/jim2/HPC-AI-examples/__hpmlt__.py", line 43, in <module>
df, features_names, target_name = misc_functions.read_the_dataset_dropna(ROOT_DIR)
File "/mnt/scratch_b/users/t/testnoc5/jim2/HPC-AI-examples/misc_functions.py", line 82, in read_the_dataset_d
ropna
for file in os.listdir(ROOT_DIR):
FileNotFoundError: [Errno 2] No such file or directory: '/.../.../'
__hpmlt_.py
να αλλάξει η μεταβλητή ROOT_DIR
στο πλήρες path όπου είναι τα αρχεία που αντιγράφτηκαν. Το path μπορείς να το δεις με την εντολή pwd
. Π.χ. σε αυτήν την περίπτωση θα πρέπει να είναι:ΔΙΟΡΘΩΘΗΚΕ! Ευχαριστω! :slightly_smiling_face:
Σε τι διαφέρει το SLURM από το TORQUE; Και τα δυο είναι job submission se HPC.
Σε περίπτωση που οι εργασίες που υποβάλονται στα πλαίσια του hands-on παραμένουν στην ουρά;
Για όσες εργασίες παραμένουν στην ουρά θα μπορούσατε να προσθέσετε το παρακάτω slurm directive στο script υποβολής:
ώστε να δρομολογηθούν στους πόρους που έχουν δεσμευθεί για το event.
Εάν θέλετε να ακυρώσετε προηγούμενες εργασίες που δεν έχουν δρομολογηθεί, μπορείτε να χρησιμοποιήσετε την εντολή scancel
: