Try   HackMD

it-auth-logo

Χρήση του λογισμικού OpenCARP στην υποδομή "Αριστοτέλης"


Γενικά περί αξιοποίησης Η/Υ για ερευνητικές ανάγκες

  • Η εκάστοτε θεωρία μας δίνει εξισώσεις που είτε λύνονται αναλυτικά είτε αριθμητικά
    • Οι αναλυτικές επιλύσεις είναι σπάνιες
    • Οι αριθμητικές επιλύσεις απαιτούν υπολογιστικό κόστος ώστε να λυθούν οι εξισώσεις στο πεδίο. Η αριθμητική επίλυση ενός πεδίου ονομάζεται και προσομοίωση και απαιτεί υπολογιστική ισχύ.

:bulb: Χρησιμοποιούμε Η/Υ για την αριθμητική επίλυση εξισώσεων.


Πεδία εφαρμογής

  • Κλιματική αλλαγή και επιστήμες Γης
  • Δομική ανάλυση
  • Μετάδοση θερμότητας
  • Ρευστοδυναμική
  • Αστροφυσική
  • Ηλεκτρομαγνητισμός
  • Βιοπληροφορική κ.α.

Πλήθος αριθμητικών πράξεων στη μονάδα του χρόνου

  • Το πλήθος των υπολογισμών στη μονάδα του χρόνου εξαρτάται από την ταχύτητα του επεξεργαστή και το εύρος διαμεταγωγής δεδομένων από και προς τη μνήμη RAM
  • Μετριέται σε FLOPs (Floating Point Operations per second) και συνήθως μας ενδιαφέρει το πλήθος πράξεων με double precision floating points
  • Το θεωρητικό μέγιστο εξαρτάται κυρίως από τα χαρακτηριστικά του επεξεργαστή
  • Η πραγματική (μετρούμενη) τιμή εξαρτάται από τον κώδικα, από τις βελτιστοποιήσεις που θα κάνει ο compiler (μεταγλωττιστής) ή και όσες έχει υλοποιήσει ο προγραμματιστής (code optimization).

:information_source: Με τον όρο κώδικα αναφερόμαστε στον πηγαίο κώδικα μίας εφαρμογής. Συνήθως ο κώδικας μεταγλωτίζεται σε γλώσσα μηχανής (εκτελέσιμο) με τη χρήση ενός compiler (μεταγλωτιστή). Παραδείγματα τέτοιων γλωσσών είναι η C, C++, FORTRAN κ.α.. Υπάρχουν και interpreted γλώσσες προγραμματισμού (π.χ. Python, MATLAB κ.α.) στις οποίες η μεταγλώτιση γίνεται δυναμικά στο runtime οπότε δεν παρεμβάλεται μεταγλωτιστής που να παράγει ένα εκτελέσιμο. Συνήθως οι compiled γλώσσες παράγουν ταχύτερα εκτελέσιμα σε σύγκριση με τις interpreted γλώσσες.


Περί παράλληλου προγραμματισμού

  • Από το ~2005 και έκτοτε δεν αυξάνεται η συχνότητα των επεξεργαστών αλλά το πλήθος τους (multi core αρχιτεκτονικές).

1-Trends-in-transistor-count-performance-core-count-and-power-over-the-past-decades

  • Αυτή η εξέλιξη έχει οδηγήσει στην υιοθέτηση μεθόδων παράλληλου προγραμματισμού όπου ζητούμενο είναι η ταυτόχρονη εκμετάλευση των πολλών επεξεργαστών.
  • Τα βασικά μοντέλα παραλληλίας είναι:
    • Shared memory parallel processing ή SMP με βιβλιοθήκες όπως OpenMP, pThreads κ.α.
    • Distributed memory parallel processing ή DMP με βιβλιοθήκες όπως MPI
  • Το DMP μοντέλο μπορεί να κάνει scale σε πολλά μηχανήματα ενώ το SMP μπορεί να κάνει scale μόνο εντός ενός H/Y
  • Σε μεγάλους υπερυπολογιστές είναι σύνηθες να χρησιμοποιούνται και τα δύο επίπεδα παραλληλίας (DMP accross nodes και SMP inter node)
  • Επιπέον τα τελευταία χρόνια έχει βρει έδαφος η χρήση Co-processors όπως GPUs (π.χ. CUDA, OpenACC κ.α.) ή/και FPGAs (programmable chips) για την επιτάχυνση των υπολογισμών
  • Για να είναι αποδοτική η DMP παραλληλία απαιτείται η διασύνδεση των Η/Υ να γίνεται με δικτύωση χαμηλής απόκρισης (~μs)

:information_source: Υποδομές που διαθέτουν τα παραπάνω χαρακτηριστικά αναφέρονται γενικώς ως συστοιχίες υπολογιστών. Επίσης χρησιμοποιούνται οι όροι HPC (High Performance Computing) ή Supercomputer (υπερυπολογιστής) όταν αναφερόμαστε σε συστοιχίες υπολογιστών.
Οι σημερινοί (Απρίλιος 2024) υπερυπολογιστές "σπάνε" το φράγμα του HFlop δηλαδή 10^18 υπολογισμών ανά δευτερόλεπτο. Η ταξινόμησή τους βασίζεται στο Linpack benchmark και η λίστα των κορυφαίων υπερυπολογιστών ενημερώνεται δύο φορές ετησίως στο top500.org.


Υποδομή HPC του ΑΠΘ "Αριστοτέλης"

Aristotelis_GA

:bulb: Η/Υ (server) ίδιων χαρακτηριστικών ομαδοποιούνται σε partitions (ή ουρές)

Partition Name Number of nodes Number of CPU Cores per node Memory per node CPU/GPU Type
login nodes 3 64 64GB AMD Epyc Rome/-
batch 20 20 128GB Intel Broadwell/-
rome 17 256 256GB/1TB AMD Epyc Rome/-
ondemand 12 12 48GB Intel Cascade Lake/RTX 6000

:point_right: Πιο λεπτομερής καταγραφή: https://hpc.it.auth.gr/nodes-summary/


Πρόσβαση στον "Αριστοτέλη"

  • Πρόσβαση δικαιούνται όλα τα μέλη του ΑΠΘ.

:warning: Φόρμα αίτησης για λογαριασμό: https://eforms.auth.gr/it/scientific_account/

  • Μέσω γραμμής εντολών (Windows Powershell, MacOS Terminal, Linux Terminal)
# ssh {{ username }}@aristotle.it.auth.gr

:point_right: Οδηγίες πρόσβασης με γραμμή εντολών: https://hpc.it.auth.gr/intro/
:point_right: Οδηγίες πρόσβασης μέσω browser: https://hpc.it.auth.gr/web-portal/


:information_source: Εισαγωγή στη γραμμή εντολών του Linux: https://hackmd.io/@pkoro/H1bqSpwXp

  • Το nano είναι καλή επιλογή για "αρχάριους"

    :information_source: Εφόσον ανοίξουμε ένα αρχείο με nano μπορούμε να κάνουμε απευθείας edit και να κάνουμε αλλαγές. Στις 2 κάτω γραμμές στο παράθυρο του nano μας δίνονται ως επιλογές οι συνδυασμοί πλήκτρων για να σώσουμε τις αλλαγές μας (επιλογή WriteOut με Crtl+O) και να βγούμε από το περιβάλλον του editor (επιλογή Exit με Crtl+X)

  • Το vim έχει πιο απότομο learning curve

    :information_source: To vim έχει δύο modes, το command mode και το insert (edit) mode. Όταν ανοίγουμε ένα αρχείο βρισκόμαστε σε command mode. Για να κάνουμε αλλαγές πρέπει να γυρίσουμε τον editor σε insert mode κάτι που γίνεται πατώντας i στο πληκτρολόγιό μας. Αφότου κάνουμε τις αλλαγές για να τις σώσουμε και να βγούμε από το περιβάλλον του editor πρέπει να επιστρέψουμε σε command mode, κάτι που γίνεται πατώντας το πλήκτρο Esc στο πληκτρολόγιό μας. Οι εντολές δίνονται επιλέγοντας "άνω κάτω" τελεία στο πληκτρολόγιο (:). Η εντολή για να σωθούν οι αλλαγές είναι :w και η εντολή για να βγούμε από τον editor είναι :q. Συνήθως τις δίνουμε μαζί ως :wq (προσοχή στη σειρά των εντολών, το w πρέπει να προηγείται του q).


Διαθέσιμα λογισμικά

  • Στη συστοιχία "Αριστοτέλης" υπάρχει διαθέσιμη μία πλειάδα λογισμικών. Από βασικές υπολογιστικές βιβλιοθήκες (π.χ. fftw, openblas), μεταγλωτιστές (π.χ. gcc, intel), interpreters (π.χ. python, mathematica, matlab, R), βιβλιοθήκες παράλληλου προγραμματισμού (π.χ. openmpi, julia), διεπαφές χρηστών (π.χ. Jyputer, RStudio, PyCharm) εώς και ολοκληρωμένα πακέτα εφαρμογών (π.χ. ANSYS, OpenFOAM, OpenCARP, Einstein Toolkit).

:point_right: Ενημερωμένες λίστες: https://hpc.it.auth.gr/software/avail/

  • Καθώς ένα πακέτο λογισμικού μπορεί να είναι (και συνήθως είναι) εγκατεστημένο σε πολλαπλές εκδόσεις χρησιμοποιούνται modulefiles για τη διαχείριση λογισμικών. Δηλαδή π.χ. για να "φορτώσουμε" την εντολή R στο περιβάλλον χρήσης είναι απαραίτητο να έχουμε φορτώσει πρώτα το σχετικό modulefile.
  • Παράδειγμα χρήσης R (έκδοση 4.3.0)
# R
-bash: R: command not found
# module load gcc/12.2.0-fhg4pj2 r/4.3.0-hybzfui
# R

R version 4.3.0 (2023-04-21) -- "Already Tomorrow"
Copyright (C) 2023 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

During startup - Warning message:
Setting LC_CTYPE failed, using "C" 
> 

Δομή modulefiles

Η δομή των modulefiles είναι ιεραρχική, έτσι οι βιβλιοθήκες ή εφαρμογές που έχουν γίνει compile με ένα συγκεκριμένο compiler γίνονται διαθέσιμες μόνο εφόσον έχουμε φορτώσει στο περιβάλλον το δεδομένο compiler.

Στο πρώτο επίπεδο της ιεραρχίας βρίσκονται οι compilers.

Στο δεύτερο επίπεδο βρίσκονται οι περισσότερες εφαρμογές. Για να τις δούμε όμως θα πρέπει πρώτα να φορτώσουμε ένα compiler.

Κάποιες εφαρμογές που είναι παράλληλες (αξιοποιούν τη χρήση μίας mpi βιβλιοθήκης) βρίσκονται σε τρίτο επίπεδο.

Χρήση spider

Για να δούμε ποιά modulefiles θα χρειαστεί πρώτα να φορτώσουμε προκειμένου να κάνουμε μία εφαρμογή διαθέσιμη στο περιβάλλον χρήσης μπορούμε να χρησιμοποιούμε την module spider. Π.χ. για να δούμε ποιές επιλογές έχουμε διαθέσιμες για να "φορτώσουμε" την βιβλιοθήκη fftw (Fastest Fourier Transform in the West) μπορούμε να εκτελέσουμε την εξής εντολή:

# module spider fftw/3.3.8

-------------------------------------------------------------------------------------------
fftw: fftw/3.3.8
-------------------------------------------------------------------------------------------
    
You will need to load all module(s) on any one of the lines below before the "fftw/3.3.8" m
odule is available to load.
    
    gcc/6.4.0  openmpi/3.1.3
    gcc/7.3.0  openmpi/3.1.3
    gcc/8.2.0  openmpi/3.1.3
    gcc/9.2.0  openmpi/3.1.4
    
Help:
    FFTW is a C subroutine library for computing the discrete Fourier
    transform (DFT) in one or more dimensions, of arbitrary input size, and
    of both real and complex data (as well as of even/odd data, i.e. the
    discrete cosine/sine transforms or DCT/DST). We believe that FFTW, which
    is free software, should become the FFT library of choice for most
    applications.

Βλέπουμε ότι η συγκερκιμένη βιβλιοθήκη (fftw/3.3.8) υπάρχει τέσσερις φορές εγκατεστημένη και για να την φέρουμε στο περιβάλλον χρήσης θα πρέπει να φορτώσουμε πρώτα ένα συνδυασμό του gcc και του openmpi, π.χ.:

# module load gcc/9.2.0 openmpi/3.1.4 fftw/3.3.8

Slurm scheduler

  • Προκειμένου οι χρήστες του "Αριστοτέλη" να μην χρησιμοποιούν ταυτόχρονα τους ίδιους πόρους "μπροστά" από τα partitions βρίσκεται ένας χρονοδρομολογητής (scheduler) εργασιών που αποφασίζει ποιά εργασία ποιού/-ας χρήστη θα τρέξει σε ποιό (ή ποιά) μηχανήματα.
  • Ο χρήστης καθορίζει τις απαιτήσεις του εκάστοτε job με κατάλληλες ντιρεκτίβες που ο slurm scheduler αντιλαμβάνεται. Με βάση αυτές κάνει το matchmaking χρηστών, εργασιών και διαθέσιμων πόρων. Στόχος του scheduler είναι να χρησιμοποιούνται οι πόροι στο maximum.

:point_right: Αναλυτική τεκμηρίωση slurm directives: https://hpc.it.auth.gr/jobs/slurm/

  • Μερικά παραδείγματα:

:bulb: Παράδειγμα εργασίας που θέλουμε να εκτελεστεί παράλληλα (DMP) σε 4 μηχανήματα του batch partition

#!/bin/bash
#SBATCH --job-name=DMP_example
#SBATCH --partition=batch
#SBATCH --time=10:00:00       # (10 ώρες)
#SBATCH --nodes=4             # 4 nodes required
#SBATCH --ntasks-per-node=20  # Δέσμευση όλων των CPU Cores ανά node

module load ....
srun ....

:bulb: Παράδειγμα εργασίας που θέλουμε να εκτελεστεί παράλληλα (SMP) σε "μισό" μηχάνημα του rome partition

#!/bin/bash
#SBATCH --job-name=SMP_example
#SBATCH --partition=rome
#SBATCH --time=1-00:00:00     # (1 ημέρα)
#SBATCH --nodes=1             # 1 node required
#SBATCH --ntasks=64           # Δέσμευση των μισών CPU Cores

export OMP_NUM_THREADS=$SLURM_NTASKS
module load ....
./openmp.exe....

Υποβολή εργασιών

  • Εφόσον έχουμε ετοιμάσει ένα script (έστω run.sh) η υποβολή γίνεται με την εντολή sbatch, π.χ.
# sbatch run.sh

:bulb: Στην έξοδό της η sbatch επιστρέφει ένα ID (auto increment integer) που είναι μοναδικό για κάθε εργασία (job) που υποβάλλουμε με sbatch.

  • Για να δούμε την κατάσταση της εργασίας χρησιμοποιούμε την squeue, π.χ.
# squeue -u {{ username }}
  • Όσο εκτελείται μία εργασία μπορούμε να παρακολουθούμε την έξοδό της από το login node
# tail -f slurm-{{ ID }}.out
  • Αν θέλουμε να σταματήσουμε την εκτέλεση μίας εργασίας την κάνουμε cancel με την εντολή scancel
# scancel {{ ID }}

Έλεγχος απόδοσης μιάς ολοκληρωμένης εργασίας

Για να δούμε μία εργασία που έχει ολοκληρωθεί πόσους πόρους αξιοποίησε πραγματικά (σε σχέση με όσους δεσμεύτηκαν) και αν τελικά ήταν αποδοτική μπορούμε να χρησιμοποιήσουμε την εντολή seff, π.χ. ως εξής:

# seff {{ ID }}

Έλεγχος κατάστασης ενός partition

Για να δούμε την καταληψιμότητα ενός partition μπορούμε να χρησιμοποιήσουμε την εντολή sinfo, π.χ. ως εξής:

# sinfo -p ondemand
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up 2-00:00:00      4    mix cn[88,91-92,98] # μερικώς κατηλειμένα
ondemand     up 2-00:00:00      7  alloc cn[89,93-97,99] # πλήρως κατηλειμένα
ondemand     up 2-00:00:00      1   idle cn90            # άδεια (αδρανή) nodes

OpenCARP

  • Front page: https://opencarp.org/
  • openCARP is an open cardiac electrophysiology simulator for in-silico experiments
    • https://www.sciencedirect.com/science/article/pii/S0169260721002972
    • Ο solver (openCARP simulator) είναι υλοποιημένος σε C++ και χρησιμοποιεί τη μέθοδο των πεπερασμένων στοιχείων (FEM) για την επίλυση των ηλεκτροχημικών και ρευστοδυναμικών πεδίων. Η άδεια χρήσης είναι ανοιχτή για ακαδημαϊκή χρήση.
      • Για παραλληλία χρησιμοποιείται η βιβλιοθήκη MPI (DMP μοντέλο παραλληλίας)
    • Τα carputils είναι υλοποιημένα σε python (Apache 2.0 open source)
    • Υποστηρίζονται αρκετές επιλογές για δεδομένα εισόδου (π.χ. CellML) και για δεδομένα εξόδου (π.χ. VTK format)

Demo @"Αριστοτέλης"

:point_right: Οδηγίες χρήσης στον "Αριστοτέλη": https://hpc.it.auth.gr/applications/opencarp/

Η προεγκατεστημένη έκδοση που θα χρησιμοποιήσουμε στα παραδείγματα είναι η 11.0.

Αρχικοποίηση ρυθμίσεων

  • Για την εκτέλεση της εφαρμογής openCARP χρειάζεται να έχουμε φτιάξει ένα αρχείο ρυθμίσεων στο φάκελο ~/.config/carputils/settings.yaml. Εάν το αρχείο αυτό υπάρχει ήδη τότε το βήμα αυτό μπορεί να παραληφθεί. Αν όχι το βήμα αυτό θα χρειαστεί να το εκτελέσετε μόνο μία φορά πριν την εκτέλεση των παραδειγμάτων που ακολουθούν.

:information_source: Έλεγχος ύπαρξης αρχείου ρυθμίσεων

Για να δούμε αν υπάρχει το αρχείο ρυθμίσεων εκτελούμε την παρακάτω εντολή:

# ls -la ~/.config/carputils/settings.yaml

Αν υπάρχει τότε μπορούμε να προχωρήσουμε παρακάτω

:warning: Εφόσον το αρχείο ρυθμίσεων δεν υπάρχει για να το κατασκευάσουμε κατόπιν νέου login εκτελούμε διαδοχικά τις εξής δύο εντολές:

# module load gcc/9.4.0-eewq4j6  openmpi/4.1.4-btetwly opencarp/11.0-jm36sfo py-numpy/1.23.4-w4wy7j4 py-carputils/oc11.0-qm2676x
# cusettings --mpiexec srun ~/.config/carputils/settings.yaml

Παραδείγματα χρήσης

Ξεκινάμε κάνοντας clone το openCARP experiments repository.

# git clone https://git.opencarp.org/openCARP/experiments.git openCARP_experiments

Single Cell

Έπειτα μεταβαίνουμε στο φάκελο του παραδείγματος

# cd ~/openCARP_experiments/tutorials/01_EP_single_cell/01_basic_bench

Για να αποθηκεύονται τα plots που παράγονται από την batch εργασία, μπορούμε να χρησιμοποιήσουμε την παρακάτω εντολή:

# sed -i s/'plt.show()'/'plt.savefig("myplot")'/g run.py

Με την παραπάνω αντικαθιστούμε τις εντολές plt.show της matplotlib που χρησιμοποιούνται για την εμφάνιση μίας γραφικής παράστασης, με εντολές plt.savefig που αποθηκεύουν σε ένα αρχείο το ίδιο αποτέλεσμα. Έτσι, αφού ολοκληρωθεί η εργασία, θα πρέπει να έχει παραχθεί το αρχείο myplot.png.

Στην συνέχεια, συντάσουμε ένα νέο αρχείο (έστω run.sh) με τα εξής περιεχόμενα:

#!/bin/bash

#SBATCH --job-name=single_cell
#SBATCH --partition=rome
#SBATCH --time=10:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=8

module purge
module load gcc/9.4.0-eewq4j6  openmpi/4.1.4-btetwly opencarp/11.0-jm36sfo py-numpy/1.23.4-w4wy7j4 py-carputils/oc11.0-qm2676x

# run openCARP basic single cell tutorial
./run.py --np $SLURM_NTASKS --EP tenTusscherPanfilov --duration 5000 --bcl 500 --ID exp01 --visualize

η υποβολή της εργασίας γίνεται με την εντολή sbatch ως εξής:

# sbatch opencarp-11.0-single-cell.sh

Παρακολουθούμε με την εντολή squeue την εξέλιξη της εργασίας.

Eφόσον η εργασία έχει εκκινήσει μπορούμε να ελέγχουμε την πρόοδο της επίλυσης μέσω των αρχείων εξόδου. Π.χ.:

# tail -f slurm-*.out

Μόλις η εργασία ολοκληρωθεί, μπορούμε να δούμε ότι στον φάκελο υποβολής έχει παραχθεί το directory με τα αρχεία εξόδου exp01.

Μπορούμε να δούμε και το περιεχόμενά του, για παράδειγμα ως εξής:

# ls exp01

Basic tissue EP

Μεταβαίνουμε στο φάκελο όπου περιέχεται το συγκεκριμένο παράδειγμα

# cd ../../02_EP_tissue/01_basic_usage

Για το συγκεκριμένο παράδειγμα το script υποβολής της εργασίας θα έχει την ακόλουθη μορφή:

#!/bin/bash
#SBATCH --job-name=basic_tissue
#SBATCH --partition=rome
#SBATCH --time=10:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=8

module purge
module load gcc/9.4.0-eewq4j6  openmpi/4.1.4-btetwly opencarp/11.0-jm36sfo py-numpy/1.23.4-w4wy7j4 py-carputils/oc11.0-qm2676x

# run openCARP basic tissue tutorial
./run.py --np $SLURM_NTASKS --duration 20 --S1-strength 20. --S1-dur 15

Η υποβολή της εργασίας γίνεται με την εντολή sbatch, όπως στο προηγούμενο παράδειγμα.


Λίστες δημοσιεύσεων

Οι ερευνητικές δημοσιεύσεις που προκύπτουν από την αξιοποίηση των πόρων της συστοιχίας "Αριστοτέλης" αναρτόνται στον εξής σύνδεσμο:


Ερωτήσεις/Απαντήσεις

  • Ερώτηση
    • Απάντηση