User Tools

Site Tools


en:first_steps:tutorial

This is an old revision of the document!


Tutorial

Celem tej instrukcji jest wykonanie pierwszych kroków na klastrze Eden. Po jej przejściu:

  • zalogujesz się na Eden,
  • sprawdzisz dostępne zasoby,
  • uruchomisz pierwsze zadanie,
  • sprawdzisz jego stan,
  • zakończysz zadanie.

Logowanie

Logowanie do systemu Eden jest możliwe przez SSH.

Z sieci wydziałowej

Będąc w sieci wydziałowej, możesz połączyć się bezpośrednio:

ssh LOGIN_EDEN@eden.mini.pw.edu.pl

Zastąp LOGIN_EDEN swoim loginem na klastrze Eden.

Spoza sieci wydziałowej

Spoza sieci wydziałowej możesz połączyć się pośrednio, wykorzystując serwer wydziałowy jako tzw. jump host.

Służy do tego flaga -J:

ssh -J LOGIN_MINI@ssh.mini.pw.edu.pl LOGIN_EDEN@eden.mini.pw.edu.pl

W tym przypadku najpierw następuje autoryzacja na serwerze wydziałowym, a następnie ruch jest automatycznie przekierowywany na klaster Eden.

Zastąp:

  • LOGIN_MINI swoim loginem wydziałowym,
  • LOGIN_EDEN swoim loginem na klastrze Eden.

Eden, na który logujesz się przez SSH, jest tylko węzłem dostępowym. Nie wykonujemy na nim obliczeń!

Po zalogowaniu mamy dostęp do terminala z systemem Linux oraz do systemu kolejkowego Slurm, za pomocą którego uruchamiamy zadania na klastrze.

Podstawowe komendy

Przydatne polecenia:

  • sfree — wyświetla aktualnie wolne zasoby na klastrze.
  • pestat — pokazuje status węzłów i informacje o tym, kto aktualnie używa zasobów.
  • squeue — wyświetla całą kolejkę zadań.
  • squeue -u LOGIN_EDEN — pokazuje tylko Twoje zadania.
  • sinfo — wyświetla informacje o dostępnych partycjach (kolejkach) i stanie węzłów.
  • sshare -l — wyświetla informacje o udziałach (FairShare) i priorytetach użytkowników.

Zatrzymanie zadania

Jeżeli chcesz przerwać swoje zadanie, najpierw sprawdź jego identyfikator JOBID:

squeue -u LOGIN_EDEN

Następnie użyj:

scancel JOBID

Uruchamianie zadań interaktywnych

Sesja interaktywna jest wygodna do krótkich testów, eksperymentowania oraz sprawdzania kodu na węźle obliczeniowym.

Najpierw zobaczmy, jakie kolejki są dostępne:

sinfo

Widzimy m.in. kolejkę student.

Możemy też sprawdzić, jakie zasoby są obecnie wolne:

sfree

O, widzimy że zarówno węzeł stud-1, jak i stud-2 mają wolne CPU. Uruchommy sesję z:

  • 1 CPU,
  • 4 GB RAM,
  • maksymalnym czasem pracy 30 minut.

Uruchamiamy:

srun -p student -A GROUP_NAME --cpus-per-task=1 --mem=4G --time=00:30:00 --pty bash

Zastąp GROUP_NAME nazwą swojej grupy.

Gdy system przyzna nam zasoby, możemy sprawdzić, na jakim węźle się znajdujemy:

hostname

Widzimy, że dostaliśmy stud-1. Oznacza to, że jesteśmy już na węźle obliczeniowym. Możemy tutaj uruchamiać obliczenia, testować kod, uruchomić Pythona itd.

Po zakończeniu pracy wychodzimy z sesji:

exit

Jeżeli przerwie się połączenie SSH, obliczenia uruchomione w sesji interaktywnej również zostaną przerwane.

Można temu zapobiec, korzystając np. z tmux albo screen.

Co oznaczają poszczególne opcje?

  • srun — narzędzie służące do uruchamiania zadań. W tej konfiguracji pozwala na pracę interaktywną.
  • -p student — wybiera partycję (kolejkę) o nazwie student.
  • -A GROUP_NAME — przypisuje zadanie do konkretnej grupy rozliczeniowej lub projektu.
  • –cpus-per-task=1 — żąda jednego rdzenia CPU.
  • –gres=gpu:NUM_OF_GPUS — żąda dostępu do określonej liczby GPU, np. –gres=gpu:1
  • –mem=MEM_IN_MBYTES — rezerwuje pamięć RAM dla całego zadania, np. –mem=4000M, lub –mem=4G
  • –time=TIME — ustala maksymalny czas trwania zadania w formacie DD-HH:MM:SS, np. –time=00:30:00. Po upływie tego czasu zadanie zostanie zakończone.
  • –pty bash — tworzy interaktywny pseudoterminal z powłoką Bash.

Zadania wykonywane w tle

Do dłuższych obliczeń nie należy używać sesji interaktywnej. Lepszym rozwiązaniem są zadania wysyłane za pomocą sbatch.

Opis zadania oraz wymagane zasoby zapisujemy w pliku tekstowym.

Plik składa się z:

  • dyrektyw Slurma — linii zaczynających się od #SBATCH,
  • poleceń, które mają zostać wykonane.

Pierwsza linia powinna wskazywać interpreter, np.:

#!/usr/bin/env bash

Przykład krok po kroku

1. Przygotowanie programu

Utwórzmy prosty program w Pythonie:

echo 'print("Hello Eden")' > hello.py

2. Przygotowanie skryptu Slurm

Tworzymy plik hello.sh o następującej zawartości:

#!/usr/bin/env bash
#SBATCH --partition student
#SBATCH --account=GROUP_NAME
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:0
#SBATCH --mem=4G
#SBATCH --time=00:10:00
#SBATCH --job-name=hello_test
#SBATCH --output=slurm_logs/hello_test-%j.log
 
python3 hello.py

Zastąp GROUP_NAME nazwą swojej grupy.

Symbol %j w nazwie pliku zostanie automatycznie zastąpiony numerem JOBID danego zadania.

3. Utworzenie katalogu na logi

Przed wysłaniem zadania upewnij się, że katalog na logi istnieje.

Slurm nie utworzy go automatycznie.

mkdir -p slurm_logs

4. Wysłanie zadania

Wysyłamy zadanie do kolejki:

sbatch hello.sh

Slurm zwróci komunikat podobny do:

Submitted batch job 1752516

Liczba na końcu to JOBID zadania.

Możemy sprawdzić, czy zadanie znajduje się w kolejce:

squeue -u LOGIN_EDEN

5. Sprawdzenie wyniku

Po zakończeniu zadania wynik znajdziemy w katalogu slurm_logs.

Przykładowo, jeżeli JOBID zadania wynosi 12345:

cat slurm_logs/hello_test-12345.log

Powinniśmy zobaczyć:

Hello Eden

Zadanie, które możemy zobaczyć w kolejce

Poprzedni program wykonuje się tak szybko, że możemy nie zdążyć zobaczyć go za pomocą squeue.

Zmieńmy więc hello.py na:

import time
 
print("Hello Eden")
time.sleep(30)
print("Hello Eden after sleep")

Ponownie uruchamiamy:

sbatch hello.sh

i od razu sprawdzamy kolejkę:

squeue -u LOGIN_EDEN

Przez około 30 sekund powinniśmy zobaczyć nasze zadanie na liście.

Po jego zakończeniu ponowne wykonanie:

squeue -u LOGIN_EDEN

nie powinno już go pokazywać.

Czym jest Slurm?

Slurm jest systemem zarządzania klastrami i planowania zadań powszechnie wykorzystywanym w środowiskach HPC i na superkomputerach.

Jego głównym zadaniem jest:

  • przydzielanie użytkownikom zasobów obliczeniowych,
  • zarządzanie kolejką zadań,
  • uruchamianie zadań na dostępnych węzłach,
  • zwalnianie zasobów po zakończeniu obliczeń.

Typowy przebieg pracy wygląda następująco:

  1. Użytkownik przygotowuje skrypt sbatch, w którym określa potrzebne zasoby i polecenia do wykonania, a następnie wysyła zadanie do kolejki.
  2. Slurm sprawdza dostępność zasobów.
  3. Gdy odpowiednie zasoby są dostępne, Slurm je rezerwuje i uruchamia zadanie.
  4. Po zakończeniu obliczeń zasoby zostają zwolnione i mogą zostać przydzielone kolejnemu zadaniu.

Oficjalna dokumentacja:

Dokumentacja Slurm

Dalsze kroki

TODO

en/first_steps/tutorial.1790535530.txt.gz · Last modified: by pchojecki