Slurm resursihaldur

Allikas: Kuutõrvaja

Sissejuhatus

Slurm (Simple Linux Utility for Resource Management) on arvutiklastri jaoks mõeldud rakendus mille ülesandeks on jagada etteantud töid mööda arvutiresursse laiali, monitoorida töötavaid protsesse ja pidada tööde üle järjekorda.

Üldiselt näeb slurmi arhidektuur välja sarnane allolevale pildile. On keskne haldusserver, kuhu kasutajad logivad ja käske käivitavad ning terve hulk arvutusnodesid-servereid, milledele slurm töid edastab.

SlurmArchitecture.gif

Slurmi klustri paigaldus

Kõigile nodedele tuleb paigaldada slurmi pakett

# aptitude install slurm-llnl

Tekitame konfiguratsiooni. Slurm kasutab enda tööde kohta info salvestamiseks mysql andmebaasi

Konfiguratsiooni kontrollimiseks

# scontrol show daemons

Slurm kasutab autentimiseks munge nimelist deemonit. Kopeeri /etc/munge/munge.key igasse nodesse ja stardi slurm teenus

# /etc/init.d/slurm-llnl start

Stardi munge

# /etc/init.d/munge start

Testimiseks

$ srun –ntasks=12 –partition=dungeon –label /bin/hostname

Tööde käivitamine

Saadame slurmi töö mis käivitatakse neli korda ja mis väljastab masina kerneli versiooni.

# srun --ntasks=4 uname -a
srun: job 561700 queued and waiting for resources
srun: job 561700 has been allocated resources
idu08
idu08
idu08
idu08

Või soovides käivitada lihtsalt kokku 24 tööd kõigil nodedel ja ja lasta slurmil ise nad jagada laiali

# srun --ntasks=24 --partition=gpu hostname

Tasub muidugi tähele panna, et srun sobib peamiselt testimiseks või väga lihtsateks töödeks ning keerukamatel kasutusjuhtudel tuleks kasutada käske salloc või sbatch Põhimõtteliselt sama esimene näide skriptiga tehtuna, tekitame parallel_uname.sh

 #!/bin/bash
 #SBATCH –J test                     # Seadistab töö nime mida näeb squeue käsuga 
 #SBATCH –N=4                        # Määrab mitut füüsilist serverit kasutatakse
 #SBATCH --ntasks-per-node=4         # Määrab, mitu ülesannet ühel serveril käivitatakse
 #SBATCH --output=kontroll.out       # Väljundfaili nimi – programm ei edastada väljundit kohe ekraanile vaid faili.
 uname -a                            # käsk, mida käivitatakse. Antud juhul uname -a

Lisaks võib seadistada e-maili saatmise töö lõpu korral

#SBATCH --mail-type=END # Type of email notification- BEGIN,END,FAIL,ALL 
#SBATCH --mail-user=ajk@123.com # Email to which notifications will be sent

Paneme käima

# sbatch parallel_uname.sh
Submitted batch job 65918

Ja väljund

# cat slurm-65918.out 
Linux stage59 2.6.32-431.17.1.el6.x86_64 #1 SMP Wed May 7 14:14:17 CDT 2014 x86_64 x86_64 x86_64 GNU/Linux

MPI tööde käivitamine

Message Passing Interface ehk MPI on paraleelsete programmide loomiseks

Kasutamiseks on vaja laadida moodulid

module load intel
module load openmpi

Slurm skript võiks näha välja järgnev

#!/bin/bash
#SLURM -J myjob
#SLURM -p mpi-core8
#SLURM -t 01:00:00
#SLURM -o myjob-%J.out
#SLURM -N 4
#SLURM --ntasks-per-node=8
module load gcc
module load openmpi
cd subdir
mpirun -np 32 ./myapp
exit 0

https://computing.llnl.gov/tutorials/mpi/

http://brazos.tamu.edu/software/openmpi.html

Tööde haldus

Tööde nimekirja näeb

# squeue 
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            561555       gpu   python hpc_tane  R 4-22:47:46      1 idu41
            561544       gpu   punct2  ottokar  R 5-02:52:19      1 idu40
            561538       gpu   punct2  ottokar  R 5-03:06:09      1 idu39
            561528       gpu train_HO hpc_tane  R 6-07:54:01      1 idu40
            561490       gpu train_HO hpc_tane  R 7-06:15:40      1 idu39
            561795      long EUWEST_6    elmer  R   10:09:00      1 idu30
            561802      long EESTI1_7    elmer  R    4:01:17      1 idu02
            561801      long EESTI1_4    elmer  R    4:01:18      1 idu01
            561800      long EUWEST_7    elmer  R    4:01:19      1 idu12
            561794      long SLOVAK_6    elmer  R   10:13:23      1 idu06
            561793      long EESTI1_2    elmer  R   16:04:42      1 idu05
            561792      long EESTI1_6    elmer  R   16:09:14      1 idu03
            561647      long     bash  hpc_kuz  R 3-19:32:13      1 idu04
            561810      long run_R-1- hpc_eero  R    1:58:03      1 idu34
            561811      long run_R-1- hpc_eero  R    1:58:03      1 idu31
            561813      long run_R-1- hpc_eero  R    1:58:03      1 idu32
            561809      long run_R-1- hpc_eero  R    2:08:03      1 idu29
            561806      long run_R-1- hpc_eero  R    2:18:03      1 idu33
            561808      long run_R-1- hpc_eero  R    2:18:03      1 idu35

Töö staatuse nägemiseks tuleb scontrolile anda ette JOBID

# scontrol show job 561581
JobId=561581 Name=SLOVAK_6
   UserId=elmer(10010) GroupId=elmer(10010)
   Priority=1503 Account=(null) QOS=(null)
   JobState=RUNNING Reason=None Dependency=(null)
   Requeue=1 Restarts=0 BatchFlag=0 ExitCode=0:0
   RunTime=09:06:37 TimeLimit=12:00:00 TimeMin=N/A
   SubmitTime=2016-02-25T06:26:02 EligibleTime=2016-02-25T06:26:02
   StartTime=2016-02-25T06:26:02 EndTime=2016-02-25T18:26:02
   PreemptTime=None SuspendTime=None SecsPreSuspend=0
   Partition=long AllocNode:Sid=juur:22238
   ReqNodeList=(null) ExcNodeList=(null)
   NodeList=idu38
   BatchHost=idu38
   NumNodes=1 NumCPUs=8 CPUs/Task=8 ReqS:C:T=2:4:1
   MinCPUsNode=8 MinMemoryNode=18G MinTmpDiskNode=0
   Features=(null) Gres=(null) Reservation=(null)
   Shared=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=/storage/jobs/g-9.sh
   WorkDir=/cluster/elmer

Töö lõppu on muidugi võimatu ette teada/ennustada. Võib-olla umbes töö alustaja ise teab, kaua see VÕIKS aega võtta.

idu seisu vaatamiseks juurest või suvalisest idust anda käsk

# scontrol show node idu38
NodeName=idu38 Arch=x86_64 CoresPerSocket=6
   CPUAlloc=8 CPUErr=0 CPUTot=12 CPULoad=5.82 Features=K20
   Gres=gpu:2
   NodeAddr=idu38 NodeHostName=idu38
   OS=Linux RealMemory=48000 AllocMem=18432 Sockets=2 Boards=1
   State=MIXED ThreadsPerCore=1 TmpDisk=200000 Weight=100
   BootTime=2015-01-21T00:23:33 SlurmdStartTime=2015-01-21T00:24:09
   CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
   ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/ s

Slurmi partitsioonid

Tööde paremaks halduseks on mõistlik erinevad masinad jagada erinevatesse partitsioonide gruppidesse.

Partitsioonide konfiguratsiooni nägemiseks

# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
short*       up      30:00      4  idle~ idu[08-11]
short*       up      30:00     16    mix idu[01-06,12,29-37]
short*       up      30:00      1   down idu07
long         up   infinite      4  idle~ idu[08-11]
long         up   infinite     16    mix idu[01-06,12,29-37]
long         up   infinite      1   down idu07
gpu          up   infinite      5  idle~ idu[08-11,38]
gpu          up   infinite     10    mix idu[01-06,12,39-41]
gpu          up   infinite      1   down idu07

Partitsioonide täpsem info

# scontrol show partition
PartitionName=short
   AllocNodes=ALL AllowGroups=ALL Default=YES
   DefaultTime=NONE DisableRootJobs=NO GraceTime=0 Hidden=NO
   MaxNodes=UNLIMITED MaxTime=00:30:00 MinNodes=1 MaxCPUsPerNode=UNLIMITED
   Nodes=idu[01-12],idu[29-37]
   Priority=100 RootOnly=NO ReqResv=NO Shared=YES:4 PreemptMode=OFF
   State=UP TotalCPUs=204 TotalNodes=21 SelectTypeParameters=N/A
   DefMemPerCPU=2048 MaxMemPerCPU=12288

PartitionName=long
   AllocNodes=ALL AllowGroups=ALL Default=NO
   DefaultTime=NONE DisableRootJobs=NO GraceTime=0 Hidden=NO
   MaxNodes=UNLIMITED MaxTime=UNLIMITED MinNodes=1 MaxCPUsPerNode=UNLIMITED
   Nodes=idu[01-12],idu[29-37]
   Priority=150 RootOnly=NO ReqResv=NO Shared=YES:4 PreemptMode=OFF
   State=UP TotalCPUs=204 TotalNodes=21 SelectTypeParameters=N/A
   DefMemPerCPU=2048 MaxMemPerCPU=12288

PartitionName=gpu
   AllocNodes=ALL AllowGroups=ALL Default=NO
   DefaultTime=NONE DisableRootJobs=NO GraceTime=0 Hidden=NO
   MaxNodes=UNLIMITED MaxTime=UNLIMITED MinNodes=1 MaxCPUsPerNode=UNLIMITED
   Nodes=idu[01-12],idu[38-41]
   Priority=1000 RootOnly=NO ReqResv=NO Shared=YES:4 PreemptMode=OFF
   State=UP TotalCPUs=144 TotalNodes=16 SelectTypeParameters=N/A
   DefMemPerCPU=2048 MaxMemPerCPU=12288

Näiteks antud juhul asuvad GPUsid sisalduvad noded "long" partitsioonist väljaspool, et neile muid arvutusi ei antaks.

Nodede liigutamiseks partitsoonide vahel. /etc/slurm/slurm.conf lõpus on see partitsioonide konf Muuda vastavalt partitsioone, mida tahad ja siis slurmi servisele restart (käivad tööd sellest katki ei lähe).

/etc/init.d/slurm restart

Veateated ja probleemid

Mälulimiit on programmi poolt ületatud

slurmd[n1]: error: Job 60204 exceeded 10240 KB memory limit, being killed
slurmd[n1]: error: *** JOB 60204 CANCELLED AT 2011-05-27T19:34:34 ***

Mälulimiit on seadistatud liiga kõrge olemasoleva mälu jaoks

$ sbatch run.slurm 
sbatch: error: Batch job submission failed: Requested node configuration is not available

http://www.umbc.edu/hpcf/resources-tara-2013/scheduling-policy.php

Node staatus on "down"

Esmalt võiks proovida seda manuaalselt muuta, näiteks:

scontrol update state=MIXED nodename=node84

Lingid

http://www.schedmd.com/slurmdocs/quickstart.html

https://rc.fas.harvard.edu/resources/running-jobs/

http://www.ibm.com/developerworks/library/l-slurm-utility/