SSH

Po zalogowaniu się do węzła dostępowego za pomocą SSH możliwe jest uzyskanie interaktywnej rezerwacji w klastrze obliczeniowym. Takie rozwiązanie jest preferowane do pracy eksperymentalnej lub przygotowania zadań, gdyż uruchamianie obliczeń na węźle dostępowym jest zabronione.

Rezerwacja

Jak każde zadanie obliczeniowe w klastrze rezerwacje interaktywne muszę być inicjowane za pomocą systemu Slurm.

Przed utworzeniem rezerwacji warto sprawdzić obecny stan klastra za pomocą polecenia sinfo. Przykładowy wynik:

PARTITION   AVAIL  TIMELIMIT  NODES  STATE NODELIST
cpu*           up 3-00:00:00      1   idle c1n1
gpu            up 1-00:00:00      2    mix g1n[1,5]
gpu            up 1-00:00:00      2  alloc g1n[2,6]
gpu            up 1-00:00:00      4   idle g1n[3-4],g4n[1-2]
[...]

Interpretacja:

  • węzeł CPU c1n1 jest całkowicie dostępny - idle
  • węzły GPU g1n1 oraz g1n5 są częściowo zajęte - mix
  • węzły GPU g1n2 oraz g1n6 są całkowicie zajęte - alloc
  • węzły GPU g1n3, g1n4, g4n1 oraz g4n2 są dostępne - idle

Dostępny jest także skrypt lscluster pozwalający zobaczyć skondensowany status klastra, przykładowo:

Hostname  Partition     Node Num_CPU  CPUload  Freemem  GRES/node                     Joblist
                       State Use/Tot  (15min)     (GB)                                JobID User GRES/job ...
c1n1           cpu*    idle    0   8    0.00        50  (null)
g1n1            gpu     mix    4  14    0.00*       18  gpu:nvidia_geforce_rtx_4090:1 9089 s123456 gpu:nvidia_geforce_rtx_4090=1
g1n2            gpu   alloc   14  14    0.00*        1* gpu:nvidia_geforce_rtx_4090:1 9086 s123123 gpu:nvidia_geforce_rtx_4090=1
g1n3            gpu    idle    0  14    0.00        50  gpu:nvidia_geforce_rtx_4090:1
g1n4            gpu    idle    0  14    0.00        50  gpu:nvidia_geforce_rtx_4090:1
g1n5            gpu     mix   12  14    0.16*        8* gpu:nvidia_geforce_rtx_4090:1 9120 s321321 gpu:nvidia_geforce_rtx_4090=1
g1n6            gpu   alloc   14  14    1.01*        1* gpu:nvidia_geforce_rtx_4090:1 9122 s321123 gpu:nvidia_geforce_rtx_4090=1
g2n1        gpu_csi     mix    1  60    0.28*      216  gpu:nvidia_geforce_rtx_3090:2 9118 user1 (null)
g3n1        gpu_csi     mix   64  90    1.00*      401  gpu:nvidia_a100:4             9096 user2 gpu:nvidia_a100=2
g4n1            gpu    idle    0  14    0.00        50  gpu:nvidia_geforce_rtx_3090:1
g4n2            gpu    idle    0  14    0.00        50  gpu:nvidia_geforce_rtx_3090:1

Kolumny:

  • Hostname - nazwa węzła
  • Partition - jedna z partycji do której należy dany węzeł, w przypadku zadań z wielu partycji zostanie dopisany znak + do nazwy jednej z nich
  • Node State - stan danego węzła
  • Num_CPU - Tot - liczba wszystkich CPU w węźle
  • Num_CPU - Use - liczba CPU aktualnie w użyciu
  • CPULoad (15min) - obciążenie węzła
  • Freemem - ilość dostępnej pamięci RAM w węźle
  • GRES/node - typ i liczba GPU w węźle
  • Joblist - zawiera zadania aktualnie przypisane do danego węzła oraz ewentualne zajęte przez nie GPU, zadanie bez GPU oznaczone jest przez (null)

Listę aktualnie uruchomionych zadań można wyświetlić za pomocą polecenia squeue -l, a tylko własnych po dodaniu parametru -u $USER. Jeśli własna lista jest pusta, to możemy utworzyć nową minimalną rezerwację:

salloc --no-shell

Wywołanie salloc tylko z parametrem --no-shell spowoduje utworzenie rezerwacji o najmniejszych parametrach czyli 1 CPU i 4GB RAM.

Możliwe kontrolowanie wielu parametrów (opisanych w sekcji Slurm), na przykład stworzenie rezerwacji z 4 CPU i 24GB RAM:

salloc --no-shell -c4 --mem=24G
Adnotacja

W powyższym poleceniu została użyta krótka forma -c4 parametru --cpus-per-task=4. Wiele parametrów ma dwie formy. Ponieważ domyślnie uruchamiane jest jedno podzadanie, kontrolowane parametrem --ntasks, specyfikujemy 4 CPU na nasze zadanie za pomocą parametru --cpus-per-task.

Jeśli rezerwacja jest możliwa do zrealizowana od razu, to system zwróci listę przyznanych zasobów, w tym przypadku węzłów obliczeniowych:

salloc: Granted job allocation 67
salloc: Waiting for resource configuration
salloc: Nodes c1n1 are ready for job
Adnotacja

W przeciwnym wypadku wywołanie salloc zwróci odpowiedni komunikat i będzie aktywnie czekać na dostępne zasoby:

salloc: Pending job allocation 67
salloc: job 67 queued and waiting for resources

Użytkownik może anulować rezerwację i przerwać ten stan oczekiwania poprzez wciśnięcie Ctrl+c.

Połączenie z docelowym węzłem

W tym przypadku nasza sesja została przygotowana na węźle c1n1. Możemy się z nią połączyć za pomocą SSH bezpośrednio z węzła dostępowego:

ssh c1n1

Utrzymanie sesji interaktywnej

Zalecamy uruchomienie multipleksera terminala (na przykład tmux lub screen) po połączeniu do docelowego węzła. Uruchomienie multipleksera na węźle dostępowym i późniejsze połączenie do węzłów obliczeniowych nie jest zalecane, gdyż różne węzły dostępowe mogą być dynamicznie przydzielane do użytkowników.

Użycie tego rozwiązania pozwoli uodpornić sesję na problemy z połączeniem między użytkownikiem a węzłem obliczeniowym. Spełnia ono także wiele innych funkcji. Zalecamy zapoznanie się z poradnikiem twórców tmux.

Po uruchomieniu programu poleceniem tmux zostanie utworzona nowa sesja, a terminal użytkownika zostanie rozbudowany o pasek statusu. Po jego lewej stronie znajduje się lista aktualnie otwartych terminali w sesji, a po prawej nazwa węzła wraz z godziną i datą.

Od tak utworzonej sesji można się ręcznie odłączyć za pomocą polecenia tmux detach lub poprzez wciśnięcie kombinacji klawiszy Ctrl+b, d.

Wskazówka

Skróty klawiszowe tmux składają się z tak zwanych akordów klawiszowych. Pod tym pojęciem rozumiane są sekwencję skrótów klawiszowych wykonanych w krótkich odstępach czasu od siebie. W powyższym przypadku użytkownik powinien najpierw wcisnąć skrót Ctrl+b i po jego puszczeniu wcisnąć klawisz d.

Poprawne wykonanie odłączenia zostanie potwierdzone komunikatem:

[detached (from session 0)]

Aby ponownie podłączyć się do tej sesji należy użyć polecenia tmux attach.

W sesji możliwe jest otwarcie wielu terminali jednocześnie. Służy do tego akord Ctrl+b, c. Dostępny jest interfejs pozwalający na łatwe przełączanie między nimi - Ctrl+b, w.

Kończenie pracy

Po zakończeniu pracy z sesją interaktywną należy anulować rezerwację wykonując z dowolnego węzła polecenie:

scancel 67

Alternatywnie można anulować sesję interaktywną, do której jesteśmy aktualnie połączeni przez SSH przez:

scancel $SLURM_JOB_ID

Istnieje także możliwość anulowania wszystkich rezerwacji i zadań w kolejce przez:

scancel --me
Ważne

System obsługi klastra zapisuje także stopień wykorzystania zasobów. Pozostawianie nieużywanych rezerwacji może być podstawą do nałożenia ograniczeń na konto użytkownika.