<style>
.reveal {
font-size: 24px;
}
</style>
![it-auth-logo](https://hackmd.io/_uploads/SJBbxhGeR.png)
### Περιγραφή και βασικές οδηγίες χρήσης υποδομής “Αριστοτέλης” του ΑΠΘ
---
## Ηigh Performance Computing (HPC)
- Με τον όρο HPC αναφερόμαστε σε υπολογιστικές υποδομές αιχμής που μπορούν να επιτελέσουν πολλές αριθμητικές πράξεις στη μονάδα του χρόνου με σκοπό:
- είτε να επιλυθούν υφιστάμενα προβλήματα πιο γρήγορα (π.χ. πρόγνωση καιρού)
- είτε να επιλυθούν μεγαλύτερα προβλήματα (π.χ. κλιματική αλλαγή)
- Το πλήθος των υπολογισμών στη μονάδα του χρόνου εξαρτάται *κυρίως* από την ταχύτητα του επεξεργαστή και το εύρος διαμεταγωγής δεδομένων από και προς τη μνήμη RAM
- Μετριέται σε FLOPs (Floating Point Operations per second) και *συνήθως* μας ενδιαφέρει το πλήθος πράξεων με **double precision** floating points
---
## Συστοιχίες HPC
- Φτιάχνοντας συστοιχίες υπολογιστών/εξυπηρετητών (servers) και διασυνδέοντάς τους πετυχαίνουμε υψηλότερες τιμές FLOPs
- Επιπέον τα τελευταία ~20 χρόνια έχει βρει έδαφος η χρήση Co-processors όπως GPUs (π.χ. CUDA, OpenACC κ.α.) ή/και FPGAs (programmable chips) για την επιτάχυνση των υπολογισμών (επίτευξη περισσότερων FLOPs)
- Επιπλέον, για να είναι αποδοτική η παραλληλία συνήθως απαιτείται η διασύνδεση των Η/Υ να γίνεται με δικτύωση χαμηλής απόκρισης (~μs) και υψηλού εύρους (>10Gpbs)
---
<!-- .slide: data-background="#FFFFFF" -->
#### Υφιστάμενη υποδομή "Αριστοτέλης"
![Aristotelis_GA](https://hackmd.io/_uploads/SyeqTlZxA.png)
:::success
:bulb: Η/Υ (server) ίδιων χαρακτηριστικών ομαδοποιούνται σε partitions (ή ουρές)
:::
----
| Partition Name | Number of nodes | Number of CPU Cores per node | Memory per node | CPU Type | GPU Type |
| --- | --- | --- | --- | --- | --- |
| login nodes | 3 | 64 | 64GB | AMD Epyc Rome | - |
| `batch` | 20 | 20 | 128GB | Intel Broadwell | - |
| `gpu` | 2 | 20 | 128GB | Intel Broadwell | P100 |
| `rome` | 17 | 128 | 256GB/1TB | AMD EPYC Rome | - |
| `ampere` | 1 | 128 | 1TB | AMD EPYC Rome | A100 (**x8**) |
| `ondemand` | 12 | 12 | 48GB | Intel Cascade Lake | RTX 6000 (vGPU)|
| ... | ... | ... | ... | ... |
:::info
:point_right: Πιο λεπτομερής καταγραφή: https://hpc.it.auth.gr/nodes-summary/
:::
---
## Πρόσβαση στον "Αριστοτέλη"
- Πρόσβαση δικαιούνται όλα τα μέλη του ΑΠΘ.
:::warning
:warning: Φόρμα αίτησης για λογαριασμό: https://eforms.auth.gr/it/scientific_account/
:::
----
- Μέσω γραμμής εντολών (Windows Powershell, MacOS Terminal, Linux Terminal)
```
# ssh {{ username }}@aristotle.it.auth.gr
```
- Μέσω browser: https://hpc.auth.gr
:::info
:point_right: Οδηγίες πρόσβασης με γραμμή εντολών: https://hpc.it.auth.gr/intro/
:point_right: Οδηγίες πρόσβασης μέσω browser: https://hpc.it.auth.gr/web-portal/
:::
---
:::info
:information_source: Εισαγωγή στη γραμμή εντολών του Linux: https://hackmd.io/@pkoro/H1bqSpwXp
:::success
- Το `nano` είναι καλή επιλογή για "αρχάριους"
:::info
:information_source: Εφόσον ανοίξουμε ένα αρχείο με `nano` μπορούμε να κάνουμε απευθείας edit και να κάνουμε αλλαγές. Στις 2 κάτω γραμμές στο παράθυρο του `nano` μας δίνονται ως επιλογές οι συνδυασμοί πλήκτρων για να σώσουμε τις αλλαγές μας (επιλογή `WriteOut` με <kbd>Crtl</kbd>+<kbd>O</kbd>) και να βγούμε από το περιβάλλον του editor (επιλογή `Exit` με <kbd>Crtl</kbd>+<kbd>X</kbd>)
:::
- Το `vim` έχει πιο απότομο learning curve
:::info
:information_source: To `vim` έχει δύο modes, το command mode και το insert (edit) mode. Όταν ανοίγουμε ένα αρχείο βρισκόμαστε σε command mode. Για να κάνουμε αλλαγές πρέπει να γυρίσουμε τον editor σε insert mode κάτι που γίνεται πατώντας <kbd>i</kbd> στο πληκτρολόγιό μας. Αφότου κάνουμε τις αλλαγές για να τις σώσουμε και να βγούμε από το περιβάλλον του editor πρέπει να επιστρέψουμε σε command mode, κάτι που γίνεται πατώντας το πλήκτρο <kbd>Esc</kbd> στο πληκτρολόγιό μας. Οι εντολές δίνονται επιλέγοντας "άνω κάτω" τελεία στο πληκτρολόγιο (<kbd>:</kbd>). Η εντολή για να σωθούν οι αλλαγές είναι `: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`).
:::info
:point_right: Ενημερωμένες λίστες: https://hpc.it.auth.gr/software/avail/
:::
----
- Καθώς ένα πακέτο λογισμικού μπορεί να είναι (και συνήθως είναι) εγκατεστημένο σε πολλαπλές εκδόσεις χρησιμοποιούνται modulefiles για τη διαχείριση λογισμικών. Δηλαδή π.χ. για να "φορτώσουμε" την εντολή `R` στο περιβάλλον χρήσης είναι απαραίτητο να έχουμε φορτώσει πρώτα το σχετικό modulefile.
:::success
- Παράδειγμα χρήσης `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.
1. Στο πρώτο επίπεδο της ιεραρχίας βρίσκονται οι compilers.
1. Στο δεύτερο επίπεδο βρίσκονται οι περισσότερες εφαρμογές. Έτσι θα πρέπει πρώτα να φορτώσουμε ένα compiler (π.χ. `gcc`).
1. Κάποιες εφαρμογές που είναι παράλληλες (αξιοποιούν τη χρήση μίας mpi βιβλιοθήκης) βρίσκονται σε τρίτο επίπεδο. Έτσι θα πρέπει πρώτα να φορτώσουμε μία MPI βιβλιοθήκη (π.χ. `openmpi`)
----
### Χρήση 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.
:::info
:point_right: Αναλυτική τεκμηρίωση slurm directives: https://hpc.it.auth.gr/jobs/slurm/
:::
----
:::warning
:bulb: Παράδειγμα εργασίας που θέλουμε να εκτελεστεί παράλληλα (με MPI) σε 4 μηχανήματα του `batch` partition
```bash
#!/bin/bash
#SBATCH --job-name=MPI_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 ....
```
:::
----
:::warning
:bulb: Παράδειγμα εργασίας που θέλουμε να εκτελεστεί παράλληλα (με OpenMP) σε "μισό" μηχάνημα του `rome` partition
```bash
#!/bin/bash
#SBATCH --job-name=OPENMP_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....
```
:::
----
:::warning
:bulb: Παράδειγμα εργασίας που θέλουμε να αξιοποιήσει δύο A100 GPUs στο `ampere` partition
```bash
#!/bin/bash
#SBATCH --job-name=GPU_example
#SBATCH --partition=ampere
#SBATCH --time=10:00 # (10 λεπτά)
#SBATCH --gres=gpu:2 # Δέσμευση δύο GPUs
module load ....
srun ....
```
:::
---
## Έλεγχος κατάστασης ενός 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
```
---
## Υποβολή εργασιών
- Εφόσον έχουμε ετοιμάσει ένα script (έστω `run.sh`) η υποβολή γίνεται με την εντολή `sbatch`, π.χ.
```
# sbatch run.sh
```
:::success
:bulb: Στην έξοδό της η `sbatch` επιστρέφει ένα ID (auto increment integer) που είναι μοναδικό για κάθε εργασία (job) που υποβάλλουμε με `sbatch`.
:::
----
- Για να δούμε την κατάσταση της εργασίας χρησιμοποιούμε την `squeue`, π.χ.
```
# squeue -u {{ username }}
```
- Όσο εκτελείται μία εργασία μπορούμε να παρακολουθούμε την έξοδό της από το login node
```
# tail -f slurm-{{ ID }}.out
```
- Αν θέλουμε να σταματήσουμε την εκτέλεση μίας εργασίας την κάνουμε cancel με την εντολή `scancel`
```
# scancel {{ ID }}
```
----
:::info
:timer_clock: Εκτίμηση χρόνου εκκίνησης εργασίας
Μπορούμε να έχουμε μιά εκτίμηση του πότε θα ξεκινήσει να εκτελείται μία εργασία χρησιμοποιώντας την παράμετρο `--test-only` στην sbatch, ως εξής:
$ sbatch --test-only run.sh
sbatch: Job 1708173 to start at 2046-10-11T11:13:44 using 8 processors on nodes cn42 in partition rome
Με την παράμετρο `--test-only` το job **δεν** θα υποβληθεί. Για να μπει στην ουρά το job θα πρέπει να ξανατρέξουμε την εντολή χωρίς την παράμετρο `--test-only`.
:::
---
## Έλεγχος απόδοσης μιάς ολοκληρωμένης εργασίας
Για να δούμε μία εργασία που έχει ολοκληρωθεί πόσους πόρους αξιοποίησε πραγματικά (σε σχέση με όσους δεσμεύτηκαν) και αν τελικά ήταν αποδοτική μπορούμε να χρησιμοποιήσουμε την εντολή `seff`, π.χ. ως εξής:
```
# seff {{ ID }}
```
---
## Έλεγχος accounting records
- Για να δούμε τι εργασίες έχουμε τρέξει σε ένα βάθος χρόνου μπορούμε να χρησιμοποιήσουμε την εντολή `sacct`, π.χ. ως εξής:
```
# sacct -S now-5days # Εργασίες που έτρεξαν τις τελευταίες 5 ημέρες
---
## Υποστήριξη χρηστών
- Email support: hpc-support@auth.gr
----
### Κανάλια επικοινωνίας
- Mailing list: hpc-users@lists.auth.gr
- AUTH HPC Slack: https://join.slack.com/t/auth-hpc/signup
- Message of the day: `/etc/motd`
{"title":"[slides] Περιγραφή και βασικές οδηγίες χρήσης υποδομής “Αριστοτέλης” του ΑΠΘ","description":"it-auth-logo","slideOptions":"{}","contributors":"[{\"id\":\"8ccad8cc-2ebb-49cf-9128-c4c176be3064\",\"add\":12991,\"del\":640}]"}