- EN: This page is not translated to English.
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ć?
-
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