forked from CDS/infrastruktur-dok
Update Workstations-Getting-Started.md
This commit is contained in:
parent
eb0a3cd871
commit
a40a21f83a
@ -2,7 +2,7 @@
|
||||
|
||||
## Hardware
|
||||
|
||||
Für Berechnungen in der Forschung und Lehre stehen an der Fachhochschule verschiedene Workstations zur Verfügung. Eine Übersicht über die Maschinen findest Du hier 
|
||||
Für Berechnungen in Lehre stehen an der Fachhochschule verschiedene Workstations zur Verfügung. Eine Übersicht über die Maschinen findest Du 
|
||||
|
||||
## Zugriff
|
||||
|
||||
@ -14,6 +14,7 @@ Alle Workstations für die Lehre sind nach dem folgenden Muster aufgebaut:
|
||||
|
||||
|Was|Beschreibung|
|
||||
|---|---|
|
||||
|Login|Für das Login mit SSH verwendest Du deinen FH Graubünden Benutzername und Passwort|
|
||||
|Homeverzeichnis mit einer Quota von 80GB pro Benutzer|Welche Möglichkeiten Du hast falls dein Homeverzeichnis voll ist, siehst Du hier |
|
||||
|Ein Verzeichnis ```/scratch``` für die temporäre Ablage von grossen Datenmengen|In diesem Verzeichnis bitte keine vertrauliche Daten ablegen |
|
||||
|Slurm für den Zugriff auf die GPUs|Wie das funktioniert steht im Abschnitt [Job Scheduler und Partitionen](#job-scheduler-und-partitionen)|
|
||||
@ -38,16 +39,26 @@ Eine Berechnung die länger als die durch die Partition vorgegebene Zeit läuft
|
||||
|
||||
Falls Du deutlich mehr als die oben erwähnten Zeitspannen für eine Berechnung brauchst, melde dich beim DAViS Admin.
|
||||
|
||||
Übrigens: sobald deine Berechnung fertig ist, beende auch deinen Slurmjob, zum Beispiel mit ```scancel```. Somit wird die GPU für den nächsten Benutzer freigegeben.
|
||||
Übrigens: sobald deine Berechnung fertig ist beende auch deinen Slurmjob, zum Beispiel mit ```scancel```. Somit wird die GPU für den nächsten Benutzer freigegeben.
|
||||
|
||||
## Slurm
|
||||
|
||||
Mit dem Befehl srun kann ein Slurmjob auf dem Cluster ausgeführt werden. Als simples Beispiel berechnen wir hier die Primfaktoren einer grossen Zahl:
|
||||
Slurm auf den Workstations wird nur zwingend benötigt, wenn deine Berechnung auf der GPU ausgeführt werden soll. Jobs, die nur auf der CPU rechnen, müssen Slurm nicht verwenden. Bei sehr intensiver und lange anhaltender CPU Belegung, empfehlen wir jedoch eine Nutzung von Slurm, damit eine parallel laufende GPU Berechnung nicht gestört wird.
|
||||
|
||||
Welche Hardware wir auf dem Rechner zur Verfügung haben, können wir uns mit dem Befehl
|
||||
|
||||
```
|
||||
srun -p students -n 64 factor 1234567890123456789012345678901234567890
|
||||
sinfo -o "%N %c %m %G" | column -t
|
||||
```
|
||||
Mit der Option `-p` wird die Partition ausgewählt, im obigen Fall die 'students' Partition. Mit der Option `-n` teilen wir Slurm mit, wieviele parallele Tasks (Prozesse) wir ausführen wollen. Da wir pro Computenode 36 physische Cores und pro Core zwei hyperthreading Cores zur Verfügung haben, können wir den Parameter `-n` auf maximal 64 setzen. Sobald die Computerresource frei ist, wird der Befehl `srun` ausgeführt und es werden auf der CPU 64 Prozesse gestartet. Sobald die Berechnung abgeschlossen ist, wird das Ergebniss auf der Kommandozeile ausgegeben.
|
||||
|
||||
anzeigen lassen.
|
||||
|
||||
Mit dem Befehl `srun` kann ein Slurmjob auf dem Cluster ausgeführt werden. Als simples Beispiel berechnen wir hier die Primfaktoren einer grossen Zahl`
|
||||
|
||||
```
|
||||
srun -G a100:1 -p students -n 64 factor 1234567890123456789012345678901234567890
|
||||
```
|
||||
Mit der Option `-p` wird die Partition ausgewählt, im obigen Fall die 'students' Partition. Mit der Option `-n` teilen wir Slurm mit, wieviele parallele Tasks (Prozesse) wir ausführen wollen. Da wir pro Computenode 36 physische Cores und pro Core zwei hyperthreading Cores zur Verfügung haben, können wir den Parameter `-n` auf maximal 64 setzen. Die Option `-G a100:1` fordert eine Nvidia A100 GPU für die Berechnung an. Sobald die Computerresource frei ist, wird der Befehl `srun` ausgeführt und es werden auf der CPU 64 Prozesse gestartet. Sobald die Berechnung abgeschlossen ist, wird das Ergebniss auf der Kommandozeile ausgegeben.
|
||||
|
||||
Für nicht-interaktive und länger laufende Jobs ist es sinnvoll `sbatch` zu verwenden. Damit muss nicht gewartet werden bis die Workstation frei wird, sondern der Jobscheduler übernimmt das Skript und bringt es zur Ausführung sobald die Hardwareresourcen frei sind. An welcher Reihe sich mein Job befindet, kann mit dem Befehl
|
||||
|
||||
@ -59,6 +70,7 @@ Für `sbatch` muss ein Shellskript geschrieben werden das einerseits einen Absch
|
||||
#!/bin/bash
|
||||
|
||||
#SBATCH --output="slurm-%j.out" ## Logfile. The logfile is written to the current directory
|
||||
#SBATCH --error="slurm-%j.err" ## Logfile. The logfile is written to the current directory
|
||||
#SBATCH --time=1:30:00 ## Time limit. Should be equal or smaller than the partitions time limit. In this example the job will be interrupted after 1h and 30 min.
|
||||
#SBATCH --job-name="Mein Test" ## Job name. This will be used in naming directories for the job.
|
||||
#SBATCH --partition=students ## Partition to launch job in
|
||||
@ -68,67 +80,13 @@ Für `sbatch` muss ein Shellskript geschrieben werden das einerseits einen Absch
|
||||
# Execute the python script and pass the argument '90'
|
||||
srun python3 my-mpiProg.py 90
|
||||
```
|
||||
## MPI Hello World
|
||||
|
||||
Der Cluster unterstützt das Message Passing Interface welches das parallele und verteilte Rechnen eines Programms auf mehreren Nodes erlaubt. Um MPI zu nutzen, muss der Programmcode angepasst werden. Ein Hello World mit C und MPI sieht zum Beispiel so aus:
|
||||
Es ist auch möglich eine interaktive Slurm Session zu nutzen. Dazu kann zum Beispiel der folgende Befehl am Workstation Prompt eingegeben werden:
|
||||
|
||||
```
|
||||
#include <stdio.h>
|
||||
#include "mpi.h"
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
char hostname[1024];
|
||||
hostname[1023] = '\0';
|
||||
gethostname(hostname, 1023);
|
||||
|
||||
int ierr;
|
||||
ierr = MPI_Init(&argc, &argv);
|
||||
printf( "Hello from %s\n", hostname);
|
||||
ierr = MPI_Finalize( );
|
||||
exit(ierr);
|
||||
}
|
||||
salloc -p staff --time=00:01:00
|
||||
```
|
||||
|
||||
Da das Programm die MPICH Impelmentierung nutzen soll, laden wir zuerste das entsprechende Module
|
||||
```
|
||||
module load intel mpich
|
||||
```
|
||||
Danach speichern wird den obigen Programmcode in der Datei hello_world_mpich.c und übersetzen den Sourcecode mit dem Befehl:
|
||||
|
||||
```
|
||||
mpicc ./hello_world_mpich.c -o hello_world_mpich
|
||||
```
|
||||
Falls noch nicht erfolgt, sollten sptätestens jetzt, die Cluster Resourcen mit dem Befehl ```salloc``` alloziert werden. Falls alle Clusterresourcen frei sind können diese für einen Benutzer der Gruppe 'Staff' wie folgt alloziert werden:
|
||||
|
||||
```
|
||||
salloc -p staff -n 180 -N 5
|
||||
```
|
||||
|
||||
Danach kann das Program mit dem Befehl
|
||||
|
||||
```
|
||||
mpirun ./hello_world_mpich
|
||||
```
|
||||
ausgführt werden. Der Output sieht wie folgt aus:
|
||||
|
||||
```
|
||||
...
|
||||
Hello from computenode1
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
Hello from computenode1
|
||||
Hello from computenode1
|
||||
Hello from computenode1
|
||||
Hello from computenode5
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
Hello from computenode4
|
||||
...
|
||||
````
|
||||
Danach können
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user