Μετάβαση στο περιεχόμενο

Γραφικό Περιβάλλον

Για να χρησιμοποιήσουμε το γραφικό περιβάλλον του Matlab στην συστοιχία μπορούμε να επισκεφτούμε με έναν browser την σελίδα: https://hpc.auth.gr και να ακολουθήσουμε τα παρακάτω βήματα:

  1. Από το menu επιλέγουμε Interactive Apps -> MATLAB

  2. Στην συνέχεια επιλέγουμε στην φόρμα την έκδοση του MATLAB και το χρονικό διάστημα για το οποίο θέλουμε να χρησιμοποιήσουμε το λογισμικό (σε ώρες):

    MATLAB Form

  3. Eφόσον η εργασία ξεκινήσει, μπορούμε να επιλέξουμε Launch MATLAB.

Οδηγίες Χρήσης του Matlab Parallel Server

Ο Matlab Parallel Server μας επιτρέπει να εκτελέσουμε παράλληλα Matlab scripts και προσομοιώσεις Simulink στο HPC cluster "Αριστοτέλης". Ο Matlab Parallel Server υποστηρίζει εργασίες δέσμης, διαδραστικούς παράλληλους υπολογισμούς και κατανεμημένους υπολογισμούς με μεγάλους πίνακες.

  1. Μέσω της υπηρεσίας ondemand επιλέγοντας "Aristotle Desktop" στο μενού "Interactive Apps".

  2. Μέσω του Matlab τοπικά στο desktop μας και χρησιμοποιώντας generic cluster configuration.

  3. Μέσω υποβολής batch script.

Στη συνέχεια θα παρουσιάσουμε τους πρώτους 2 τρόπους.

Για να μπορέσουμε να υποβάλλουμε εργασίες μέσω του desktop app του Matlab, τόσο από το ondemand όσο και από το desktop μας, θα πρέπει να χρησιμοποιήσουμε τα κατάλληλα cluster configuration files ώστε το Matlab να μπορεί να δημιουργήσει αυτόματα το batch script. Αρχικά θα εξηγήσουμε πώς μπορούμε να χρησιμοποιήσουμε το ondemand.

Χρήση ondemand

Οδηγίες εισαγωγής cluster configuration file.

  1. Aνοίγουμε το "Aristotle Desktop" από τις επιλογές στο μενού "Interactive Apps".
  2. Αφού εισέλθουμε στο desktop session ανοίγουμε το λογισμικό matlab και πηγαίνουμε στη γραμμή με τα εργαλεία (Home), στο πλαίσιο "ENVIROMENT" θα πρέπει να εμφανίζεται η επιλογή Parallel την οποία και επιλέγουμε. alt text
  3. Στη συνέχεια επιλέγουμε Create and Manage Clusters alt text
  4. Έπειτα θα ανοίξει ο cluster manager του Matlab όπου μπορούμε να δημιουργήσουμε δικό μας cluster configuration, να εισάγουμε κάποιο έτοιμο ή να κάνουμε αλλαγές σε ήδη υπάρχον. Όσον αφορά τη χρήση του ondemand προτείνεται να κάνουμε εισαγωγή των configuration που έχουν φτιαχτεί από την ομάδα διαχείρισης του Αριστοτέλη για κάθε partition και να γίνουν οποιεσδήποτε αλλαγές ώστε να ταιριάζουν στις απαιτήσεις μας.
  5. Επιλέγουμε Import όπου βάζουμε το file path "/mnt/apps/prebuilt/matlab/parallel-profiles/Batch.mlsettings". alt text
  6. Μπορούμε να κάνουμε οποιεσδήποτε αλλαγές στο cluster configuration επιλέγοντας κάτω δεξιά "edit".

Ουσιαστικά μέσω του configuration profile το Matlab φτιάχνει αυτόματα το αντίστοιχο batch script με βάση τις παραμέτρους που έχουμε ορίσει. Επίσης μπορούμε να κάνουμε validation το profile επιλέγοντας "Validation" όπου εισάγουμε έναν αριθμό workers και επιλέγουμε τα κατάλληλα checkboxes.

alt text

Σε περίπτωση που δεν εμφανίζεται η επιλογή Parallel στο πεδίο Enviroment του tooltrip τότε δοκιμάζουμε να τρέξουμε στο home directory μας:

mv .matlab .matlab.bak
και στη συνέχεια ξανανοίγουμε το matlab στο remote desktop. Όπου θα πρέπει να εμφανίζεται η επιλογή Parallel.

Η χρήση του ondemand μας επιτρέπει να χρησιμοποιήσουμε το parallel pool (parpool) του Matlab, το οποίο σημαίνει ότι μπορούμε να δεσμεύσουμε πχ. 12 CPUs και να τις χρησιμοποιήσουμε interactively για όση ώρα χρησιμοποιούμε το ondemand. Αυτό καθιστά ιδιαίτερα εύκολο το να χρησιμοποιήσουμε το cluster καθώς η όλη διαδικασία δεν διαφέρει από το να "πατήσουμε" Run στο matlab με το κατάλληλο cluster profile και να λάβουμε τα αποτελέσματα μας χωρίς να χρειαστεί να χρησιμοποιήσουμε εντολές όπως batch. Με λίγα λόγια ο κώδικας που έχουμε γράψει μπορεί χωρίς αλλαγές να κάνει scale στον Αριστοτέλη.

Χρήση μέσω του Matlab Desktop App (τοπικά)

Μια ιδιαίτερα χρήσιμη δυνατότητα που δίνει το matlab είναι ότι μπορούμε από το desktop app (που έχουμε τοπικά στον υπολογιστή μας) να στείλουμε τις εργασίες μας στον Αριστοτέλη και να μας επιστραφούν αυτόματα τα αποτελέσματα. Η υποβολή γίνεται με τη βοήθεια της συνάρτησης batch() που προσφέρει το Matlab Parallel Computing Toolbox. Περαιτέρω επεξήγηση της συνάρτησης αυτής μπορεί να βρεθεί στο link.

Το Matlab επιτυγχάνει την αποστολή εργασιών στον Αριστοτέλη μέσω σύνδεσης ssh. Πρώτα από όλα χρειάζεται να κατεβάσουμε τα plugin-scripts για slurm που φτιάχτηκαν από την ομάδα του Mathworks και τα οποία αλλάξαμε λίγο προκειμένου να προσαρμόζονται στον Αριστοτέλη, τα scripts μπορείτε να τα βρείτε MPS_plugin_scripts.

Ουσιαστικά για να μπορέσουμε να τρέξουμε από το desktop app στον Αριστοτέλη θα χρειαστεί να χρησιμοποιήσουμε το κατάλληλο από τα generic profiles που φτιάχτηκαν από την ομάδα διαχείρισης του Αριστοτέλη. Αναλόγως με το λειτουργικό που έχουμε στον υπολογιστή μας θα επιλέξουμε διαφορετικό profile.

Για την δημιουργία και τη χρήση του Matlab Parallel Server θα πρέπει να έχουμε εγκαταστήσει και τοπικά το parallel computing toolbox του matlab, όπου ακολουθούμε την ίδια διαδικασία με το ondemand για να δημιουργήσουμε ή να εισάγουμε profile. Πρέπει να προσέξουμε ότι τα profiles αυτά σε αντίθεση με του ondemand είναι generic το οποίο σημαίνει ότι έχουν περισσότερες παραμέτρους που μπορεί να χρειαστεί να αλλάξουμε προκειμένου να τα προσαρμόσουμε στις απαιτήσεις μας και να υποβάλλουμε τις εργασίες μας.

Προτείνεται να χρησιμοποιήσετε το κατάλληλο profile για τις εργασίες που θέλετε να εκτελέσετε όπου θα κάνετε τις κατάλληλες αλλαγες πχ JobStorageLocation, Time, NumberOfGpus, κλπ. Το matlab θα δημιουργήσει αυτόματα το batch script με το οποίο θα υποβληθούν οι εργασίες σας.

Όταν θα πάμε να κάνουμε υποβολή τις εργασίες θα μας ζητηθεί να εισάγουμε το username μας καθώς και τον κωδικό (όχι πάντα) μας προκειμένου να συνδεθεί το matlab με ssh.

Υποβολή Παράλληλων εργασιών

Έστω θέλουμε να υποβάλουμε ένα script που τρέχει παράλληλα, στη περίπτωση μας είναι το run_parallel(). Μέσα στο run_parallel() υπάρχει μια parfor.

Βήματα Υποβολής Job

  1. Δημιουργiα αντικειμένου cluster με χρήση Configuration File
    cluster_rome = parcluster("rome_partition");
    
  2. Υποβολή job με χρήση της συνάρτησης batch

    job_rome = batch(cluster_rome,@run_parallel,2,'Pool',16,'CurrentFolder','.');
    
    Με την ανωτέρω εντολή τρέχουμε το script run_parallel( ) δεσμεύοντας 64 πυρήνες στο partition rome και λαμβάνουμε από το script 2 εξόδους. Περισσότερες οδηγίες για την υποβολή με χρήση της συνάρτησης batch μπορείτε να βρείτε here.

  3. Όταν υποβάλλουμε job στο cluster μέσω του desktop μπορούμε να συνεχίσουμε να χρησιμοποιούμε το Matlab, σε περίπτωση που θέλουμε να δεσμευτεί το matlab μέχρι να τελειώσει το job μπορούμε να χρησιμοποιήσουμε την εντολή

    wait(job_rome)
    
    για να μπορέσουμε να δούμε το output του job
    output = fetchOutputs(job_rome)
    

  4. Από τη στιγμή που κάνουμε fetchOutputs(job), τα δεδομένα που θέλουμε είναι αποθηκευμένα στο output και μπορούμε να διαγράψουμε το job.
    delete(job_rome)
    clear job_rome
    
  5. Σε περίπτωση που θέλουμε να ακυρώσουμε κάποιο job που στείλαμε, μπορούμε να χρησιμοποιήσουμε τη plugin συνάρτηση cancelJobFcn( ), όπου δέχεται ως παραμέτρους το cluster αντικείμενο που φτιάξαμε για να κάνουμε submit το job καθώς και το job που θέλουμε να ακυρώσουμε.
    cancelJobFcn(cluster_rome,job_rome);
    
    Από τη στιγμή που στείλαμε το job μπορούμε (αν δεν έχουμε δεσμεύσει το desktop μας να περιμένει) να χρησιμοποιήσουμε το matlab και να κάνουμε fetchOutputs στο command line του Matlab.

Τροποποίηση Cluster Profile ή Cluster Object

Μπορούμε πριν φτιάξουμε το cluster object μας να κάνουμε τις αλλαγές που θέλουμε στο cluster profile μέσω του cluster manager (Home->Enviroment-Parallel->Create and Manage Profiles). Mπορούμε να τροποποιήσουμε τις μεταβλητές AdditionalProperties πχ. NumberOfNodes και στη συνέχεια να μεταβούμε στη δημιουργία του cluster object. Αλλιώς μπορούμε μέσα στο script να φτιάξουμε το cluster object και στη συνέχεια να κάνουμε τις αλλαγές που θέλουμε.

cluster_obj = parcluster("rome_partition");
cluster_obj.AdditionalProperties
Γενικά τα AdditionalProperties είναι σε μορφή string, έστω θέλουμε να αλλάξουμε το χρονικό διάστημα για το οποίο θέλουμε να τρέξουμε το job μας
cluster_obj.AdditionalProperties.Time = '02:00:00';
Τώρα το κάναμε 2 ώρες αντί για 50 λεπτά που ήταν. Με παρόμοιο τρόπο μπορούμε να μεταβάλλουμε και τις υπόλοιπες παραμέτρους

Χρήση RemoteConnection

Μπορούμε να χρησιμοποιήσουμε το RemoteConnection του cluster object, που φτιάξαμε, για να τρέξουμε εντολές μέσω ssh στο cluster πχ. 'squeue' για να δούμε την κατάσταση του job μας.

Αρχικά παίρνουμε το RemoteConnection σε κάποια μεταβλητή με τη χρήση της συνάρτησης getRemoteConnection( ) των plugin scripts.

cluster_connection = getRemoteConnection(cluster_obj);
και στη συνέχεια μπορούμε να χρησιμοποιήσουμε την συνάρτηση runCommand( ) του RemoteConnection object που έχουμε, η runCommand( ) επιστρέφει 2 εξόδους όπου το αποτέλεσμα της εντολής είναι η δεύτερη έξοδος.
[status,result] = cluster_connection.runCommand("squeue -u username")
Με παρόμοιο τρόπο μπορούμε να τρέξουμε οποιαδήποτε εντολή μέσω της ssh σύνδεσης που έχει δημιουργηθεί για την υποβολή εργασιών.