<style>
.reveal {
font-size: 24px;
}
</style>
<!-- .slide: data-background="#FFFFFF" -->
# Introduction to AUTH’s HPC infrastructure: Aristotelis

> Α. Χαραλαμπίδου - Μονάδα Ψηφιακής Διακυβέρνησης ΑΠΘ
---
<!-- .slide: data-background="#FFFFFF" -->
## Πώς μπορούμε να χρησιμοποιήσουμε έναν υπερυπολογιστή;
Έστω ότι ο σκοπός μας είναι να τρέξουμε το παρακάτω R script:
```
numbers <- c(5, 10, 15, 20)
avg <- mean(numbers)
cat("The average is:", avg)
```
Εάν έχουμε ένα πολύ μεγάλο dataset της τάξης των δεκάδων GB;
---
### Ανατομία ενός HPC cluster (συστοιχίας)
<!--
- Αποτελείται από πολλούς υπολογιστές (εξυπηρετητές) που ονομάζονται nodes (κόμβοι)
- Τα nodes "συνδέονται" μεταξύ τους μέσω δικτύου υψηλού εύρους (high bandwidth) και χαμηλoύ χρόνου απόκρισης (low latency)
- Μπορούν να χρησιμοποιηθούν είτε "συμβατικά" Tower PCs είτε servers
-->
* Αποτελείται από πολλούς υπολογιστές (εξυπηρετητές) που ονομάζονται nodes (κόμβοι)
* Τα nodes "συνδέονται" μεταξύ τους μέσω δικτύου υψηλού εύρους (high bandwidth) και χαμηλού χρόνου απόκρισης (low latency)
| Nodes (κόμβοι) | Διασύνδεση κόμβων |
|:-----:|:-----:|
|  |  |
---
<!-- .slide: data-background="#FFFFFF" -->
### Είδη κόμβων (nodes)
| Είδος | Περιγραφή |
| ------------- | ------------------------------------------------------- |
| Login | Για την σύνδεση στην υποδομή (π.χ. SSH) |
| Compute | Εδώ εκτελούνται οι υπολογιστικές εργασίες σε batch mode |
| Storage | Κόμβοι στους οποίους αποθηκεύονται τα δεδομένα |
| Services | Βοηθητικές υπηρεσίες (scheduler, web servers etc) |
| Visualization | Οπτικό pre/post-processing δεδομένων |
---
<!-- .slide: data-background="#FFFFFF" -->
### Τυπική διαδικασία batch computing

---
### Υποδομή Αριστοτέλης (1/2)
<!-- .slide: data-background="#FFFFFF" -->
:::success
:bulb: Η/Υ (server) ίδιων χαρακτηριστικών ομαδοποιούνται σε partitions (ή ουρές)
:::
| Partition Name | Number of nodes | Number of CPU Cores per node | Memory per node | CPU | GPU Type |
| -------------- | --------------- | ---------------------------- | --------------- | ------------ | -------- |
| **`batch`** | 20 | 20 | 128GB | Broadwell | - |
| **`rome`** | 17 | 128 | 256GB/1TB | Epyc Rome | - |
| `gpu` | 2 | 20 | 128GB | Broadwell | P100 |
| `ampere` | 1 | 128 | 1TB | Epyc Rome | A100 |
| `ondemand` | 12 | 12 | 48GB | Cascade Lake | RTX 6000 |
:::info
:point_right: Πιο λεπτομερής καταγραφή: https://hpc.it.auth.gr/nodes-summary/
:::
----
<!-- .slide: data-background="#FFFFFF" -->
### Υποδομή Αριστοτέλης (2/2)

---
<!-- .slide: data-background="#FFFFFF" -->
## Slurm scheduler
- Προκειμένου οι χρήστες να μην χρησιμοποιούν ταυτόχρονα τους ίδιους πόρους χρησιμοποιείται ένας χρονοδρομολογητής (scheduler) εργασιών που αποφασίζει ποιά εργασία ποιού/-ας χρήστη θα τρέξει σε ποιό (ή ποιά) μηχανήματα.
- Ο χρήστης καθορίζει τις απαιτήσεις του εκάστοτε job, π.χ.:
- το όνομα του job
- ποιό partition θα χρησιμοποιήσει
- πόσα CPU Cores θα χρειαστεί
- για πόση ώρα...
- Στόχος του scheduler είναι να αξιοποιούνται οι υποκείμενοι πόροι πλήρως και να είναι ευχαριστημένοι οι χρήστες
:::info
:point_right: Αναλυτική τεκμηρίωση slurm directives: https://hpc.it.auth.gr/jobs/slurm/
:::
---
<!-- .slide: data-background="#FFFFFF" -->
### Πώς μπορώ να αποκτήσω λογαριασμό;
Πρόσβαση στον Αριστοτέλη μπορούν να έχουν [όλα τα μέλη του ΑΠΘ](https://it.auth.gr/service/univid/?tab=service_conditions).
* Φοιτητές
* Ερευνητές
* Καθηγητές
* Προσωπικό
* Συνεργάτες μελών ΑΠΘ
:::warning
:warning: Ενεργοποίηση μέσω https://myaccount.auth.gr
:::
---
<!-- .slide: data-background="#FFFFFF" -->
### Πώς μπορώ να συνδεθώ στον Αριστοτέλη;
* Μέσω γραμμής εντολών (Windows Powershell, WSL, 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/
:::
----
<!-- .slide: data-background="#FFFFFF" -->
### Θα πρέπει να χρησιμοποιώ command line; !!!
Όχι απαραίτητα!
Αλλά τα παρακάτω είναι αρκετά:
* Πίνακας χρήσιμων εντολών: https://hpc.it.auth.gr/cheat-sheet/
* Εισαγωγή στη γραμμή εντολών (bash shell): https://hackmd.io/@pkoro/H1bqSpwXp
---
### Διαθέσιμο λογισμικό (1/3)
- υπολογιστικές βιβλιοθήκες (όπως `fftw`, `openblas`)
- compilers (μεταγλωτιστές) (όπως `gcc`, `intel`)
- interpreters (όπως `python`, `perl`, `R`)
- βιβλιοθήκες παράλληλου προγραμματισμού (όπως `openmpi`, `julia`)
- διεπαφές χρηστών (όπως `Jupyter`, `RStudio`, `PyCharm`)
- ολοκληρωμένα πακέτα εφαρμογών (όπως `ANSYS`, `MATLAB` )
- εργαλεία βιοπληροφορικής (όπως `FastQC`, `BWA`, `SAMtools`, `GATK`)
:::info
:point_right: Λίστες διαθέσιμου λογισμικού: https://hpc.it.auth.gr/software/avail/
:::
----
<!-- .slide: data-background="#FFFFFF" -->
### Διαθέσιμο λογισμικό (2/3)
Για να χρησιμοποιήσουμε ένα λογισμικό πρέπει πρώτα να "φορτώσουμε" ένα module.
:::danger
```
$ R
-bash: R: command not found
```
:::
----
<!-- .slide: data-background="#FFFFFF" -->
### Διαθέσιμο λογισμικό (3/3)
:::success
```
$ module load gcc/14.2.0 r/4.4.1
$ R
R version 4.4.1 (2024-06-14) -- "Race for Your Life"
Copyright (C) 2024 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu
...
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.
[Previously saved workspace restored]
>
```
:::
---
### Παράδειγμα χρήσης `R` (έκδοση `4.4.1`) (1/2)
:::success
```
$ R
> numbers <- c(5, 10, 15, 20)
> avg <- mean(numbers)
> cat("The average is:", avg)
The average is: 12.5>
--> To exit use: Ctrl + D
Save workspace image? [y/n/c]: y
```
:::
----
### Παράδειγμα χρήσης `R` (έκδοση `4.4.1`) (2/2)
```bash
$ Rscript basic_script.R
The average is: 12.5
```
---
<!-- .slide: data-background="#FFFFFF" -->
### Δομή modulefiles
Η δομή των modulefiles είναι **ιεραρχική**, έτσι οι βιβλιοθήκες ή εφαρμογές που έχουν γίνει compile με ένα συγκεκριμένο compiler γίνονται διαθέσιμες μόνο εφόσον έχουμε φορτώσει στο περιβάλλον το δεδομένο compiler.
- Στο 1ο επίπεδο της ιεραρχίας βρίσκονται οι compilers.
- Στο 2ο επίπεδο βρίσκονται οι περισσότερες εφαρμογές.
- Στο 3ο επίπεδο οι παράλληλες (MPI) εφαρμογές.
----
<!-- .slide: data-background="#FFFFFF" -->
### Χρήση `module spider` (1/3)
Παράδειγμα: για να δούμε διαθέσιμες εκδόσεις του εργαλείου `FastQC` (Quality Control tool for high throughput sequence data) μπορούμε να εκτελέσουμε την εξής εντολή:
```
$ module spider fastqc
-----------------------------------------------------------------------------
fastqc:
-----------------------------------------------------------------------------
Versions:
fastqc/0.11.7
fastqc/0.11.9-dwcm5pl
fastqc/0.12.1-ntnqvrl
fastqc/0.12.1
-----------------------------------------------------------------------------
For detailed information about a specific "fastqc" package (including how to load the modules) use the module's full name.
Note that names that have a trailing (E) are extensions provided by other modules.
For example:
$ module spider fastqc/0.12.1
-----------------------------------------------------------------------------
```
- Παρατηρούμε ότι το λογισμικό (`fastqc`) υπάρχει τέσσερις φορές εγκατεστημένο
----
<!-- .slide: data-background="#FFFFFF" -->
### Χρήση `module spider` (2/3)
- Ξανατρέχουμε την εντολή ορίζοντας αυτή τη φορά ακριβώς την έκδοση που θέλουμε να χρησιμοποιήσουμε:
```
$ module spider fastqc/0.12.1
-----------------------------------------------------------------------------
fastqc: fastqc/0.12.1
-----------------------------------------------------------------------------
You will need to load all module(s) on any one of the lines
below before the "fastqc/0.12.1" module is available to load.
gcc/14.2.0
Help:
A quality control tool for high throughput sequence data.
```
----
<!-- .slide: data-background="#FFFFFF" -->
### Χρήση `module spider` (3/3)
Για να φορτώσουμε την έκδοση `fastqc/0.12.1` τελικά χρειάζεται να εκτελέσουμε:
```
$ module load gcc/14.2.0 fastqc/0.12.1
```
---
<!-- .slide: data-background="#FFFFFF" -->
### Σειριακή εργασία
:::success
:bulb: Παράδειγμα σειριακής εργασίας που θέλουμε να εκτελεστεί σε 1 μηχάνημα και να δεσμεύσει 1 CPU Core στο batch partition
```bash
#!/bin/bash
#SBATCH --job-name=R_example
#SBATCH --partition=batch
#SBATCH --time=10:00 # (10 λεπτά)
#SBATCH --nodes=1 # 1 node required
#SBATCH --ntasks=1 # Δέσμευση ενός CPU Core
module load gcc/14.2.0 r/4.4.1
Rscript basic_script.R
```
:::
---
<!-- .slide: data-background="#FFFFFF" -->
### Υποβολή εργασιών (1/2)
- Εφόσον έχουμε ετοιμάσει ένα script (έστω `run.sh`) η υποβολή γίνεται με την εντολή `sbatch`, π.χ.
```
# sbatch run.sh
```
:::success
:bulb: Στην έξοδό της η `sbatch` επιστρέφει ένα ID (auto increment integer) που είναι μοναδικό για κάθε εργασία (job) που υποβάλλουμε με `sbatch`.
:::
- Για να δούμε την κατάσταση της εργασίας χρησιμοποιούμε την `squeue`, π.χ.
```
$ squeue -u {{ username }}
$ squeue -j {{ job_id }}
```
----
<!-- .slide: data-background="#FFFFFF" -->
### Υποβολή εργασιών (2/2)
- Όσο εκτελείται μία εργασία μπορούμε να παρακολουθούμε την έξοδό της από το login node
```
$ tail -f slurm-{{ ID }}.out
```
- Αν θέλουμε να σταματήσουμε την εκτέλεση μίας εργασίας την κάνουμε cancel με την εντολή `scancel`
```
$ scancel {{ ID }}
```
---
<!-- .slide: data-background="#FFFFFF" -->
### Έλεγχος απόδοσης μιάς ολοκληρωμένης εργασίας
Για να δούμε μία εργασία που έχει ολοκληρωθεί πόσους πόρους αξιοποίησε πραγματικά (σε σχέση με όσους δεσμεύτηκαν) και αν τελικά ήταν αποδοτική μπορούμε να χρησιμοποιήσουμε την εντολή `seff`, π.χ. ως εξής:
```
$ seff {{ ID }}
```
---
<!-- .slide: data-background="#FFFFFF" -->
## Προτεραιότητα εργασιών
Οι βασικοί παράγοντες που καθορίζουν την προτεραιότητα των εργασιών είναι οι εξής:
:::info
* Χρόνος αναμονής
* Μέγεθος εργασίας
* Fairshare (δίκαιη κατανομή πόρων)
:::
Μπορούμε να δούμε την προτεραιότητα των εργασιών σε ένα partition με την εξής εντολή:
```
$ sprio -l -p rome
```
----
<!-- .slide: data-background="#FFFFFF" -->
## Εκτίμηση χρόνου εκκίνησης εργασίας
Μπορούμε να έχουμε μιά εκτίμηση του πότε θα ξεκινήσει να εκτελείται μία εργασία προσθέτοντας την παράμετρο `--start` στην `squeue`, ως εξής:
```
$ squeue --start -j <jobid>
```
----
<!-- .slide: data-background="#FFFFFF" -->
## Έλεγχος accounting records
Για να δούμε τις εργασίες που έχουμε τρέξει σε ένα βάθος χρόνου μπορούμε να χρησιμοποιήσουμε την εντολή `sacct`, π.χ. ως εξής:
```
$ sacct -S now-5days # Εργασίες που έτρεξαν τις τελευταίες 5 ημέρες
```
----
<!-- .slide: data-background="#FFFFFF" -->
## Έλεγχος κατάστασης ενός partition
Για να ελέγξουμε την διαθεσιμότητα των κόμβων ενός partition μπορούμε να χρησιμοποιήσουμε την εντολή `sinfo`, π.χ. ως εξής:
```
$ sinfo -p rome
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
rome up 2-00:00:00 3 mix cn[32-34] # μερικώς κατηλειμένα
rome up 2-00:00:00 4 alloc cn[35-36,38-39] # πλήρως κατηλειμένα
rome up 2-00:00:00 10 idle cn[37,40-48] # άδεια (αδρανή)
```
---
<!-- .slide: data-background="#FFFFFF" -->
## Χρήσιμα links
- Support: hpc-support@auth.gr
- Slack community: https://join.slack.com/t/auth-hpc/shared_invite/zt-2grfxumfa-FGV9TqcD8tmrtm4nDQf~zQ
- Scheduled downtimes: https://hpc.it.auth.gr/maintenance/
- Research results: https://hpc.it.auth.gr/results/