LSF Kullanım Kılavuzu

UHeM sitesinden
Atla: kullan, ara


Sistemimizde LSF HPC v7.0.3 yazılımı yüklüdür.


LSF birden çok bilgisayarın birlikte kullanıldığı sistemlerde (küme, cluster), çalıştırılacak programların verimli çalışabilmesi için gereksinimlerine göre uygun bilgisayarlar üzerinde çalıştırılmasını sağlayan bir iş kuyruk sistemidir. Kuyruk sisteminde boşta yeterli işlemci yoksa, yeterli işlemci boşalıncaya kadar işimiz kuyrukta bekletilir. Böylece birden çok programın aynı kaynağı kullanarak birbirlerini yavaşlatması engellenmiş olur.

Kume.gif


Küme yapısında kullanıcılar kullanacakları bilgisayarlara doğrudan erişemezler. Bunun yerine login node denilen, amacı sadece LSF'e iş vermek olan bilgisayarlara bağlanılır. Burada, LSF komutları ile çalışmasını istedikleri programı bir iş olarak kuyruğa verirler. Sistemde boş işlemciler var ise iş hemen çalışır. Bilgisayarlar uygun değilse, iş çalıştırmak için bekletilir. Bu şekil gerçek hayattaki kuyruklar gibi, sistemde bir yoğunluk varsa işler birikir ve sıraları geldiğinde çalıştırılırlar.


Bizim login node olarak kullandığımız birden fazla bilgisayarımız mevcuttur. Bu makinalara önce VPN Bağlantısı yaptıktan sonra, lnode.uhem.itu.edu.tr adresine ssh bağlantısı yaparak ulaşabilirsiniz.


Kullanıcıların isleri herhangi bir bilgisayarda çalışabileceğinden, tüm bilgisayarlar da aynı disk yapısı mevcuttur. Bizim sistemimizde bu ortak disk alanı /RS adındadır. Çalıştıracağımız programların ve gerek duydukları dosyaların /RS altında bulunması gereklidir.


Kuyruklar

İş bırakmak için öncelikle mevcut kuyruklardan birini seçmemiz gerekmektedir. /RS/progs/kuyruklar KULLANICIADI komutu ile kullanabileceğimiz kuyrukların bir listesini alırız.

 $ /RS/progs/kuyruklar ahmet
 
	      KUYRUK	DURUM		ENCOK  1-KISI	VERILEN	BEKL CALIS	DAKIKA	  SAAT	   GUN
	===============================================================================================
               short	Open:Active	2076     0	   0     0     0 	   180     3.0     0.1
                 mid	Open:Active	2076     0	 164     0   164 	  4320    72.0     3.0
                long	Open:Active	2076     0	1098   320   778 	 10080   168.0     7.0
                ege2	Open:Active	 512     0	1500  1125   375 	 20160   336.0    14.0
               vlong	Open:Active	2076     0	 196    16   180 	 21600   360.0    15.0


Kullanıcılar işlerini yapacakları hesaplamaların çalışma sürelerine uygun kuyruklara teslim edilmelidir. Kuyrukların, işlerin çalışmasına izin verdiği en uzun süreleri DAKIKA, SAAT, GUN cinsinden görebilirsiniz.

Sistemdeki tüm kuyruklar ile ilgili ayrıntılı bilgi /RS/progs/kuyruklar komutu ile bulunabilir:

$ /RS/progs/kuyruklar
 
	    KUYRUK	DURUM		ENCOK	1-KISI	VERILEN	BEKL  CALIS	DAKIKA	  SAAT	   GUN
	===============================================================================================
           hpc_linux	Closed:Active	   0     0	   0     0     0
                 smp	Open:Active	  64     0	   0     0     0
               short	Open:Active	2076     0	   0     0     0 	   180     3.0     0.1
           hbm513_e2	Open:Active	 512   128	   0     0     0 	   360     6.0     0.2
                 mid	Open:Active	2076     0	 176     0   176 	  4320    72.0     3.0
              deci10	Open:Active	2076   256	   0     0     0 	 10080   168.0     7.0
               deci9	Open:Active	2076   256	   0     0     0 	 10080   168.0     7.0
             grad_e2	Open:Active	 512     0	   0     0     0 	 10080   168.0     7.0
                grad	Open:Active	 512     0	   0     0     0 	 10080   168.0     7.0
                long	Open:Active	2076     0	1110   344   766 	 10080   168.0     7.0
            pgrad_e2	Open:Active	 512     0	   0     0     0 	 10080   168.0     7.0
               pgrad	Open:Active	 512     0	  88     0    88 	 10080   168.0     7.0
              serial	Open:Active	   8     2	   0     0     0         10080   168.0     7.0
          monitoring	Open:Active	2076     0	   3     0     3 	 21600   360.0    15.0
         pgrad_vlong	Open:Active	  16     0	   0     0     0 	 21600   360.0    15.0
               vlong	Open:Active	2076     0	 204     8   196 	 21600   360.0    15.0


Bilgisayarların Durumu

Hangi bilgisayar grubuna iş vereceğimize karar verirken, bizim bilmek istediğimiz sadece bilgisayarların doluluk durumudur. Bu amaçla /RS/progs/bosmakinalar komutunu kullanabiliriz:

$ /RS/progs/bosmakinalar
 
                    	ISLEMCI	ISLEMCI	BEKLYEN	MAKINA	MAKINA
        SUNUCU_GRUBU	   BOS	  TUMU	 ISTEK	   BOS	  TUMU
        ============	======	======	======	======	======
        anadolu_dual	   68	  468	    0	   17	  117
        anadolu_quad	    0	  400	    0	    0	   50
                 ege	   32	  328	    0	    4	   41
           karadeniz	    4	  224	  136	    0	   28
 
                ege2	  348	  384	    0	   41	   48
              trakya	   64	   64	    0	    1	    1
     karadeniz_tests	   32	   32	    0	    4	    4
                 gpu	   16	   16	    0	    2	    2
                seri	    7	    8	    0	    1	    2


Sadece belirli bir bilgisayar yada bilgisayar grubundaki iş sayılarına ve yük, hafıza vb. bilgilere bakmak için, bakmak istediğiniz makine adını /RS/progs/makinalar komutuna veriniz:

$ /RS/progs/makinalar trakya
HOST_NAME       STATUS    MAX  NJOBS  RUN  SSUSP USUSP r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem  USER(JobID,Queue)
trakya              ok    64     2     2     0     0	2.0   2.0   2.0   3%   0.0   0  1106 4948M   16G  113G  ahmet(7232,smp) ahmet(4272,smp)


Projeler

İş bırakmak için öncelikle üyesi olduğunuz projelerden birini seçmemiz gerekmektedir. /RS/progs/projelerim komutu ile kullanabileceğimiz projelerin listesini görebiliriz.

 $ /RS/progs/projelerim
bavcc    Ucretsiz  Kapatilmis      Proje suresi bitmistir!
vctyo    Ucretsiz  Calistirabilir
avxd1    Odenmis   Calistirabilir


Yukarıdaki örnek çıktıda Calistirabilir açıklaması gözüken projeler vctyo ve avxd1 projeleridir. Bu proje adlarını iş vermede kullanabiliriz. bavcc projesinin ise Kapatilmis olduğu görülüyor, bu sebeble iş verirken kullanılamaz.


İş Teslimi

Şimdi bu listedeki serial kuyruğu seri (bir işlemci kullanan) işler içindir. Bu kuyruğa bir iş teslim edelim. hostname komutu bulunduğunuz bilgisayarın adını verir. Mesela bizim durumumuzda bu komutu komut satırına yazarsak:

$ hostname
lnode2.uybhm.itu.edu.tr

Bulunduğumuz makinanın adı olan lnode2.uybhm.itu.edu.tr çıktısını elde ettik.


Bu komutu bir de LSF aracılığı ile çalıştıralım. Bunun için öncelikle ortak disk alanına yani /RS dizini altında bir yere gitmeliyiz:

$ cd /RS/users/ahmet


Sonrasında LSF işimizi bsub komutu ile vereceğiz. Ancak unutmayın, işimiz bulunduğumuz makinada değil, başka bir grup makinada çalışacak:

$ bsub -q serial -m seri -o %J.out -e %J.err -P hsaiat  -n 1 hostname
Job <427> is submitted to queue <serial>.

Bu komutta kullandığımız parametrelerin anlamları:

“-q”
parametresi ile kullanılacak kuyruk adını belirtilmiştir.
“-m”
parametresi ile işin çalıştırılacağı sunucu grubu belirtilmiştir.
“-o”
parametresi ile, programın normalde ekrana basacağı yazıların 427.out dosyasına yazılması sağlanır. Buradaki %J yerine iş numarası (JOBID) geliyor yani. %J ile her çalıştırdığımızdaki çıktının ayrı bir dosya oluşturmasını sağladık, çünkü %J ile gelen sayı her seferinde değişecek. Eğer %J kullanmadan, mesela cikti.txt gibi bir isim kullanırsak ve aynı çıktı dosyası ile birden fazla iş çalıştırırsak, tüm çıktılar bu dosyaya eklenir. Yani dosyadaki eski çıktılar silinmeden hemen altından yazmaya devam edilir.
“-e”
parametresi ile, programın ekrana basacağı hata mesajlarını 427.err dosyasına yazması sağlanır.
“-P”
parametresi ise proje adını belirtilmiştir. Örneğimizde proje grup adı hsaiat'dır. Ancak sizinki farklı olacaktır.
“-n”
parametresi ile, kaç işlemci kullanmak istediğimizi söylüyoruz. -n 1 diyerek 1 işlemci kullanacağız dedik.


Bsub komutu ile yapılabilecek Hatalar

Bsub komutunu çalıştırdığınızda en altta

Job <427> is submitted to queue <serial>.


şeklinde bir ifade görmüyorsanız, işiniz kabul edilmemiştir. Bu çeşitli sebeblerle olabilir:

Bsub komutuna komut/dosya adı vermemek

Bsub komutu kullanırken çalıştıracağımız komutu yazmadan ENTER tuşuna basarsanız:


$ bsub -q short
bsub>


şeklinde bir satır açılıp, sizden eksik kısımları yazmanızı bekler. Bu durumdan kurtulmak için Ctrl-C ( yani Ctrl ve C birlikte ) tuşlarına basınız. Bu durum sadece parametreleri verip, bir komut/dosya adı vermediğinizde oluşur.

Diğer Hatalar

Bir komut/dosya adı verdiğiniz ama eksik yada yanlış verdiğinizde oluşacak hatalar için Bsub komutunun hata mesajları sayfasına bakınız.

LSF Betiği ile iş teslimi

Yukarıdaki işi hazırladığımız bir betik şekilde de lsf'e verebilirdik. Bu şekilde aynı dosyayı tekrar tekrar kullanabileceğimizden aslında çok daha pratiktir. Yukarıdaki komutun aynı işi yapan Lsf betiğimiz:

#!/bin/bash
#BSUB -q serial
#BSUB -m seri
#BSUB -o %J.out
#BSUB -e %J.err
#BSUB -P hsaiat
#BSUB -n 1
 
hostname


Şimdi bu betiği isimiz.lsf şeklinde kaydetip, lsf'e verelim. Betiği değiştirme / kaydetme komusunda bilgi edinmek isterseniz Login Sunucularında Dosya İçeriğini Değiştirme dökümanına bakabilirsiniz:


bsub < isimiz.lsf


İşin Durumu

İşinizi teslim ettikten sonra işinizin çalışıp çalışmadığı hakkında bilgi almak için /RS/progs/isler komutu kullanılır:

$ /RS/progs/isler
JOBID     USER              STAT          QUEUE         FROM_HOST    EXEC_HOST        JOB_NAME         SUBMIT_TIME
427       ahmet             PEND          serial        lnode2       -                hostname         Jan 13, 10:06
 
HOST_NAME       STATUS    MAX  NJOBS  RUN  SSUSP USUSP r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem  USER(JobID,Queue)
lnode2      closed_Adm     4     0     0     0     0 	1.5   1.0   0.6  27%   0.0   2     3  488G 8188M   30G


$ /RS/progs/isler
JOBID     USER              STAT          QUEUE         FROM_HOST    EXEC_HOST        JOB_NAME         SUBMIT_TIME
427       ahmet             RUN           serial        lnode2       d001             hostname         Jan 13, 10:06
 
HOST_NAME       STATUS    MAX  NJOBS  RUN  SSUSP USUSP r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem  USER(JobID,Queue)
d001                ok     4     1     1     0     0	0.0   0.0   0.0   0%   0.0   0 20000   26G 8164M 7848M  ahmet(427,serial)


Burada sistemin verdiği cevapta işin durumu (STAT, status) sutunu önemlidir. Eğer STAT alanında PEND ifadesi var ise bu işinizin henüz çalıştırılmadığını gösteriyor. Eğer STAT alanında RUN ifadesi var ise bu işinizin çalıştırılmaya başladığını göstermektedir. EXEC_HOST sütunu bize işin hangi makinelerde çalıştırıldığı hakkında bilgi vermektedir.


$ /RS/progs/isler
No unfinished job found


Yukarıdaki çıktı işimiz sonlandı demek. Ama burada bize işimizin bir hata ile mi yoksa normal bir şekilde mi sonlandığı söylenmiyor. -a parametresi kullanilarak, son zamanlarda sonlanmış işler hakkinda bilgi almak mümkün olmaktadir. Bu bilgileri almak için:

$ /RS/progs/isler -a
JOBID     USER              STAT          QUEUE         FROM_HOST    EXEC_HOST        JOB_NAME         SUBMIT_TIME
427       ahmet             DONE          serial        lnode2       d001             hostname         Jan 13, 10:06
 
HOST_NAME       STATUS    MAX  NJOBS  RUN  SSUSP USUSP r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem  USER(JobID,Queue)
d001                ok     4     1     1     0     0	0.0   0.0   0.0   0%   0.0   0 20000   26G 8164M 7848M

Buradaki DONE bize işin başarı ile ile bittiğini gösteriyor. Eğer bir sorunla karşılaşsa idi EXIT gibi farklı bir durum bilgisi gözükecekti.


Ayrıca eğer istersek /RS/progs/isler 427 şeklinde iş numarasını vererek de sadece o işin durumunu öğrenebiliriz.


Şimdi bir de programın çıktısına bakalım:

$ cat 427.txt
Sender: LSF System <lsfadmin@d001>
Subject: Job 427: <hostname> Done
 
Job <hostname> was submitted from host <lnode2> by user <ahmet>.
Job was executed on host(s) <d001>, in queue <serial>, as user <ahmet>.
</AKDENIZ/users/ahmet> was used as the home directory.
</RS/users/ahmet> was used as the working directory.
Started at Mon Jan 13 10:06:22 2014
Results reported at Mon Jan 13 10:06:30 2014
 
Your job looked like:
 
------------------------------------------------------------
# LSBATCH: User input
hostname
------------------------------------------------------------
 
Successfully completed.
 
Resource usage summary:
 
    CPU time   :      0.02 sec.
    Max Memory :         2 MB
    Max Swap   :        42 MB
 
    Max Processes  :         1
    Max Threads    :         1
 
The output (if any) follows:
 
d001.uybhm.itu.edu.tr
 
 
PS:
 
Read file <427.err> for stderr output of this job.

İşin nerede çalıştırıldığı, başarıyla bitip bitmediği ve ne kadar kaynak kullandığı gibi bilgileri yukarıdaki dosyanın başında bulabiliriz. Teslim edilen işin çıktılarını iş bitmeden görmek de mümkündür. Mesela sürekli olarak ekrana birşeyler yazan programımızın hangi aşamada olduğunu merak ediyorsak bpeek komutunu kullanırız:

$ bpeek 427

Bekleyen İşler

Gelin yine bir işin durumuna bakalım.

$ bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME 
9432 ahmet PEND long lnode2 hostname Mar 20 13:33

Burada işin PEND (pending) durumunda olduğu yani beklediği gözükmekte. İşin niçin beklediğini "bjobs -p" ile soralım:

$ bjobs -p
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME 
9432 ahmet PEND serial lnode2 hostname Mar 20 13:33
Job slot limit reached: 37 hosts;
Not enough processors to meet the job spanning requirement: 31 hosts; 
The CPU utilization (ut) is beyond threshold: 5 hosts;
 
Load information unavailable: 1 host;

Buradaki bilgiler aslında yukarıda bhosts ile aldığımız bilgilerin bir özetidir.

Job slot limit reached
37 hosts
Bu bize long iş verme sınırının aşıldığını ve bu sebeble uygun durumda olsalarda 37 makineye bu sebeble iş veremediğimizi söylüyor.
Not enough processors to meet the job's spanning requirement
satırında söylenen şey makinelerden 31 tanesi bizim işimiz için yeterli miktarda cpu'ya sahip değilmiş.
Load information unavailable
bu satır ise bir makineye ulaşılamadığını söylüyor.
The CPU utilization (ut) is beyond threshold
son satırda ise, 5 makinenin CPU kullanım oranlarının eşiği aştığı için iş kabul edemediğini belirtiyor.

Bu açıklamalar çok kapalı gelebilir, bjobs -p -l ile her satırda bahsedilen makina sayısının yanında bu makinaların adlarının da yazılması sağlanabilir.


Kuyruk seçimi, işlerin beklemede kalmaması için çok önemlidir. LSF'den istediğiniz özellikler ile işi teslim ettiğiniz kuyruğun özellikleri birbiri ile çelişiyorsa işiniz sonsuza kadar beklemede kalabilir.

İş Sonlandırma

UYBHM Sunucu Sistemlerinde çalıştırdığınız ancak beklenilen şekilde sonuç üretmeyen, ya da başka bir nedenle sonlandırmak istediğiniz işlerinizi öldürmek için aşağıda açıklanan komutu kullanabilirsiniz:

bkill <job_id>

bkill komutunun ayrıntıları için man bkill sayfasına bakabilirsiniz.

LSF Dokümantasyonu

Burada anlatılan /RS/progs/ dizinindeki komutlar kullanıcılara kolaylık olması için UHeM tarafindan hazırlanmıştır. Bu komutların lsf karşılıkları için bhosts, lsload, bjobs komutlarının man sayfalarına bakabilirsiniz. Genel bir lsf bilgisi için, man lsfintro komutunu kullanabilirsiniz. man dökümanları hakkında man sayfaları dökümanına bakabilirsiniz.