Erinevus lehekülje "Slurm resursihaldur" redaktsioonide vahel

Allikas: Kuutõrvaja
(Slurmi klustri paigaldus)
(Slurmi klustri paigaldus)
 
143. rida: 143. rida:
 
  # sacctmgr -i add account test Cluster=cluster
 
  # sacctmgr -i add account test Cluster=cluster
 
  # sacctmgr -i add user test Account=test
 
  # sacctmgr -i add user test Account=test
 +
 +
Kasutajale admin õiguste lisamiseks
 +
 +
# sacctmgr modify user test set adminlevel=admin
  
 
Kliendi käivitamine
 
Kliendi käivitamine

Viimane redaktsioon: 3. august 2020, kell 15:09

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

Slurmi server koosneb kolmest suuremast komponendist

  1. munge - autentimiseks
  2. slurmctl - mis juhib selle küljes olevaid kliente
  3. slurmdbd - mis tegeleb kasutusstatistika kogumisega ning vajab omakorda mingit andmebaasi, näiteks Mariadb'd

Munge paigaldamiseks Debianis

# apt-get install libmunge-dev libmunge2 munge

Munge võtme loomine

# sudo dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
# chown munge:munge /etc/munge/munge.key
# chmod 400 /etc/munge/munge.key

See tekkinud fail tuleb kopeerida ka kõigisse klientidesse

# scp /etc/munge/munge.key <node-user>@<node-ip>:/etc/munge/munge.key

Munge käivitamine

# sudo systemctl enable munge
# sudo systemctl start munge

Paigaldame Mariadb sulrmdb jaoks

# apt-get install mariadb-server

Slurm on andmebaasi parameetrite osas üsna nõudlik ning vajab innodb seadistamist

Debianis tuleb avada /etc/mysql/mariadb.conf.d/50-server.cnf ning lisada

innodb_buffer_pool_size=1024M
innodb_log_file_size=64M
innodb_lock_wait_timeout=900

Stardime mariadb

# systemctl start mariadb
# systemctl enable mariadb

Logime sinna sisse ning tekitame Slurmi kasutaja

# CREATE USER 'slurm2'@'localhost' IDENTIFIED BY 'parool';
# GRANT ALL ON slurm_acct_db.* TO 'slurm'@'localhost';

Seejärel võime paigaldada slurmdb, nii andmebaasi enda kui kõik vajalikud andmetabelid tektiab ta seejuures ise

# apt-get install slurmdb

Tekitame slurmdbd seadistusfaili /etc/slurm-llnl/slurmdbd.conf

AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
StorageHost=localhost
DbdHost=server-hostname
StoragePort=3306
StorageUser=slurm
StoragePass=parool
StorageType=accounting_storage/mysql
StorageLoc=slurm_acct_db
LogFile=/var/log/slurm-llnl/slurmdbd.log
PidFile=/run/slurmdbd.pid
SlurmUser=slurm
DebugLevel=1

Paneme slurmdbd käima

# systemctl enable slurmdbd
# systemctl start slurmdbd

Paigaldame slurmctrli. See seadistuse osa on ühine nii peaserveril kui ka kliendil

# apt-get install slurm-wlm

Tekitame talle seadistusfaili, kus defineerime ära ühtlasi ka slurmdb ning esimese kliendi. Selleks lisame faili /etc/slurm-llnl/slurm.conf

ClusterName=slurm 
ControlMachine=server-hostname
ControlAddr=localhost
#
SlurmUser=slurm
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge
StateSaveLocation=/var/spool/slurm/ctld
SlurmdSpoolDir=/var/spool/slurm/d
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/run/slurmctld.pid
SlurmdPidFile=/run/slurmd.pid
ProctrackType=proctrack/pgid
ReturnToService=0
# 
# Timers
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
# 
# Accounting
AccountingStorageType=accounting_storage/slurmdbd
AccountingStoreJobComment=YES
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
# 
# Logging
DebugFlags=NO_CONF_HASH
SlurmctldDebug=3
SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log
SlurmdDebug=3
SlurmdLogFile=/var/log/slurm-llnl/slurmd.log
SlurmSchedLogFile= /var/log/slurm-llnl/slurmschd.log
SlurmSchedLogLevel=3
JobCompType=jobcomp/none
#
# Compute nodes
NodeName=slurm-test NodeAddr=10.40.0.10 Port=17000 Procs=1 State=UNKNOWN 
PartitionName=test Nodes=ALL Default=YES MaxTime=INFINITE State=UP

Slurmctrld käivitamiseks

# systemctl enable slurmctld
# systemctl start slurmctld

Tekitame test clustri ning esimese kasutaja

# sacctmgr -i add cluster cluster
# sacctmgr -i add account test Cluster=cluster
# sacctmgr -i add user test Account=test

Kasutajale admin õiguste lisamiseks

# sacctmgr modify user test set adminlevel=admin

Kliendi käivitamine

# systemctl enable slurmd
# systemctl start slurmd

Testimiseks võib kasutada käsku

$ srun uname -a

Lingid

https://southgreenplatform.github.io/trainings/hpc/slurminstallation/

https://gist.github.com/asmateus/301b0cb86700cbe74c269b27f2ecfbef

https://implement.pt/2018/09/slurm-in-ubuntu-clusters-pt1/

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/