Slurm Ayrıntılı Kurulumu Ve Konfigürasyonu



İçerik

  • Nedir
  • Kurulum
  • Konfigürasyon ve Çalıştırma
  • İş Gönderme

Nedir

Slurm süper bilgisayar merkezlerinin kullandığı bir kaynak yönetim yazılımıdır. Çalıştırılacak paralel çalışan programların uygun şekilde bilgisayarlar arasında dağımıtımını, kontrolünü ve izlenmesini sağlar.

Slurmctld isimli bir adet ControlMachine üzerinde çalışan Slurm Controller, Compute Node'lar üzerinde çalışan Slurmd Daemon'ı ve bunların iletişiminin şifrelenmesini ve yetkilendirilmesini sağlayan munge isimli servisten oluşmaktadır. 


İş teslimi için makina üzerinde munge servisi olmalıdır. Srun, sbatch komutları ile iş teslimi yapılır. İş SlurmController'a gider ve burdan Slurm Daemon'lara dağıtılır. Slurm'da iş yönetimi kısaca bu şekilde yapılır.  Aşağıdaki şablon Slurm çalışma sistemini kısaca özetler.



Kurulum

Not 1: Kurulum CentOs sistemler için anlatılmıştır
Not 2: Kurulum yaparken sabit bir dizin belirlenmiştir
  1. Munge: Slurm için lazım olan Authentication Plugin'i indirilir ve kaynaktan aşağıdaki şekilde kurulur. Slurm'la iş gönderilecek makinada mutlaka munge aynı anahtara sahip olacak şekilde kurulmalıdır.
    1. http://munge.googlecode.com/ adresinden indirilir.
    2. Munge için şu paketlerin sistemde kurulu olması gerekir.
      yum install gcc make perl openssl-devel.x86_64
    3. ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
    4. make
    5. make install
    6. munge.key oluştumak için aşağıdaki komuttan yararlanılır.
      echo -n "slurm" | sha1sum | cut -d' ' -f1 > /etc/munge/munge.key
      1. Ayrıca munge.key için izinler ayarlanır.
        chown daemon /etc/munge/munge.key
        chmod 700 /etc/munge/munge.key
    7. Son olarak aşağıdaki komutu verip lib dosyalarını cacheliyoruz.
      ldconfig
  2. Slurm https://computing.llnl.gov/linux/slurm/download.html adresinden aşağıdaki şekilde kurulur.
    1. (Database isteniyorsa)Şu paketler sistemde kurulu olmalı mysql-server ve mysql-devel
    2. (Sview arayüz isteniyorsa) Şu paket sistemde kurulu olmalı gtk2-devel.x86_64
    3. ./configure --prefix=/opt/slurm/ --with-mysql_config=/usr/bin/
    4. make
    5. make install


Konfigürasyon ve Çalıştırma

Slurm Konfigürasyonu için şu adresden otomatik olarak oluşturulup /opt/slurm/etc/slurm.conf içine yazılır ya da aşağıdaki örnekten yararlanılabilir. :http://www.schedmd.com/slurmdocs/configurator.html
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ControlMachine=
BackupController=
#ControlAddr=
#BackupAddr=
# 
AuthType=auth/munge
CacheGroups=0
#CheckpointType=checkpoint/none 
CryptoType=crypto/munge
#DisableRootJobs=NO 
#EnforcePartLimits=NO 
#Epilog=
#EpilogSlurmctld= 
#FirstJobId=1 
#MaxJobId=999999 
#GresTypes= 
#GroupUpdateForce=0 
#GroupUpdateTime=600 
#JobCheckpointDir=/var/slurm/checkpoint 
#JobCredentialPrivateKey=
#JobCredentialPublicCertificate=
#JobFileAppend=0 
#JobRequeue=1 
#JobSubmitPlugins=1 
#KillOnBadExit=0 
#LaunchType=launch/slurm 
#Licenses=foo*4,bar 
#MailProg=/bin/mail 
#MaxJobCount=5000 
#MaxStepCount=40000 
#MaxTasksPerNode=128 
#MpiDefault=none
MpiParams=ports=12000-12999
#PluginDir= 
#PlugStackConfig= 
#PrivateData=jobs 
ProctrackType=proctrack/linuxproc
#Prolog=
#PrologSlurmctld= 
#PropagatePrioProcess=0 
#PropagateResourceLimits= 
#PropagateResourceLimitsExcept= 
#RebootProgram= 
ReturnToService=2
#SallocDefaultCommand= 
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=root
#SlurmdUser=root 
#SrunEpilog=
#SrunProlog=
StateSaveLocation=/var/spool
SwitchType=switch/none
#TaskEpilog=
TaskPlugin=task/none
#TaskPluginParam=
#TaskProlog=
TopologyPlugin=topology/tree 
#TmpFs=/tmp 
#TrackWCKey=no 
TreeWidth=250
#UnkillableStepProgram= 
#UsePAM=0 
# 
# 
# TIMERS 
#BatchStartTimeout=10 
#CompleteWait=0 
#EpilogMsgTime=2000 
#GetEnvTimeout=2 
#HealthCheckInterval=0 
#HealthCheckProgram= 
InactiveLimit=0
KillWait=30
MessageTimeout=10 
#ResvOverRun=0 
MinJobAge=300
#OverTimeLimit=0 
SlurmctldTimeout=120
SlurmdTimeout=300
UnkillableStepTimeout=60 
#VSizeFactor=0 
Waittime=0
# 
# 
# SCHEDULING 
#DefMemPerCPU=0 
FastSchedule=0
#MaxMemPerCPU=0 
#SchedulerRootFilter=1 
#SchedulerTimeSlice=30 
SchedulerType=sched/builtin
SchedulerPort=7321
SelectType=select/cons_res
#SelectTypeParameters=CR_CPU
# 
# 
# JOB PRIORITY 
#PriorityType=priority/basic 
#PriorityDecayHalfLife= 
#PriorityCalcPeriod= 
#PriorityFavorSmall= 
#PriorityMaxAge= 
#PriorityUsageResetPeriod= 
#PriorityWeightAge= 
#PriorityWeightFairshare= 
#PriorityWeightJobSize= 
#PriorityWeightPartition= 
#PriorityWeightQOS= 
# 
# 
# LOGGING AND ACCOUNTING 
#AccountingStorageEnforce=0 
AccountingStorageHost=
AccountingStorageLoc=slurmAcctDb
AccountingStorageUser=root
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStorageType=accounting_storage/slurmdbd
AccountingStoreJobComment=YES
#
JobCompHost=
JobCompLoc=slurmAcctDb 
JobCompUser=root
JobCompPass=/var/run/munge/munge.socket.2
JobCompType=jobcomp/filetxt
#
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
#
#
SlurmctldDebug=3
SlurmctldLogFile=/var/log/slurmctld
SlurmdDebug=3
SlurmdLogFile=/var/log/slurmd
#SlurmSchedLogFile= 
#SlurmSchedLogLevel= 
# 
# 
# POWER SAVE SUPPORT FOR IDLE NODES (optional) 
#SuspendProgram= 
#ResumeProgram= 
#SuspendTimeout= 
#ResumeTimeout= 
#ResumeRate= 
#SuspendExcNodes= 
#SuspendExcParts= 
#SuspendRate= 
#SuspendTime= 
# 
ClusterName=orion
# 
# COMPUTE NODES 
NodeName=a1-a10 CPUs=2 State=UNKNOWN 
NodeName=a11-a20 CPUs=4 State=UNKNOWN 


#shortMaxTime 3 saat, longMaxTime 1 hafta
PartitionName=short Nodes=a[1-10] MaxTime=180 State=UP Default=Yes AllowGroups=slurm
PartitionName=mid Nodes=a[11-20] MaxTime=3-0:0:0 State=UP AllowGroups=slurm


Slurm database için /opt/slurm/etc/slurmdbd.conf içine şu dosyadaki konfigürasyon yazılır.
# Sample /etc/slurmdbd.conf 
# 
ArchiveEvents=yes 
ArchiveJobs=yes 
ArchiveSteps=no 
ArchiveSuspend=no 
#ArchiveScript=/usr/sbin/slurm.dbd.archive 
AuthInfo=/var/run/munge/munge.socket.2 
AuthType=auth/munge 
DbdHost=
DbdBackupHost=
DebugLevel=4
PurgeEventAfter=1month 
PurgeJobAfter=12month 
PurgeStepAfter=1month 
PurgeSuspendAfter=1month 
LogFile=/var/log/slurmdbd.log 
PidFile=/var/run/slurmdbd.pid 
SlurmUser=root 
StoragePass=
StorageType=accounting_storage/mysql 
StorageUser=root
StorageLoc=slurmAcctDb


Çalıştırma

  • Öncelikle authentication programı aşağıdaki komut ile çalıştırılmalıdır.
    • service munge start
  • Slurm controller ve daemon aşağıdaki şekilde yapılandırılmalıdır. Slurm'un init.d betiği Slurm'un kaynak dosyası içersindeki etc dizininde mevcuttur. Buradan alınıp /etc/init.d/slurm ismi ile kopyalanır ve aşağıdaki değişiklikler yapılarak slurm servisi hazır hale getirilir.
    • cp slurm/etc/init.d.slurm /etc/init.d/slurm
    • cp slurm/etc/init.d.slurmdbd /etc/init.d/slurmdbd
  • /etc/init.d/slurm ve slurmdbd dosyalarını açıp aşağıdaki değişkenleri(exec_prefix ve prefix) tanımlayalım. Eğer BINDIR,CONFDIR.. bir yanlışlık var ise aşağıdaki gibi yapalım.
    • exec_prefix=/opt/slurm
    • prefix=/opt/slurm
  • Servis başlatılır ve bilgisayar her açıldığında çalışacak şekilde ayarlanır.
    • service  slurm start
    • service slurmdbd start
  • Ve servisler başlangıçta açılacak şekilde ayarlanır
    • chkconfig --level 345 slurm on
    • chkconfig --level 345 slurmdbd on
    • chkconfig --level 345 munge on

İş Gönderme

  • İnteraktif olarak iş göndermek için basit bir helloWorld mpi işi internetten bulunup derlenip aşağıdaki şekillerde gönderilir.
    • srun -N 10 mpijob
    • sbatch job.slurm


İş gönderme ve Slurm kullanımı ile ilgili ayrıntıları bir dahaki yazımda açıklamak üzere

No comments:

Post a Comment