Przejdź do treści

Status zadania

Po wstawieniu zadania do kolejki poleceniem sbatch system kolejkowy powiadamia nas o przyznanym numerze zadania (JOBID). Jeśli polecenie to wykonamy gdy nasz program został już uruchomiony, możemy między innymi sprawdzić, na których węzłach/procesorach wykonywane są nasze obliczenia. W czasie trwania obliczeń na węźle możemy połączyć się z tym węzłem przy pomocy ssh, nasza sesja zostanie jednak przypisana do tych samych procesorów, które wykorzystuje zadnie. Z tego powodu nadużywanie logowania na węzły może prowadzić do obniżenia wydajności prowadzonych obliczeń.

squeue # lista aktualnie zakolejkowanych/uruchomionych zadań
squeue -l -j <job_ID> # Sprawdź status zadania
squeue --start -j <job_ID> # Sprawdź planowany czas rozpoczęcia zadania
squeue -u $USER # pokaż zadania należące do użytkownika

sstat -a -j ID_zadania/ID_zadania.batch # zużycie zasobów w ramach kroków (step) działającego zadania
sacct # zużycie zasobów zakończonego już zadania/kroku
sacct --format=jobid,jobname,account,partition,ntasks,alloccpus,maxrss,elapsed,state,exitcode -j JOBID
 # informacje o wykorzystaniu zasobów zadania zakończonego o numerze podanym jako JOBID

scontrol show job <job_ID> # informacje o wszystkich parametrach, które system kolejkowy przyznał zadaniu (oczekującemu na uruchomienie / w trakcie obliczeń).

seff <job_ID> # statystki efektywności wykorzystania CPU, RAM dla działąjącego/zakończonego zadania.


scancel <job_ID> # anuluj zadanie
scancel -u $USER # anuluj wszystkie zadania należące do użytkownika
scontrol update jobid=<job_ID> account=<gXX-YYY> # pozwala zaktualizować account z którego rozliczane są zasoby dla danego zadania

Przykład

Wyświetl wszyskie zadania użytkownika john o statusie PD lub R:

squeue --user=john --states=PD,R

Formatowania wydruku „squeue”

# squeue - format output
#  %j   Job or job step name.
#  %i   Job or job step id.

squeue -o "%16j %i"
CLB: batch_HotKar 17817851
CLB: batch_HotKar 17817852
CLB: batch_HotKar 17817853
CLB: d3q27q7 / batc 17817943
CLB: d3q27q7 / batc 17817944
CLB: d3q27q7 / batc 17817945

# wydrukuj drugą kolumnę
squeue -o "%16j %i" | grep "d3q27 *" | awk '{print $2}
17817943
17817944
17817945

Status zadań

W czasie trwania zadania zmienia się jego status. Najczęstsze statusy to PENDING, RUNNING, SUSPENDED, COMPLETING, and COMPLETED.

PD                 Pending (oczekujące). Zadanie czeka na alokację zasobów.
R                  Running (uruchomione). Zasoby zostały przyznane i zadanie jest uruchomione.
S                  Suspended (zawieszone). Zadanie zostało zawieszone.
CA                 Cancelled (anulowane). Zadanie zostało anulowane przez użytkownika lub administratora.
CG                 Completing (prawie ukończone). Zadanie jest w trakcie finalizcji. Niektóre procesy na węzłach moga być jeszcze aktywne.
CD                 Completed (ukończone). Zadanie zostało ukończone na wszystkich węzłach z kodem `0`.
F                  Failed (nie udało się). Zadanie zostało zakończone z kodem innym niż `0` (błąd, brak zasobów, itp).

Dlaczego moje zadania ma status pending?

Kolumna REASON polecenia squeue zawiera powód.

(Resources)

Zadanie czeka aż zasoby będą dostępne.

(Priority)

Zadanie nie jest uruchomione ponieważ zadania o wyższym prorytecie również czekają na zasoby.

(Dependency)

Zadanie czeka aż inne zadanie (zależność) zostanie ukończone (--dependency=... option).

(DependencyNeverSatisfied)

Zadanie czeka na zależność, która nigdy nie zostanie spełniona. Takie zadanie będzie czekać w nieskończonść. Należy je anulować.

(QOSMaxCpuPerUserLimit)

Zadanie nie może zostać uruchomione ponieważ aktualnie uruchomione zadania danego użytkownika osiągneły maksymalny dozwolony limit CPU. Należy zaczekać aż inne zadania zostaną ukonczone.

(AssocGrpCpuLimit)

Jak wyżej.

(AssocGrpJobsLimit)

Zadanie nie może zostać uruchomione ponieważ aktualnie uruchomione zadania danego użytkownika osiągneły limit dozwolonej liczby uruchomionych zadań. Należy zaczekać aż inne zadania zostaną ukonczone.

(ReqNodeNotAvail, UnavailableNodes:...)

Węzły na których miało zostać zrealizowane zadanie nie są dostępne. Najczęstsze powody to: węzły są uzywane w ramach innego zadania, są zarezerwowane, wyłączone, nie odpowiadają, lub są zarezerwowane. Najprawdopodowniej są zarezerwowane na prace administracyjne. Twoje zadanie zostanie uruchomione później. Można wypisać aktywne rezerwację poprzez komendę scontrol show reservation.

Czemu nie mogę dodać kolejnych zadań do kolejki?

_sbatch: error: Batch job submission failed: 
Job violates accounting/QOS policy (job submit limit, user's size and/or time limits)_  

Oznacza to że osiągnąłeś dopuszczalny limit zadań zleconych do kolejki 
w ramach swojego konta użytkownika, `account` lub `qos` SLURM.

Wiecznie oczekujące zadania

Historia użytkownika

Wstawiłem zadanie do kolejki i mimo że na początku była informacja, że zacznie się liczyć następnego dnia (squeue -u $USER --start), obliczenia wciąż nie ruszyły. Za każdym razem, kiedy sprawdzam czy zadanie zostało uruchomione, odkrywam, że termin uruchomienia moich obliczeń sukcesywnie się opóźnia. Do niedawna w rubryce REASON widniał komunikat Priority więc czekałem cierpliwie (scontrol show job 123456). Jednak dziś zauważyłem, że REASON zmienił się na AssocGrpC... i to mnie dość mocno zaniepokoiło, gdyż pamiętam, że taki komunikat wskazywał na wyczerpanie zasobów obliczeniowych. Co może być przyczyną wstrzymywania obliczeń?

Komentarz

Zdarza się że użytkownik wstawi kilka zadań do kolejki a przyznane zadoby są bliskie wyczerpaniu. Zadania z wyczerpaną alokacją otrzymują STATUS Pending w systemie kolejkowym SLURM i zachowują się tak jakby miały wejść za jakiś czas do kolejki (reschedule). Jest to opcja konfiguracyjna SLURM, przydatna gdy zasoby zostały dodane do tego samego account lub konto ma 'samo-odtwarzalne' zasoby per miesiąc.

Co należy zrobić?

  1. Wystąpić o nową alokację.

  2. Jeżeli w Systemie Alokacji Zasobów została przyznana nowa alokacja, to możliwe zaktualizowanie account z którego SLURM rozlicza zasoby dla danego zadania:

scontrol update jobid=<job_ID> account=<gXX-YYY> 

Alternatynie można usunąć zadanie z kolejki (scancel <job_ID>) i uruchomić jeszcze raz w ramach nowej alokacji (account w SLURM).

Więcej szczegółów tutaj.

username@hpc$ squeue -u $USER --start
             JOBID PARTITION     NAME      USER  ST          START_TIME  NODES SCHEDNODES           NODELIST(REASON)
            123456    topola moje_zad jkowalski  PD  2022-03-31T06:39:30    50 (null)               (XXXXXXXXXX)


### ST(Status): examples
#PD - Pending
#R - Running

### NODELIST(REASON): examples
#Resources - waiting for resources to become available
#Priority - queued behind a higher priority job
#AssocGrpC... - limit of granted ... (cpuh) has been reached
#t12-12,t13-[9,12-13] - list of nodes on which the job is running
#JobHoldMaxRequeue - requeueing limit has been reached


username@hpc$scontrol show job 123456
JobId=123456 JobName=moje_zad
   UserId=jkowalski(1234) GroupId=icm-users(2000) MCS_label=N/A
   Priority=8131 Nice=0 Account=gAA_BBB QOS=hpc
   JobState=PENDING Reason=XXXXXXXXXX Dependency=(null)
   Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0
   RunTime=00:00:00 TimeLimit=1-07:00:00 TimeMin=N/A
   SubmitTime=2022-03-25T12:18:35 EligibleTime=2022-03-25T12:18:35
   AccrueTime=2022-03-25T12:18:35
   StartTime=2022-03-31T06:39:30 EndTime=2022-04-01T13:39:30 Deadline=N/A
   SuspendTime=None SecsPreSuspend=0 LastSchedEval=2022-03-25T12:29:21
   Partition=topola AllocNode:Sid=hpc:5628
   ReqNodeList=(null) ExcNodeList=(null)
   NodeList=(null)
   NumNodes=50-50 NumCPUs=50 NumTasks=50 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
   TRES=cpu=50,mem=50G,node=50,billing=50
   Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
   MinCPUsNode=1 MinMemoryCPU=1G MinTmpDiskNode=0
   Features=(null) DelayBoot=00:00:00
   OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=hostname
   WorkDir=/lu/topola/home/jkowal
   Power=
   NtasksPerTRES:0
Ta strona używa plików cookies.
Polityka Prywatności    AKCEPTUJĘ