This is an old revision of the document!
Table of Contents
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_MINIswoim loginem wydziałowym,LOGIN_EDENswoim loginem na klastrze Eden.
Po poprawnym zalogowaniu powinieneś zobaczyć ekran powitalny 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
Przykładowy wynik:
Widzimy m.in. kolejkę student.
Możemy też sprawdzić, jakie zasoby są obecnie wolne:
sfree
Przykładowy wynik:
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
Przykładowe uruchomienie sesji:
Widzimy, że dostaliśmy stud-1. Zmienił się również prompt terminala z @eden na @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 nazwiestudent.-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=4000Mlub–mem=4G.–time=TIME— ustala maksymalny czas trwania zadania w formacieDD-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
Przykład:
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
Przykład dla zadania o JOBID równym 1752516:
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
Przykładowy wynik:
Jeżeli zadanie zostało już uruchomione, przez około 30 sekund powinniśmy zobaczyć je na liście.
W kolumnie ST wartość R oznacza, że zadanie jest aktualnie wykonywane (Running).
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:
- Użytkownik przygotowuje skrypt
sbatch, w którym określa potrzebne zasoby i polecenia do wykonania, a następnie wysyła zadanie do kolejki. - Slurm sprawdza dostępność zasobów.
- Gdy odpowiednie zasoby są dostępne, Slurm je rezerwuje i uruchamia zadanie.
- Po zakończeniu obliczeń zasoby zostają zwolnione i mogą zostać przydzielone kolejnemu zadaniu.
Oficjalna dokumentacja:
Dalsze kroki
TODO
Tutorial przygotowany na podstawie materiałów opracowanych przez Tymona Tumialisa. Dziękujemy za przygotowanie instrukcji, przykładów oraz materiałów graficznych.








