×
Yeni bir madde oluştur
Sayfa başlığınızı buraya yazın:
We currently have 15 articles on UHeM Wiki. Type your article name above or create one of the articles listed here!



    UHeM Wiki
    15Maddeler

    Sarıyer sistemine iş vermek


    Hızlı Başlangıç Rehberi

    UHeM'deki Sarıyer Kümesini kullanmak için kullanıcılarımız, VPN ile bağlı iken, sariyer.uhem.itu.edu.tr makinasına ssh yapmalıdırlar. Bu makinada işlerini/programlarını doğrudan çalıştırmak yerine, SLURM programına bu işlerini çalıştıran bir betik (ing. script) teslim etmelidirler. SLURM boş/uygun makinada bu işi sizin yerinize çalıştıracaktır.


    Özetle uygulanması gereken adımlar şunlardır:

    1. VPN Bağlantısı Kur, Bağlantı Açık Kalsın (VPN Kılavuzu),
    2. Scp/WinScp ile sariyer.uhem.itu.edu.tr makinasına İş İçin Gereken Dosyaları Yükle (SCP Kılavuzu),
    3. sariyer.uhem.itu.edu.tr makinasına Ssh/Putty Bağlantısı Kur, Aşağıdaki Komutları Orada Çalıştır (LOGINNODE Kılavuzu,SSH Kılavuzu),
      1. SLURM İş Betiği Hazırla (İş Betiği):
        1. projelerim Komutu ile Proje Seç (Proje Bilgisi),
        2. bosmakinalar yada spart Komutu ile Kuyruk Seç (Kuyruklar),
        3. module Komutu ile Program Seç (MODULE Kılavuzu,MODULE Seçimi), yada Kendi ev dizinine kullanacağın programları kur.
        4. nano Komutu ile SLURM Betiği Hazırla, yada /okyanus/progs/slurm_betikleri adresindekilerden kullan ( NANO Kılavuzu),
      2. sbatch Komutu ile SLURM'e İş Betiğini Ver (İş Teslimi),
      3. isler Komutu ile İşin Durumuna Bak (İşin Durumu),
    4. Scp/WinScp ile sariyer.uhem.itu.edu.tr makinasından Sonuç Dosyalarını İndir,
    5. Ssh/Putty Bağlantısını Kapat,
    6. VPN Bağlantısını Kapat.


    Bir kere iş teslimi yaptıktan sonra, işiniz ne durumda olursa olsun (beklemede [PENDING], çalışır durumda [RUNNING] vb.farketmez), ssh ve VPN bağlantınızın açık kalmasına gerek yoktur. İşiniz boş makina bulunduğu zaman otomatik olarak çalıştırılacak ve ekrana yazdıkları slurm tarafından bir dosyaya kaydedilecektir. Siz istediğiniz zaman yeniden VPN ve ssh bağlantısını tekrar yapıp, işinizin durumuna ve sonuçlara bakabilirsiniz.

    Sarıyer Kümesi Donanım Bilgisi

    Bu kümenin hesaplama sunucularının donanımları:

    Makina Adı İşlemci Bilgisi İşlemci Kod Adı Makinadaki İşlemci (Çekirdek) Sayısı Hafıza Miktarı Ağ Kartı Özel Donanım Bu makinalarda Çalışacak Kuyruklar
    sariyer (login node) Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz Broadwell 28 128GB 56 Gbit/s Infiniband YOK Login makinasında iş çalıştırılamaz
    s001 - s080 Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz Broadwell 28 128GB 56 Gbit/s Infiniband YOK defq (varsayılan kuyruk, 7 gün) shortq (1 saat)
    f001 - f003 Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz Broadwell 28 128GB 56 Gbit/s Infiniband Nvidia GP-GPU (Tesla K20m) gpuq (7 gün)
    f004 - f013 Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz Broadwell 28 512GB 56 Gbit/s Infiniband YOK bigmemq (7 gün)
    f014 Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz Cascadelake 40 384GB 100 Gbit/s Infiniband 4 adet Nvidia V100 (NVlink2) v100q (3 gün)
    s101 - s115 Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz Haswell 24 64GB 56 Gbit/s Infiniband YOK longq (21 gün)
    s201 - s235 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz Skylake 40 192GB 100 Gbit/s Infiniband YOK core40q (7 gün)


    Sariyer kümesindeki tüm makinalarda Centos 7 Linux işletim sistemi yüklüdür.

    Disk Sistemi

    Sarıyer kümesinde disk sistemi /okyanus adıyla sisteme bağlıdır. Kullanıcı dosyaları /okyanus/users dizininde, yeni programlar ise /okyanus/progs dizinde bulunur.

    Yeni programları kullanmak için gereken module dosyalarının bir kısmı bir module yüklemeden görülebilmektedir, ancak bir kısmı için ilave-moduller, ilave-moduller2, ilave-moduller3 gibi bir ilave modul dosyası yüklenmelidir (module load ilave-moduller). Sonrasında bu module dosyası yüklenince erişilebilir olan programlar da görülebilecektir.


    Sariyer kümesi tek bir disk içerecek şekilde kurulmuştur. Bazı kümelerde olduğu gibi; scrach, tmp, geçici disk, uzun süreli depolama gibi değişik seviyelerde disk çözümleri yoktur. Dolayısı ile tüm dosyalarınız ve kendinizin kurmak istediğiniz programlar, kendi ev dizininizde bulunmalıdır. İşiniz çalışınca oluşacak tüm dosyalar da yine kendi ev dizininizde oluşacaktır.


    Çok eski bazı programların çalışması için /RS/progs ve /RS/progs2 dizinleri mevcuttur. Bu dizinlerde sadece eski sistemlerden taşınan programlar mevcuttur. Her ne kadar eski karadeniz ve maslak sistemlerindeki programlar, sariyer kümesine taşınmış olsalar da, bu eski programların düzgün çalıştığını göstermez. Eski programları gerçekten gerekli olmadıkça kullanmayınız.


    Eski sistemlerdeki module dosyaları da yeni sisteme taşınmıştır. Karadeniz module dosyalarına erişmek için eski-moduller-karadeniz ve Maslak module dosyalarına erişmek için eski-moduller-maslak modulelerini yüklemeniz gerekmektedir.

    Kuyruk Sistemi

    Sarıyer kümesinin kuyruk yönetim yazılımı Slurm 'dür. Slurm kuyruk sisteminde iş verme komutları, LSF kuyruk sisteminden farklıdır. Slurm'ün kendi dökümanlarına bu linkten ulaşabilirsiniz: Slurm Documentation (ingilizce)


    Küme (cluster), birden çok bilgisayarın birlikte kullanılmak üzere ayarlandığı yapıya denir. Slurm kümelerde (cluster) çalıştırılacak programların verimli çalışabilmesini sağlayan bir iş kuyruk sistemidir. İşler, gereksinimlerine göre uygun bilgisayarlar üzerinde Slurm tarafından çalıştırılacaktır. 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

    Login Node ve İş Çalıştırma

    Küme yapısında kullanıcılar kullanacakları bilgisayarlara doğrudan erişemezler. Bunun yerine login node denilen, amacı sadece Slurm'e iş vermek olan bilgisayarlara bağlanılır. Burada, Slurm 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 şekilde 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 sariyer isimli bir bilgisayarımız mevcuttur. Önce VPN Bağlantısı yaptıktan sonra, bu makinaya sariyer.uhem.itu.edu.tr adresine ssh bağlantısı yaparak ulaşabilirsiniz. İşlerini çalıştırmanız için gereken dosyaları yüklemek ve sonrasında sonuçta oluşan dosyaları indirmek için, yine sariyer.uhem.itu.edu.tr makinasına scp protokolünü kullanarak bağlanmalısınız. Bu konuda Scp / WinScp kullanım kılavuzu saysasında gerekli bilgileri bulabilirsiniz.


    Ancak şuna dikkat ediniz: sariyer.uhem.itu.edu.tr makinasına ssh yaparak login node'a erişmiş olursunuz. İşlerinizi (programlarınızı) bu makinada doğrudan çalıştıramazsınız. Bu makina sadece işlerinizi slurm yazılımına tarif/teslim etmeniz için ve sonrasında sonuçlarına bakmanız için kullanmanız gereken bir makinadır. Aynı anda tüm kullanıcılarımız tarafından kullanılmaktadır.

    Örneğin bir kullanıcımız matlab açıp, burada bir hesap yaptırmak isterse, bir başkası fluent açıp bir hesap başlatırsa vb. bir bilgisayarda pek çok iş çalıştırılmış olur. Tek bir bilgisayar bu kadar işi kaldıramayacağından, bu bilgisayarın çökmesine sebeb olacaktır. Sonuçta kimse sisteme erişemeyecektir. Böylesi bir durumdan korunmak için, kullanıcılarımız login node'unda doğrudan çok hafıza yada çok işlemci kullanan bir program çalıştırmaya kalkarlarsa otomatik olarak bu programlar durdurulmakta ve aşağıdaki gibi bir mesaj ile durum haber verilmektedir:


    =========================================================
    ASIRI YUK SEBEBIYLE ASAGIDAKI PROGRAM DURDURULMUSTUR:
    678.1           ahmet.x
    LUTFEN PROGRAMLARINIZI DOGRUDAN CALISTIRMAYINIZ, 
    IS OLARAK SLURMe VERINIZ YADA SLURMden MAKINA ISTEYEREK
    O MAKINADA CALISTIRINIZ.
    =========================================================
    

    Kullanılabilecek Kuyruklar ve Doluluk

    Kullanılabilecek kuyruk (queue) isimlerini ve ne kadar bir doluluk olduğunu görebilmek için bosmakinalar yada spart komutunu kullanabilirsiniz:


    $ bosmakinalar
    
        KUYRUK ISLEMCI ISLEMCI BEKLYEN  DIGER  MAKINA MAKINA ENFAZLA-SURE EN-AZ EN-COK ISLEMCI HAFIZA
           ADI    BOS   TUMU    ISTEK  BEKLYEN  BOS    TUMU  GUN-SA:DK:SN MAKNA MAKINA /MAKINA  (GB)
      ======== ======= ======= ======= ======= ====== ====== ============ ===== ====== ======= ======
          defq    280    2240       0     560     10     80    7-00:00:00    1      -      28    128
        shortq    392    2604       0       0     14     93      01:00:00    1      2      28    128
         longq     72     336      96       0      3     14   21-00:00:00    1      -      24     64
          gpuq     84      84       0       0      3      3    7-00:00:00    1      -      28    128
       bigmemq     28     280       0       0      1     10    7-00:00:00    1      -      28    512
          mixq     84     140       0       0      3      5    7-00:00:00    1     20      28    128
         b224q    336    2548       0       0     12     91    1-00:00:00    8     40      28    128
       core40q    400    1400       0       0     10     35    7-00:00:00    1      -      40    192
           all    864    4340       0       0     27    142    1-00:00:00    1      -      24     64
    


    Buradaki kuyruklardan defq herhangi bir kuyruk adı verilmezse işin çalıştırılacağı varsayılan kuyruktur. Genel olarak işinizi bu kuyrukta çalıştırmanız uygun olur. Görüleceği gibi bu kuyruk diğer kuyruklardan çok daha fazla makinayı kullanabilmektedir.


    shortq ise daha çok ufak denemeler için kısa süreli (1 saat) bir kuyruktur. gpuq gpu kartı bulunan makinaları kullanmak içindir. bigmemq kuyruğu ise 512GB hafızası olan makinaları kullanmak içindir. Bu kuyruktaki makinalar normalden 1.5 kat daha pahalı fiyatlanmaktadır. Bu sebeble gerekmedikce bu kuyruğu kullanmamanızı tavsiye ederiz. Bu kuyruk dışındaki makinalarımızın hafızaları zaten çoğu iş için gerekenden fazladır.


    BEKLYEN ISTEK sütunu makinalar uygun olmadığı için bekleyen işlerin istediği toplam işlemci sayısını gösterir. Bu sütunda bekleyen iş görmeniz vereceğiniz işin hemen çalışmayacağını göstermez! Çünkü slurm çeşitli kriterlere göre işlere öncelik vermektedir. Örneğin yakınlarda iş çalıştırmadı iseniz ve diğer bekleyen işlerin sahiplerinin yakın zamanda çalışan işleri mevcutsa vb. sebeblerle bazen işiniz diğer kişilerin işlerinin önüne geçebilirken, bazen de diğer bekleyen kişilerin işlerinin bitmesini bekleyebilirsiniz. Bu sadece sizin işinize yada sadece onların işlerine bağlı değildir. Bazen de boş makinalar mevcut olduğu halde, gereken / istenen makina sayısından daha azı mevcut olduğu için işler bekliyor olabilir. Bu durumda slurm sonradan gelen işleri çalıştırabilir, yada ilave makina boşalınca önceden bekleyen işi çalıştırabilmek için bu makinaları boş bırakmaya karar verebilir.


    DIGER BEKLYEN sütunu ise, makinalar müsait olmadığı için değil de, lisanslar, kullanıcının cpu-saat'inin kalmamsı vb. diğer nedenlerle bekleyen işlerin toplam işlemci sayısını gösterir. Bu sayı hiçbir şekilde sizin işinizi etkilemez, sadece sizi bilgi vermek için gösterilmektedir.

    spart komutu ise ilave bazı bilgiler de verir: Kullanıcının verdiği, çalışan, bekleyen işlerinin sayısını ve sisteme iş verirken bilmemiz gerekecek bazı değerleri de gösterir. Ayrıca kullanıcının iş veremeyeceği kuyrukları gizler. spart github sayfasından yada spart -h parametresi ile, spart komutu hakkında bilgi alabilirsiniz:


    $ spart
         QUEUE STA   FREE  TOTAL RESORC  OTHER   FREE  TOTAL ||   MIN   MAX    MAXIMUM  CORES   NODE
     PARTITION TUS  CORES  CORES PENDNG PENDNG  NODES  NODES || NODES NODES   JOB-TIME  /NODE MEM-GB
          defq   *    924   2436      0      0     33     87 ||     1     -     7 days     28    126
        shortq        924   2604      0      0     33     93 ||     1     2     1 hour     28    126
         longq         24    312      0      0      1     13 ||     1     -    21 days     24     62
          gpuq          0    112      0      0      0      4 ||     1     -     7 days     28    126
       bigmemq        112    280      0      0      4     10 ||     1     -     7 days     28    510
         v100q          0     40     40      0      0      1 ||     1     1     1 days     40    375
         b224q        924   2548      0      0     33     91 ||     8    40     7 days     28    126
       core40q          0   1400  74160      0      0     35 ||     1     -     7 days     40    190
    
                      YOUR PEND PEND YOUR
                       RUN  RES OTHR TOTL
       COMMON VALUES:    0    0    0    0
    



    Projenizin Tanımlı Olduğunu Kontrol Etmek

    Sarıyer kümesini kullanmak için sariyer makinasına login olduğunuzda sizin üyesi bulunduğunuz projelerin bu kümede çalışacak şekilde ayarlanmış olup olmadığına bakınız. Bu bilgiyi projelerim komutuyla alabilirsiniz. Bu komut tüm projelerinizi değil, sadece sarıyer kümesinde çalışacabilecek şekilde ayarlanmış projeleri gösterir:


     $ projelerim
    
     Proje     Kullanim      MaxIs  MaxCpu  MaxIs   Proje                 SariyerdeTanimli
     Adi       Izni          Verme  Calisan Calisan Bilgisi               Kullanicilar
     --------  ------------  -----  ------- ------- --------------------  ----------------
     hsaat     ACIK(active)    220     1176     44                        kadir ahmet
     t0111     DURDURULDU       42      560     20  CPU kota asimi uyari  ahmet
     --------  ------------  -----  ------- ------- --------------------  ----------------
     Project    Project      Max    MaxCpu  MaxJob   Project              Defined-Users
     Name       Status       Submit Running Running  Info                 at-Sariyer
    
    hsaat Kullanilan-CpuSaat(CpuHour-Usage): 7093/20000 (%35),  Disk:32/200 GB (%15).
    hsaat Baslangic(StartDate): 2020-04-06 15:25:20,  Bitisi(EndDate): 2023-04-06 00:00:00                                                                    
    
    t0111 Projesi Kullanilan-CpuSaat(CpuHour-Usage): 203679/202906 (%100),  Disk:692/2000 GB (%34), CPU kota asimi uyarisi!
    t0111 Baslangic(StartDate): 2020-01-26 15:25:20,  Bitisi(EndDate): 2022-08-01 00:00:00
    
    Burada verilen 'CpuSaat' bilgisi halen calisan isleri ve son 6 saatte bitmis isleri icermez.
    


    Yukarıdaki çıktıda kullanıcının sarıyer kümesinde çalışabilen t0111 ve hsaat adlı iki projesi olduğu gözüküyor. Bu projelerden t0111 projesinin Kullanilan CpuSaat bölümünde (%100) ve CPU kota asimi uyarisi! bilgisi gözükmektedir. Bu atanan CpuSaat miktarının tüketildiğini ve DURDURULDU ifadesi ise iş vermeye kapatıldığını göstermekte. Bu ve benzeri proje uyarıları hakkında açıklamalar, sbatch hata mesajları sayfasında mevcuttur. Diğer proje olan, hsaat projesinin Kullanilan CpuSaat satırında ise (%35) değeri var. Bu hsaat projesinin atanan CpuSaat miktarının %35'ini kullanıldığını ve iş vermek için kullanılabilir durumda olduğunu gösteriyor. İlave olarak projelerin başlangıç ve bitiş tarihleri de bu çıktıda görülebilir.


    Ayrıca her projenin açık olup olmadığını gösteren satırda, o projeye iş verebilecek kullanıcı listesi de görüntelenmektedir. "MaxIs Verme", MaxCpu Calisan", ve "MaxIs Calisan" sütunları, sadece o anda en fazla kaç iş verebileceğiniz, toplamda en fazla kaç işlemcilik işinizin çalışabileceği ve en fazla kaç işinizin çalışır durumda olabileceğini gösterir. Bu sınırlamalar anlık durumu gösterir, Yoğunluğa göre azalıp, artarlar. Projeniz süresince verilebilecek toplam iş sayısını GÖSTERMEZLER! UHeM'de projeniz süresince verilebilecek toplam iş sayısı sınırlaması yoktur. Projeniz kullanıma açık olduğu sürece iş verebilirsiniz.


    Eğer hiç bir projemiz bu sistemde ayarlı olmasa idi projelerim komutu aşağıdaki çıktıyı verecekti:

     $ projelerim
    
    	 *** Kullanilabilir proje yok!
    

    Slurm İş Dosyası / Betiği

    Slurm kuyruk sistemi, LSF kuyruk sisteminden farklı olsa da, genel mantık aynıdır. Dolayısı ile LSF'deki iş dosyası yapısına oldukça benzer bir şekilde iş dosyası hazırlanır. LSF sisteminde #BSUB ile verilen parametreler, Slurm'de #SBATCH ile verilmektedir.


    En basit hali ile bir iş dosyası aşağıdaki gibidir. Tabi ki değişik ihtiyaçlar için pek çok ilave parametre mevcuttur. Bu betiği /okyanus/progs/slurm_betikleri/basit.sh adresinde bulabilirsiniz:

    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -p defq                 # kuyruk (partition/queue) adi
    #SBATCH -n 4                    # toplam cekirdek / islemci sayisi
    
    module load mpi/openmpi-x86_64
    
    mpirun ./calisacak.x
    


    Yukarıdaki betikte geçen parametrelerin açıklamaları:

    Parametre Açıklama
    #SBATCH -A <proje_adi> Proje adı, projelerim komutu ile iş verilebileceğini gördüğünüz bir proje olmalıdır.
    #SBATCH -p <kuyruk_adi> kuyruk adı, bosmakinalar komutu ile müsait olduğunu gördüğünüz bir kuyruk olmalıdır.
    #SBATCH -n <cekirdek_sayisi> Toplam Çekirdek (core) yani işlemci sayısı.


    Eğer Çekirdek (core), işlemci (cpu) kavramları Sizin için yeni yada kafa karıştırıcı ise Temel Kavramlar: işlemci (CPU), çekirdek (core), Soket sayfamızda ayrıntılı bilgi bulabilirsiniz.


    Bu örnekte bir kuyruk (queue /partition) belirtilmemiştir. Bu sebeble işimiz varsayılan kuyruk olan defq kuyruğunda (queue /partition) çalışacaktır. Ayrıca programın çıktıları slurm-XXX.out isimli bir dosyaya yazılacak. Dosyanın adındaki XXX yerine iş numarası (job ID) gelecek.


    /okyanus/progs/slurm_betikleri/ adresinde önceden hazırlanmış pek çok slurm betiğini bulabilirsiniz. Kendiniz bir betik hazırlamadan önce burada kullanacağınız program için hazır bir betik mevcut mu diye bakmanızı öneririz. Sizin programınıza uygun betik bulamasanız bile, benzer işi yapan betiklerden faydalanarak çok daha kolayca işinizi çalıştırabilirsiniz.



    Daha Karışık Bir Örnek İş

    İlave Slurm parametreleri içeren bu betiği /okyanus/progs/slurm_betikleri/ilave.sh adresinde bulabilirsiniz. Bu betik doğrudan alıp kullanmanız için değil, verilebilecek parametreler için bir örnek olsun diye hazırlanmıştır. Lütfen gerekmeyen parametreleri çıkararak kullanınız:


    #!/bin/bash
    
    #SBATCH -J "ilave slurm parametreli"     # isin adi
    
    #SBATCH -A hsaat                         # account / proje adi
    #SBATCH -p bigmemq                       # kuyruk (partition/queue) adi
    
    #SBATCH -o slurm.%j.out                  # cikti dosyasi %j => is no olacak, bu cikti parametrelerini vermek gerekli degildir.
    #SBATCH -e slurm.%j.err                  # hata ciktisi dosyasi, bu cikti parametrelerini vermek gerekli degildir.
    #SBATCH --open-mode=append               # cikti dosyalari zaten varsa , bu cikti parametrelerini vermek gerekli degildir.
                                             # append yada truncate
    
    #SBATCH -n 6                                  # toplam cekirdek / islemci sayisi (makinalarin toplami)
    #SBATCH -N 3                                  # bilgisayar sayisi
    #SBATCH  --ntasks-per-node=2                  # her bir makinada kac islemci kullanilsin.
    #SBATCH -t 0-3:00                             # isin calisma suresi
                                                  # 3 saat demek (D-HH:MM)
    
    #SBATCH --mail-type=END,FAIL                  # is bitince yada sorun cikarsa mail at
    #SBATCH --mail-user=ahmetmc@itu.edu.tr        # mail atilacak adres
    
    #SBATCH --checkpoint=0-0:45                   # checkpoint araligi (45dakikada bir)
    #SBATCH --checkpoint-dir=/okyanus/users/ali   # checkpoint kaydedilecek dizin
    
    #SBATCH --gres=gpu:1                          # ilave kaynak (1 gpu gerekli)
    #SBATCH --exclude=m014                        # istemedigimiz makina listesi
    
    
    module load mpi/openmpi-x86_64
    
    mpirun ./calisacak.x
    


    Buradaki -n işinizin çalışacağı tüm işlemci sayısıdır. Bir makinadaki işlemci sayısı değildir. Örneğin -N 2 ve -n 40 derseniz, bu 2 makinada toplam 40 işlemci istiyorum demektir. Makina başına 20 işlemci demektir. 40 işlemci içeren core40q makinalarından 2 tanesini birlikte kullanmak için, -N 2 ve -n 80 şeklinde istekte bulunmalısınız.



    İş Teslimi

    Hazırladığımız betiği Slurm kuyruk sisteminde çalıştırmak için:

     $ sbatch basit.sh
    Submitted batch job 182
    

    Son satırda gözüken Submitted batch job ifadesi işimizin teslim alındığını gösteriyor. Eğer bu ifade yerine bir hata mesajı var ise, sbatch hata mesajları sayfasında hata mesajları ve olası çözümleri konusunda ayrıntılı bilgi mevcuttur.


        

    İşlerimizin Durumuna Bakmak

    İşlerimizin çalışıp, çalışmadığını görmek için squeue komutunu kullanabiliriz. Bu komutu -u <kullanıcı_adı> parametresiz verirseniz tüm kullanıcıların işlerini göstereceğinden -u parametresini unutmayınız. Ancak daha pratik bir çözüm olarak isler komutunu hazırladık:

     $ isler
    Tue Feb  2 16:08:09 2016
                 JOBID PARTITION     NAME     USER    STATE       TIME TIME_LIMI  NODES NODELIST(REASON)
                   182      defq basit.sh    ahmet  RUNNING       0:32 5-00:00:00      1 s001
    


    Aynı işi KalanCpuDakika değeri 0 olan t0111 projesi (-A account) ile verse idik, reddedilmeyecek ama çalışmadan PENDING durumunda kalacaktır. Bekleme sebebi (REASON) sütunundaki AssocGrpCPUMinsLimit değeri bu durumu ifade etmektedir.:

     $ isler
    Tue Feb  2 16:09:09 2016
                 JOBID PARTITION     NAME     USER    STATE       TIME TIME_LIMI  NODES NODELIST(REASON)
                   183      defq basit.sh    ahmet  PENDING       0:00 5-00:00:00      1 (AssocGrpCPUMinsLimit)
    


    İşler tamamlandıktan kısa bir süre sonra isler komutu çıktısında değişir:

     $ isler
           JobID    JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    181            basit.sh       defq      hsaat          4 CANCELLED+      0:0
    181.batch         batch                 hsaat          4  CANCELLED     0:15
    182            basit.sh       defq      hsaat          4    RUNNING      0:0
    183            basit.sh       defq      t0111          4    PENDING      0:0
    


    Halen devam eden işleriniz varken, biten işlerinizin durumunu görmek isterseniz, isler komutunu -a parametresi ile çalıştırabilirsiniz.


    Bekleyen İşlerin Bekleme Sebebi

    Yukarıda da belirtildiği gibi, işinizi çalıştıracak projeniz kullanıma kapalı ise, isler komutunun REASON bölümünde AssocGrpCPUMinsLimit ifadesini görürsünüz. Tabi ki, işinizin beklemesi için başka sebebler de mevcuttur. Pek çok olası sebebten en sık görülebilecekler şunlardır:


    • Resources: Talep ettiğiniz kadar kaynak musait değil ama musait olduğu anda slurm Sizin işinizi öncelikle çalıştırmayı planlıyor.
    • Priority: Talep ettiğiniz kadar kaynak musait değil ve kaynaklar musait olunca Sizin işinizden önce çalışacak işler mevcut.
    • Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions: Talep ettiğiniz kadar kaynak musait değil ve kaynaklar musait olunca Sizin işinizden önce çalışacak işler mevcut.
    • Dependency: İşiniz kaynakların boşalmasını değil, Sizin yazdığınız bir kural sebebiyle, başka bir işinizi bekliyor.
    • AssocGrpCpuLimit: Kullandığınız projenizin aynı anda kullanılabilecek en fazla işlemci sınırına ulaştınız. Yeterli sayıda işiniz bitince işiniz çalışacaktır. Bu sınırı (MaxCpu-Calisan), projelerim komutu ile görebilirsiniz.
    • AssocGrpJobsLimit: Kullandığınız projenizin aynı anda çalıştılabilecek en fazla iş sınırına ulaştınız. Yeterli sayıda işiniz bitince işiniz çalışacaktır. Bu sınırı (MaxIs-Calisan), projelerim komutu ile görebilirsiniz.


    Bazen de boş makinalar olmasına rağmen, bekleyen işlerinizin çalışmadığını görebilirsiniz. Bu konuda iki olasılık mevcuttur:

    1) Elektrik Tasarrufu için: Sarıyer Kümesinde, boş makinaların bir kısmı elektrik tasarrufu için kapatılmaktadır (power off). Sisteme yeni bir iş verildiğinde, gerekiyorsa bu kapatılmış makinalar da açılmaktadır. Ancak, doğal olarak, kapalı makinaların açılıp, işinizin başlaması için bir sürenin geçmesi gerekmektedir. Özellikle çok sayıda işlemci taleb eden işlerin başlaması bazen 15 dakikaya kadar gecikebilir.

    2) Bekleyen Büyük Bir İş İçin: Mesela, bekleyen bir iş 10 makina talep ettiyse ve sadece 7 makina boş ise; Slurm iki seçenekten birini seçebilir: Ya 7 makinadan az kaynak isteyen işleri çalıştırır. Yada boş makina sayısı 10 makina oluncaya kadar boş makinaları boş olarak bekletir. İlk seçenek daha faydalı gibi dursa da, sürekli bu seçenek seçilirse, 1 makinadan büyük işler asla calışmayacaktır. Bu sebeble slurm duruma göre uygun seçeneği seçer.

    Çalışan İşin İşlemci ve Hafıza Kullanımına Bakmak

    Çalışan bir işimizin düzgün çalıştığını takip etmek için çalıştığı bilgisayarın yük (load) durumuna ve hafıza kullanımına bakmak gerekebilir. Bir işin çalıştığı tüm bilgisayarlara ssh yapıp bu bilgileri toplamak zor olacağı için isler komutu bu işi sizin için yapabilir. isler komutuna iş numarası vererek çalıştırdığımızda, işimizin çalıştığı tüm bilgisayarların bilgileri ekrana basılacaktır:


    $ isler 1500
    | MAKINA  YUK      HAFIZA  SWAP | MAKINA  YUK      HAFIZA  SWAP | MAKINA  YUK      HAFIZA  SWAP |
    |-------------------------------|-------------------------------|-------------------------------|
    | s001  27/28     21/3/128  0/4 | s002  26/28     19/3/128  0/4 | s003  26/28     19/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
    | s004  26/28     19/3/128  0/4 | s005  26/28     19/3/128  0/4 | s006  26/28     19/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
    | s007  26/28     19/3/128  0/4 | s008  26/28     19/3/128  0/4 | s009  26/28     19/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
    | s010  27/28     19/3/128  0/4 | s011  26/28     19/3/128  0/4 | s012  26/28     19/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
    | s013  26/28     19/3/128  0/4 | s014  26/28     19/3/128  0/4 | s015  26/28     19/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
    | s016  26/28     19/3/128  0/4 | s017  25/28     19/3/128  0/4 | s018  26/28     19/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
    | s019  25/28     18/3/128  0/4 |
    |-------------------------------|-------------------------------|-------------------------------|
     
    Buradaki YUK sutunu load/islemci, HAFIZA istenenGB/kullanilanGB/MevcutGB,
    SWAP sutunu ise kullanilanGB/MevcutGB bilgisini gosterir.
    Bu komut isinizin calistigi bilgisayarlara ssh yaptigi icin cok kullanmaniz isinizi yavaslatir.
    


    Yukarıdaki çıktıda gözüken HAFIZA bilgilerinde istenenGB, Virtual Memory Size değerleri toplamıdır (top komutunda VIRT yada ps komutunda VSZ sütunu). Bu bilgi önemlidir, çünkü bazen programlar yüksek miktarda hafıza talep edip, alamayınca sorun yaşayabilirler.


    Eğer Swap, Virtual Memory kavramları Sizin için yeni yada kafa karıştırıcı ise Temel Kavramlar: swap, paging sayfamızda ayrıntılı bilgi bulabilirsiniz.


    Çalışan İşi Sonlandırmak

    Çalışan bir işimizi sonlandırmak istersek scancel komutuna parametre olarak iş numarasını (job ID) vermeliyiz:

     $ scancel -v 182
    


    scancel işimizi sonlandıracaktır. Sonlandırılan işler, isler veya sacct komutunun çıktısında CANCELLED+ olarak gözükecekler.

    İşin Çalıştığı Makinaya Gitmek

    Bazen hata ayıklama, işlemci,hafıza vb. makina kaynaklarının kullanım oranını gözlemleme gibi çeşitli sebeblerle işin çalıştığı makinaya erişmek isteyebiliriz. Bu durumda isler komutunun çıktısında gözüken makinalara ssh komutu ile bağlanıp, istediğimiz bilgileri doğrudan alabiliriz.


    Ancak bu her makinaya ssh yapabileceğimiz anlamına gelmez. Her hangi bir işimizin çalışmadığı (yakın zamanda bitmiş olsa da) bir makinaya erişemeyiz. Aşağıdaki çıktıda göreceğiniz gibi bu makinada çalışan işiniz yok hatası ile ssh reddediliyor:

    $ ssh s006
    Access denied: user ahmet (uid=14) has no active jobs on this node.
    Connection closed by 10.12.73.6
    


    İnteraktif İş Başlatmak

    Bazen işimizi doğrudan bulunduğumuz makinada başlatmak isteyebiliriz. Ancak sariyer kümesinin login makinası olan sariyer makinasında çok işlemci kullanan yada hafıza tüketen bir program çalıştırırsanız bu program otomatik öldürülecektir.


    Mesela hata ayıklama gibi bir sebeble kullanıcılarımız bir programı doğrudan komut satırından çalıştırmak isterlerse, srun komutu ile interaktif bir iş başlatabilirler.


    Bu amaçla tüm kuyruklar kullanılabilirse de eğer iş verdiğiniz kuyrukta boş makina yoksa, işiniz başlamak yerine uygun bir makina boşalıncaya kadar sizi bekleteceğinden bu amaçla açılmış shortq kuyruğunu kullanmak en mantıklısıdır:


    [ahmet@sariyer ~ ]$ srun -A hsaat -N 1 -n 28 -p shortq --pty bash -i
    srun: job 8475 queued and waiting for resources
    srun: job 8475 has been allocated resources
    [ahmet@f002 ~ 8475]$
    

    Yukarıdaki çıktıdan da görülebileceği gibi srun komutu ile bir iş başlattık ama komut satırındaki makine bilgisi sariyer 'den f002 'ye dönüştü. Artık f002 makinasındayız. Bu makina, biz bu kabuktan (shell'den) exit komutu ile yada Ctrl-D tuşları ile çıkıncaya yada kuyruğun izin verdiği süre dolana kadar bizimdir. Hiç bir program çalıştırmasak bile komut satırında iş nosunu (bu örnekte 8475) gördüğümüz sürece bizim bir işimiz çalışıyormuşcasına bize ayrılmış ve faturalanıyor olacaktır.

    Sariyer Kümesine Grafik Arabirim Kullanarak Erişmek

    Sariyer kümesine grafik arabirim kullanarak uzak mesafeden erişmeyi kolaylaştırmak için x2go programı kurulmuştur. Bu program sayesinde doğrudan yada ssh ile açılan X11 Pencerelerinde yaşanan aşırı yavaşlık sorunu ortadan kalkmaktadır. Ancak bu program ile sariyer kümesine erişmek için hala önce vpn bağlantısının yapılması şarttır. x2go programını kullanmak için, bağlantı için kullanacağımız bilgisayarımıza x2go client yazılımı (http://wiki.x2go.org/doku.php/download:start) kurulmalıdır. Aşağıda bu programın nasıl kurulacağını gösteren videomuzu bulabilirsiniz:

    VİDEO: X2Go Client Kurulması.mp4


    Kurulumun son aşaması olarak, .bashrc dosyanıza source /okyanus/progs/uhem-bin/x2go-ayarla.sh satırını eklemeliyiz. nano yada başka bir yazılım kullanarak yapabiliriz:


     $ nano /okyanus/users/$USER/.bashrc
    


    source /okyanus/progs/uhem-bin/x2go-ayarla.sh
    


    nano programından çıkmak için Ctrl ve x tuşlarına birlikte basınız. Kaydedeyim mi? sorusuna "Yes" diyerek ve enter tuşuna basarak çıkınız. Bu değişikliğin etkin olabilmesi için bulunduğunuz terminal bağlantısını sonlandırıp tekrar login olunuz.

    Sariyer Kümesinde Grafik Arabirim Kullanarak İnteraktif İş Çalıştırmak

    Grafik Arabirim kullanarak İnteraktif iş çalıştırmak için, öncelikle x2go programı ile sariyer login makinasına bağlanalım. Açılan terminal penceresini kullanarak, artık sariyer kümesine grafik arabirim kullanan bir iş verebilir durumdayız. Öncelikle bosmakinalar komutu ile sistemde kullanmayı planladığımız kuyrukta boş makina olup olmadığına bakalım:


    $ bosmakinalar
    
        KUYRUK ISLEMCI ISLEMCI BEKLYEN MAKINA MAKINA ENFAZLA-SURE EN-AZ  EN-FAZLA ISLEMCI
           ADI    BOS   TUMU    ISTEK    BOS   TUMU  GUN-SA:DK:SN MAKINA  MAKINA  /MAKINA
      ======== ======= ======= ======= ====== ====== ============ ====== ======== =======
          defq    112    1176       0      4     42    7-00:00:00     1  SINIRSIZ     28
        shortq    364    1540       0     13     55      01:00:00     1         2     28
         longq     48     360       0      2     15   21-00:00:00     1  SINIRSIZ     24
          gpuq      0      84       0      0      3    3-00:00:00     1  SINIRSIZ     28
       bigmemq    252     280       0      9     10    7-00:00:00     1  SINIRSIZ     28
         b224q    756    2576       0     27     92    1-00:00:00     8        38     28
    


    Bu komutun çıktısından mesela shortq kuyruğunun müsait olduğunu görüyoruz. Tabiki ihtiyacımıza uygun bir kuyruk seçmeliyiz. Gpu kullanan bir program için gpu barındıran makinaları ayırabilmek için gpuq yada 7 günden uzun sürecek işlerimiz için longq gibi.


    Şimdi slurm'den salloc komutu ile bize bir makina ayırmasını isteyelim:


    [mercan@sariyer ~ ]$ salloc -n 28 -N 1 -A hsaat -p shortq
    salloc: Pending job allocation 14219
    salloc: job 14219 queued and waiting for resources
    salloc: job 14219 has been allocated resources
    salloc: Granted job allocation 14219
    [mercan@sariyer ~ 14219]$
    


    Görüleceği üzere salloc komutu bize kaynak ayırdığını söyledi ve komut satırı da iş numaramızı (14219) içerecek şekilde değişti. Artık bir makina bizim kullanımımız için ayrıldı ve biz salloc komutundan exit komutu ile çıkana kadar bize ayrılmış kalacak ve tüm bu sürede ayrılan makinaları hiç kullanmasak bile kullanmışız gibi fatura edilecektir. Bize ayrılan makinaların adını sunucular komutu ile öğrenelim:


    [mercan@sariyer ~ 14219]$ sunucular
    f002
    


    Görüleceği üzere bize ayrılan makina f002 makinası. Bu makinaya (bize ayrıldığı için izin verilir), grafik arabirimi destekleyecek şekilde ssh ile bağlanalım:


    [mercan@sariyer ~ 14219]$ ssh -X f002
    Last login: Fri Feb 17 09:59:10 2017 from sariyer
    [mercan@f002 ~ ]$
    


    Artık, f002 makinasındayız. Mesela matlab programını açmak istersek:


    [mercan@f002 ~ ]$ module load MATLAB/R2016b
    [mercan@f002 ~ ]$ matlab
    MATLAB is selecting SOFTWARE OPENGL rendering.
    


    matlab komutunu çalıştırdığımızda matlab grafik arabiriminin açıldığını göreceğiz. Artık matlab programımız bize ayrılmış olan f002 makinasında çalışmakta. Bu sunucuda istediğimiz gibi matlab çalıştırabiliriz. İşimizi bitirdiğimizde önce matlab'ı kapatmalı, sonra ssh'ı sonlandırmalıyız. En son olarak bir kez daha exit diyerek salloc komutundan da çıkmalıyız:


    [mercan@f002 ~ ]$ exit
    logout
    Connection to f002 closed.
    [mercan@sariyer ~ 14219]$ exit
    exit
    salloc: Relinquishing job allocation 14219
    salloc: Job allocation 14219 has been revoked.
    [mercan@sariyer ~ ]$
    


    Ancak, salloc komutundan da çıktıktan sonra slurm'ün bize ayırdığı makinayı serbest bırakmış oluruz.

    Sarıyer Kümesinde module Komutu

    Sarıyer kümesindeki pek çok program için module dosyaları hazır gelmektedir. Bu module listesine erişmek için module avail komutunu kullanabilirsiniz:


     $ module avail
    

    Bu konuda Module Komutu ile Çevre Değişkenlerinin Ayarlanması sayfasında ayrıntılı bilgi bulabilirsiniz.


    Bu listede görülen ilave-moduller, ilave-moduller2, ilave-moduller3, ilave-moduller4 modülleri, ilave module dosyalarının kullanılabilmesi sağlar. Burada program derlerken gerekebilecek pek çok kütüphanenin değişik derleme seçenekleri ile derlenmiş module dosyaları mevcuttur.


    Bu listedeki eski-moduller-karadeniz modülü, lnode makinasındaki module dosyalarının kullanılabilmesi sağlar. Benzer şekilde eski-moduller-maslak modülü, mlogin makinasındaki module dosyalarının kullanılabilmesi sağlar. Ancak bu module dosyalarının kullanılabilmesi, ilgili programların bu sistemde de düzgün çalışacağı anlamında değerlendirilmemelidir. Eski programları gerçekten gerekli olmadıkça kullanmayınız.


    Birden Fazla İşlemci Kullanacak İş Çalıştırmak

    Aksine bir gayret gösterilmediği sürece, programlar seri olarak çalışırlar. Bu tarz programlarda bir process ve o process'i oluşturan bir thread mevcuttur. Bu ise bir programın bilgisayardaki sadece bir işlemciyi (çekirdeği) kullanabileceği anlamına gelir. Birden fazla işlemciyi aynı anda kullanabilmek için, programın paralel bir program olarak yazılmış olması gereklidir.


    Programlarda kabaca iki şekilde paralellik sağlanmaktadır:


    1. Sadece tek bir bilgisayarda çalışabilen, birden fazla thread ile paralelleştirme: Bu yöntem için en yaygın metod OpenMP kullanmaktır.
    2. Bir çok bilgisayarı birlikte kullanabilen, birden fazla process ile paralelleştirme: Bu yöntem için en yaygın metod MPI kütüphanesi kullanmaktır. OpenMPI bir MPI kütüphanesidir. OpenMP ile isim benzerliği olduğundan bu konuda dikkatli olunmalıdır.


    Çalıştıracağınız program, yukarıda bahsedilen iki metoddan birini desteklemiyorsa, çok büyük olasılıkla seri bir programdır ve sadece bir işlemci (çekirdek) kullanabilecektir. Sizin Slurm'den 1 yada 1000 makina/işlemci istemeniz bu durumu değiştirmez. Ayrıca programınızın paralel çalışması için gerekli parametreleri de bulunabilir. Bu parametreleri çalıştırırken kullanmaz iseniz, paralel çalışabilecek bir program, seri çalışmayı seçebilmektedir.

    Birden Fazla Makina Kullanacak İş Çalıştırmak

    Slurm'den birden fazla makina istemeniz, işinizin birden fazla makinayı (sunucuyu) kullanabileceği anlamına gelmemektedir. Slurm'e iş olarak vereceğiniz programın birden fazla bilgisayarı kullanabiliyor olması gereklidir. Programınız bu özelliğe sahip değilse, Slurm'ün bu konuda yapabileceği bir şey yoktur.


    Bir programın birden fazla bilgisayarı birlikte kullanabilmesine, dağıtık hesaplama (distributed computing) denir. Dağıtık çalışabilen bilimsel programların neredeyse tamamı MPI kütüphanesini kullanarak paralelleştirilmişlerdir. Linda gibi başka kütüphaneler olsa da, mpi çok yaygın bir şekilde kullanılmaktadır.


    Dolayısı ile ister paralı paket program kullanın, isterseniz açık kaynak kodlu bir program kullanın, programınızın paralel çalışıp çalışmadığını dökümanlarından kontrol etmeli ve paralel çalışması için gereken uygun parametreleri programınızı çalıştırırken kullanmalısınız.

    Slurm'e Ardışık Çalışacak İşler Vermek

    Bazen birbirine bağlı işleri tek bir betik ile değilde bir kaç parçaya bölerek vermek çok daha mantıklıdır. Mesela: Çalıştırmamız gereken bir program seri yada fazla işlemciye ihtiyacı olmayan bir program ise, ama sonrasında çok fazla işlemci gerektiren bir program çalıştıracaksak bu iki programı tek bir betikle çalıştırmaya çalışırsak, ikinci kısımdaki program için yüksek sayıda işlemci kullanmamız gerektiğinden ilk programımız çalışırken bu işlemciler boş bir şekilde bekleyeceklerdir.


    Daha spesifik bir örnek verecek olursak: OpenFOAM işleri (icoFoam gibi) çalıştırmadan önce genelde blockMesh ve decomposePar komutlarının çalıştırılması gerekecektir. Büyük bir model için, biz bu komutların hepsini bir iş betiğine eklersek, blockMesh ve decomposePar komutları çalışırken bir çok işlemci boş bekleyecek ve bizim cpu-saat kotamızı tüketeceklerdir. Çözüm bu işi iki ayrı betik olarak vermek ve ikinci betiğin, birinci betik düzgünce tamamlandığında çalışacağından emin olmaktır.


    Bu şartı sağlamak için slurm'ün bize sağladığı --dependency= parametresini kullanmalıyız:

    • --dependency=after:ISNUMARASI[:ISNUMARASI...]      Bu iş verilen iş numaralı iş (yada işler) başladıktan sonra başlasın.
    • --dependency=afterany:ISNUMARASI[:ISNUMARASI...]      Bu iş verilen iş numaralı iş (yada işler) bittikten sonra başlasın.
    • --dependency=afterok:ISNUMARASI[:ISNUMARASI...]      Bu iş verilen iş numaralı iş (yada işler) başarı ile bittikten sonra başlasın.
    • --dependency=afternotok:ISNUMARASI[:ISNUMARASI...]      Bu iş verilen iş numaralı iş (yada işler) hata ile bittikten sonra başlasın.


    Öncelikle az işlemci isteyerek ilk kısımı normal bir şekilde çalıştıralım:

    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -n 28                    # cekirdek / islemci sayisi
                                    # 28 ve katlari islemci seciniz
    
    # Asagidaki satiri degistirmeyin
    # ------------------------------
    module load OpenFOAM/OpenFoam.org-5.x
    source /okyanus/progs/OpenFOAM/5.0/OpenFOAM-5.x/etc/bashrc WM_LABEL_SIZE=64 WM_COMPILER_TYPE=ThirdParty WM_COMPILER=Gcc48 WM_MPLIB=OPENMPI FOAMY_HEX_MESH=yes
    
    
    blockMesh
    decomposePar
    


     $ sbatch ilkkisim.sh
    Submitted batch job 10755
    


    Sonrasında ise çok miktarda işlemci gerektiren ikinci kısımı çalıştırırken 10755 nolu iş düzgün bitince bu işi çalıştır diyelim:

    #!/bin/bash
    #SBATCH -A hsaat                           # account / proje adi
    #SBATCH -n 560                             # cekirdek / islemci sayisi
    #SBATCH --dependency=afterok:10755        # Yukaridaki is basarili biterse bu isi calistir.
    
    # Asagidaki satiri degistirmeyin
    # ------------------------------
    module load OpenFOAM/OpenFoam.org-5.x
    source /okyanus/progs/OpenFOAM/5.0/OpenFOAM-5.x/etc/bashrc WM_LABEL_SIZE=64 WM_COMPILER_TYPE=ThirdParty WM_COMPILER=Gcc48 WM_MPLIB=OPENMPI FOAMY_HEX_MESH=yes
    
    
    # Bu satirda kullanacaginiz programi (ornekte icoFoam),
    # mpirun ifadesinden sonra -parallel secenegi ile kullanmalisiniz.
    # ------------------------------
    mpirun icoFoam -parallel -case YAPILACAK_DENEY_DIZINI
    


    Bir Slurm İşinin İçinde Birden Fazla Komutu Paralel Olarak Çalıştırmak

    Sariyer kümesinde kaç işlemci talep ederseniz edin, işinizin çalıştığı makinaların tüm işlemcileri kullanılıyormuş gibi ücretlendirilir. Çok sayıda küçük iş çalıştırmak isteyen kullanıcılarımız bu durumda bir slurm betiği içinden aynı anda birden fazla komutu (mesela mpirun) paralel olarak çalıştırarak bir kazanç sağlayabilirler.

    Bu amaçla kullanılabilecek çeşitli çözümler mevcuttur. Tüm bu çözümler tek bir makina için çalışacaktır. Birden fazla sunucuyu bir iş için kullanamazlar! Her makina için ayrı bir betik hazırlamanız gerekecektir: Birincisi, GNU'nun parallel komutunu kullanmaktır.

    Bir diğer olasılıkta, UHeM tarafından hazırlanmış örnek betiği kullanmak olabilir. Bu betiği /okyanus/progs/slurm_betikleri/ayniMakinadaBirdenFazlaIs.sh adresinde bulabilirsiniz. Bu örnek betik bir makinada çalışacak şekilde yazılmıştır. Sadece bir makina isteyerek kullanıınız.


    İşimizin Çıktı Dosyasına İş ile İlgili Bilgileri Yazdırmak

    Verdiğimiz işlerin çıktılarına sonradan baktığımızda, o işi hangi ayarlarla çalıştırdığımızı hatırlayamayabiliriz. Hele de çok sayıda işi değişik parametrelerle çalıştırdıysak, hatırlamamız çok daha zor olacaktır. Bu sebeble, çıktı dosyasına çalıştırdığımız iş hakkında bilgiler (zaman, makina, iş betiği, yüklü moduller, çevre değişkenleri vb.) eklemek iyi bir davranış olacaktır.

    Bu bilgileri işinize kolayca ekleyebilmeniz için, isbilgisi adında hazır bir komut sağlıyoruz. Bu komutu iş betiğinizde module dosyalarından sonra, esas işten önce eklerseniz, çıktı dosyanızda işinizin çalıştığı ortam hakkında ayrıntılı bilgiler yazılacaktır. Bu şekilde ileride bu çıktılara bakarak işinizi nasıl çalıştırdığını anlayabilirsiniz.


    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -p defq                 # kuyruk (partition/queue) adi
    #SBATCH -n 4                    # toplam cekirdek / islemci sayisi
    
    module load mpi/openmpi-x86_64
    
    isbilgisi
    
    mpirun ./calisacak.x
    


    Yukarıdaki betiğin çıktısında aşağıdaki gibi bir iş bilgisi görülecektir:


    ==================================================================
    IS BILGISI BASLANGICI
    ========= ISNO:445018 TARIH:Mon Mar 15 13:47:22 +03 2021 =========
    SLURM JOB INFO:
    ==================================================================
    JobId=445018 JobName=basit.sh
       UserId=mercan(1640) GroupId=hsaiat(328) MCS_label=N/A
       Priority=3106433 Nice=0 Account=hsaat QOS=normal
       JobState=RUNNING Reason=None Dependency=(null)
       Requeue=0 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
       DerivedExitCode=0:0
       RunTime=00:00:01 TimeLimit=01:00:00 TimeMin=N/A
       SubmitTime=2021-03-15T13:41:09 EligibleTime=2021-03-15T13:41:09
       AccrueTime=2021-03-15T13:41:09
       StartTime=2021-03-15T13:47:21 EndTime=2021-03-15T14:47:22 Deadline=N/A
       PreemptTime=None SuspendTime=None SecsPreSuspend=0
       LastSchedEval=2021-03-15T13:47:21
       Partition=defq AllocNode:Sid=sari:82631
       ReqNodeList=(null) ExcNodeList=(null)
       NodeList=f003
       BatchHost=f003
       NumNodes=1 NumCPUs=28 NumTasks=28 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
       TRES=cpu=28,node=1,billing=28
       Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
         Nodes=f003 CPU_IDs=0-27 Mem=0 GRES_IDX=
       MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0
       Features=(null) DelayBoot=00:00:00
       OverSubscribe=NO Contiguous=0 Licenses=(null) Network=(null)
       Command=/okyanus/users/mercan/basit.sh
       WorkDir=/okyanus/users/mercan
       StdErr=/okyanus/users/mercan/slurm-445018.out
       StdIn=/dev/null
       StdOut=/okyanus/users/mercan/slurm-445018.out
       Power=
    
    ========= ISNO:445018 TARIH:Mon Mar 15 13:47:22 +03 2021 =========
    SLURM JOB SCRIPT:
    ==================================================================
    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -p defq                 # kuyruk (partition/queue) adi
    #SBATCH -n 4                    # toplam cekirdek / islemci sayisi
    
    module load mpi/openmpi-x86_64
    
    isbilgisi
    
    mpirun ./calisacak.x
    
    
    ========= ISNO:445018 TARIH:Mon Mar 15 13:47:22 +03 2021 =========
    JOB ENVIRONMENT:
    ==================================================================
    SLURM_NODELIST=f003
    SLURM_CHECKPOINT_IMAGE_DIR=/var/slurm/checkpoint
    CPLUS_INCLUDE_PATH=/okyanus/progs/intel_parallel_studio/intel2019update4/clck/2019.4.0/include
    MKLROOT=/okyanus/progs/intel_parallel_studio/intel2019update4/compilers_and_libraries_2019.4.243/linux/mkl
    SLURM_JOB_NAME=basit.sh
    MANPATH=/okyanus/progs/intel_parallel_studio/intel2019update4/intelpython3/share/man:/okyanus/progs/intel_parallel_studio/intel2019update4/itac/2019.4.036/man:/okyanus/progs/intel_parallel_studio/intel2019update4/clck/2019.4.0/man:/okyanus/progs/intel_parallel_studio/intel2019update4/man/common:/okyanus/progs/intel_parallel_studio/intel2019update4/compilers_and_libraries_2019.4.243/linux/mpi/man:/okyanus/progs/intel_parallel_studio/intel2019update4/documentation_2019/en/debugger/gdb-ia/man/:/usr/share/man/overrides:/usr/share/man:/usr/local/share/man
    
      .  .  . 
    
    BASH_FUNC_spack()=() {  : this is a shell function from: /okyanus/users/mercan/spack/share/spack/setup-env.sh;
     : the real spack script is here: /okyanus/users/mercan/spack/bin/spack;
     _spack_shell_wrapper "$@";
     return $?
    }
    _=/bin/env
    ========= ISNO:445018 TARIH:Mon Mar 15 13:47:22 +03 2021 =========
    LOADED MODULES:
    ==================================================================
    Currently Loaded Modulefiles:
      1) uhem-bin
      2) mpi/openmpi-x86_64
    ========= ISNO:445018 TARIH:Mon Mar 15 13:47:22 +03 2021 =========
    IS BILGISI SONU
    ==================================================================
    

    Kullanmak İstediğimiz Programları Kurmak

    Sariyer kümesinde kullanıcıların işlerini kolaylaştırmak için pek çok program hazır kurulu olarak mevcuttur. Ancak pek çok durumda kullanıcıların istediği her program sistemde bulunmayabilir, yada kullanıcının istediği ayarlamalar ile kurulmamış olabilir.


    Bu durumda kullanıcılarımıza önerdiğimiz yol, ihtiyaç duydukları programları kendi ev dizinlerine kurmalarıdır. Bu konu ayrıntıları ile Kendi Ev Dizinimize Program Kurmak bölümünde anlatılmıştır. Ayrıca, spack programı ile kendi ev dizininize tek bir komut ile kolayca istediğiniz programları kurabileceğinizi de hatırlatalım. Spack ile kurulum spack ile kendi ev dizinimize program kurmak sayfasında ayrıntılı olarak anlatılmıştır.

    Sariyer Kümesi Yönetim Yazılımı Otomatik Epostaları

    Sariyer kümesi yönetim yazılımı, çeşitli durumlarda kullanıcılarımızı uyarmak için otomatik olarak uyarı epostaları yollamaktadır. Bu gibi uyari epostaları almak istemiyorsanız sariyer makinasında aşağıdaki komutu çalıştırınız:


    touch /okyanus/users/${USER}/.uyari_yollama
    


    UHeM'deki XXXXX nolu işinizin oluşturduğu yük hakkında Epostası

    Yukarıda bahsedilen otomatik epostalardan biri de bir makinada oluşan aşırı yük (load) sorunu hakkında olandır. Böyle bir durumda işiniz olması gerekenden çok daha yavaş çalışacaktır. Bu sorunun en olası sebebi, bir yandan mpirun (yada srun vb.), process sayısını kullanılabilir işlemci sayısına ayarlarken, bir yandan da thread kütüphanesinin thread sayısını makinadaki işlemci sayısına ayarlamasıdır.


    Thread kütüphaneleri ile derlenmiş dağıtık programları çalıştırmanın iki yolu mevcuttur. Aslında, Tek makinada çalıştırmak şartıyla, 3. bir yol da var:


    1) Tamamen dağıtık (sadece mpi ile) çalıştırmak:


    İşinizi çalıştırırken işlemci sayısı kadar process açılmasını sağlamalısınız ki, mpirun veya srun'a parametre vermezseniz bu otomatik olarak yapılır. Fakat aynı zamanda slurm betiğinde aşağıdaki gibi çevre değişkenlerini ayarlayarak thread kütüphanesinin birçok thread açmasını engellemelisiniz:

    export MKL_NUM_THREADS=1
    export OMP_NUM_THREADS=1
    


    Basit bir örnek verirsek:

    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -n 56                   # toplam cekirdek / islemci sayisi
    #SBATCH -N 2                    # toplam makina sayisi
    
    module load mpi/openmpi-x86_64
    
    export MKL_NUM_THREADS=1
    export OMP_NUM_THREADS=1
    
    mpirun ./calisacak.x
    


    2) Hibrit (mpi+threads) çalıştırmak:

    Çoğu zaman bu daha hızlıdır, ancak her zaman değil. Kullandığınız kütüphanelere ve algoritmaya göre sonuç değişebilir. Bu çözüm için, --ntasks-per-node=1 slurm parametresi ile istediğiniz makina sayısı kadar process açılmasını sağlamalısınız. Dolayısı ile, mutlaka makina sayısını işlemci sayısı ile aynı olacak şekilde (-N 2 -n 2 gibi) ayarlamanız gerekecektir. Bu çözüm, genel olarak çevre değişkenlerini ayarlamayı gerektirmez. Çünkü thread kütüphanesi sizin için thread sayısını zaten makinadaki işlemci sayısına ayarlayacaktır.

    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -n 2                    # toplam cekirdek / islemci sayisi
    #SBATCH -N 2                    # toplam makina sayisi
    #SBATCH --ntasks-per-node=1
    
    module load mpi/openmpi-x86_64
    
    
    mpirun ./calisacak.x
    


    3) Tek makinada çalıştırmak şartıyla, sadece thread kütüphanesi ile çalıştırmak:


    Eğer programımızı tek makinada çalıştırmak bizim için yeterliyse bir başka seçeneğimizde sadece thread kütüphanesi aracılığı ile çalıştırmak olabilir. Bu seçenekte -N 1 ayarlandığına ve programımızın mpirun komutu olmadan çalıştırıldığına dikkat ediniz:


    #!/bin/bash
    #SBATCH -A hsaat                # account / proje adi
    #SBATCH -n 28                   # toplam cekirdek / islemci sayisi
    #SBATCH -N 1                    # toplam makina sayisi
    
    
    module load mpi/openmpi-x86_64
    
    
    ./calisacak.x
    


    Kullanım İstatistikleri

    Sariyer kümesinde çalıştırdığınız işler hakkında istastiki bilgi almak isterseniz, kullanim-istatigi komutunu kullanarak son 1 aylık sürede çalıştırılan işler hakkında çeşitli bilgilere ulaşabilirsiniz. Bu hesaplamalarda 5 dakikadan kısa süren yada hatalı biten işler çıkarılmıştır. Böylece slurm'ün kendi raporlarından daha güvenilir şekilde işlerinizin harcadığı süreleri takip edebilirsiniz.


    Birden Fazla Proje Arasında Geçiş Yapmak

    Sariyer kümesinde kullanımıza açık birden fazla projeniz mevcutsa, çalıştırdığınız işler sonucu oluşan yada dışarıdan sariyer kümesine kopyaladığınız her türlü dosya/dizin, Size ait öntanımlı (default) projeye ait olacaktır. Dolayısı ile bu projenin disk kotasını tüketecektir. İşinizi verirken kullandığınız proje adının hangisi olduğu bu durumu değiştirmez. İşinizi verirken kullandığınız proje adı sadece cpu-saat kullanımının hangi projenin cpu-saat kotasından düşüleceğini belirler.


    Projelerinizden hangisinin öntanımlı olduğunu projelerim komutunun altındaki Not bölümünden görebilirsiniz:


    [mercan@sariyer ~ ]$ projelerim
    
     Proje     Kullanim    MaxIs  MaxCpu  MaxIs   Proje                 SariyerdeTanimli
     Adi       Izni        Verme  Calisan Calisan Bilgisi               Kullanicilar
     --------  ----------  -----  ------- ------- --------------------  ----------------
     hsaat    ACIK          480     2800    160                        ahmet mercan
    
    hsaat Projesi Kullanilan CpuSaat:69,505/1,000,000 (%6),  Disk:244/10,000 GB (%2).
    hsaat Projesinin Baslangici: 2019-03-22 16:45:53,  Bitisi: 2020-03-22 00:00:00
    
    
    Not: Yeni olusacak tum dosyalariniz, ontanimli projeniz olan hsaat projesine ait olacaktir.
         degistir komutu ile istediginiz dosya/dizinlerin projelerini degistirebilirsiniz.
    
    Burada verilen 'CpuSaat' bilgisi halen calisan isleri ve son 6 saatte bitmis isleri icermez.
    Burada gecen 'CpuSaat', Sariyer veya karadeniz kumesinde 1 islemciyi 1 saat kullanmaktir.
    Bir istisna olarak bigmemq kuyrugu 1.5 'CpuSaat' kullanim olarak faturalandirilmaktadir.
    Ayrica, kullanilan bilgisayarlarin tum islemcileri kullanilmis gibi faturalandirilmaktadir.
    Disk bilgisi yaklasik olarak 2 saat onceki durumu gostermektedir. Anlik durumu gostermez.
    


    Şayet isterseniz, degistir komutu ile mevcut dosya yada dizinlerinizi, açık olan bir projeniz 'in kotasını kullanır hale getirebilirsiniz:


    [mercan@sariyer ~ ]$ degistir hsaat DIZINIM
    

    Bir dizinin başka bir projeye dönüştürülmesi sadece o anda içinde bulunan dosyaları etkiler. Daha sonradan bu dizine taşıyacağınız yada çalıştırdığınız iş sonucu oluşan dosyaların ait oldukları proje değişmeyecektir.

    Dosyaları Daha Kolay İndirmek için Sıkıştırmak

    Dosyalarınızı daha kolay indirmek için, önce sıkıştırmanızı, sonrasında UHeM'den kendi bilgisayarınıza indirmenizi tavsiye ederiz. Küçük ve az sayıda dosya için, sariyer login makinasında tar yada zip komutunu kullanabilirsiniz. Ancak büyük ve/veya çok sayıda dosyayı sıkıştırmak istediğinizde bu işlemi sariyer login makinasında yapmayınız. Bunun yerine slurm'e bir iş olarak veriniz. Bu durumda daha hızlı sıkıştırmak için paralel çalışan bir zip programlarından pigz yada pbzip2 komutunu kullanmanızı tavsiye ederiz. Bu şekilde pigz çalıştığı makinanın tüm işlemcilerini kullanarak sıkıştırma yapacaktır:

    [ahmet@sariyer ~]$ pigz --best -k  DOSYA
    

    -r parametresi ile bir dizindeki tüm dosyalar ( hepsi ayri ayri), bir seferde sıkıştırılabilir:

    [ahmet@sariyer ~]$ pigz --best -k -r DIZIN
    


    Dahası pigz programını tar komutu ile de kullanabilirsiniz. Bu sayede tüm dizini tek bir dosya olarak da sıkıştırabilirsiniz:

    [ahmet@sariyer ~]$ tar cf DIZIN.tgz --use-compress-program=pigz DIZIN
    

    Benzer şekilde pbzip2 komutunu da kullanabilirsiniz:

    [ahmet@sariyer ~]$ tar cf DIZIN.tar.bz2 --use-compress-program=pbzip2 DIZIN
    

    Bir başka alternatif de pipe kullanarak, tar ve pbzip2 komutlarını birlikte kullanmaktır. Bu yöntemin avantajı pbzip2 komutuna parametre verebilmektir:

    [ahmet@sariyer ~]$ tar -c  DIZIN | pbzip2 -c > DIZIN.tar.bz2
    

    Aynı şekilde tar dosyasını açmak için pbzip2 komutunu aşağıdaki gibi kullanabiliriz:

    [ahmet@sariyer ~]$ pbzip2 -dc DIZIN.tar.bz2 | tar x
    

    GPU İşi Çalıştırmak

    Sarıyer kümesinde, f001, f002 ve f003 hesaplama sunucularında 1'er adet Nvidia K20m GPU mevcuttur. Ayrıca f014 sunucusunda 4 adet NVlink2 ile bağlı Nvidia V100 GPU mevcuttur. f014 sunucusunun işletim sistemi ve cuda versiyonu diğer makinalardan farklıdır. sariyer login sunucusunda ne herhangi bir çeşit GPU, ne de GPU için gereken yazılımlar kuruludur. Dolayısı ile kullanıcılarımız GPU kullanacak programlarını sariyer makinasinda doğrudan derleyemez. GPU kullanan işlerinizi çalıştırmanız için GPU içeren hesaplama makinalarımıza özel gpuq ve v100q kuyrukları mevcuttur.


    Dolayısı ile bir GPU işi çalıştırılacağı zaman Slurm'e gpuq kuyruğunu (yada v100q) ve bir GPU kaynağını kullanmak istediğimizi söylememiz gerekecek. Ayrıca gerekli çevre değişkeni ayarlamaları için gereken cuda modüllerini de yüklemeliyiz.


    Benzer şekilde işimizde kullanacağımız programları derlemek için de f001 gibi GPU barındıran bir makinaya erişmeliyiz. Bu amaçla bir interaktif iş vererek o makinaya erişim sağlamalıyız (Burada -A ile verilen proje adını, Sizin projenizin adı ile değiştirmelisiniz):


    [ahmet@sariyer ~]$ srun -A hsaat -p gpuq -n 1 --pty bash -i
    [ahmet@f001 ~]$ module load cuda/cuda-8.0
    


    Yukarıda yüklenen cuda/cuda-8.0 modulü, f014 makinası için cuda/cuda-10.2 olarak değiştirilmelidir.


    İşimiz bitince exit komutu yada ctrl-d tuşlarına basarak makinadan ayrılırız ve sisteme verdiğimiz interaktif iş sonlanmış olur. f001 makinasına login olduğumuz sürece bu makinayı kullanmış gibi cpu-saat harcaması düşüleceği için ve ayrıca bu sırada başkaları bu sunucuyu kullanamayacağı için gerekli olmayan durumlarda interaktif iş bağlantısını açık bırakmayınız.


    GPU işi için gereken programlar hazır olduğunda uygun olan interaktif iş yerine sbatch komutu ile işimizi teslim etmektir. sbatch ile kullanmanız için aşağıdaki betik hazırlanmıştır. Bu betiği /okyanus/progs/slurm_betikleri/gpu.sh adresinde de bulabilirsiniz:


    #!/bin/bash
    
    #SBATCH -J "GPU"                         # isin adi
    
    #SBATCH -A hsaat                         # account / proje adi
    #SBATCH -p gpuq                          # kuyruk (partition/queue) adi
    
    #SBATCH -n 4                             # cekirdek / islemci sayisi
    #SBATCH -N 1                             # bilgisayar sayisi
    #SBATCH --gres=gpu:1                     # ilave kaynak (1 gpu gerekli)
    
    module load cuda/cuda-8.0
    
    #calisacak gpu isi
    nvidia-smi
    


    Yukarıda verilen #SBATCH -p gpuq ve #SBATCH --gres=gpu:1 slurm parametreleri, f014 makinası için #SBATCH -p v100q ve #SBATCH --gres=gpu:4 olarak değiştirilmelidir.


    Komutların Kullanımı Hakkında Bilgi Almak (man Komutu)

    man komutu ile komutların kendi dökümanlarına (manunel page) ulaşabilirsiniz. man komutunun kullanımı Man sayfaları sayfasında anlatılmıştır.

    Gaussian İşi Çalıştırmak

    Sarıyer kümesinde gaussian işi çalıştırmak için gereken gaussian betiği hazırlanmıştır. Bu betikle ilgili bilgileri Gaussian Kullanım Kılavuzu sayfasında bulabilirsiniz.



    ANSYS Fluent İşi Çalıştırmak

    Sarıyer kümesinde ANSYS Fluent işi çalıştırmak için gereken Fluent betiği hazırlanmıştır. Bu betikle ilgili bilgileri ANSYS Fluent Kullanım Kılavuzu sayfasında bulabilirsiniz.


    Matlab İşi Çalıştırmak

    Sarıyer kümesinde Matlab işi çalıştırmak için gereken Matlab betiği hazırlanmıştır. Bu betikle ilgili bilgileri MATLAB Kullanım Kılavuzu sayfasında bulabilirsiniz.


    OpenFOAM İşi Çalıştırmak

    Sarıyer kümesinde OpenFOAM işi çalıştırmak için gereken OpenFOAM betiği hazırlanmıştır. Bu betikle ilgili bilgileri OpenFOAM Kullanım Kılavuzu sayfasında bulabilirsiniz.



    Python, Anaconda, Tensorflow, Keras, Caffe İşi Çalıştırmak

    Sarıyer kümesinde Python, Anaconda, Tensorflow, Keras, Caffe işi çalıştırmak için gereken bilgileri Python, Anaconda, Tensorflow, Keras, Caffe Kullanım Kılavuzu sayfasında bulabilirsiniz.


    Apache Spark İşi Çalıştırmak

    Sariyer kümesinde Apache Spark 2.3.0 sürümü kuruludur. Spark yazılımını, tek bir sunucuda (spark servisleri olmadan) veya birden fazla sunucuda (spark servisleri başlatılarak) çalıştırmak mümkündür. Ancak normal Spark Cluster çözümlerinden farklı olarak, Spark işleri de Slurm sistemine bir iş olarak verilmelidir.


    Tek sunucuda iş çalıştırmak için örnek slurm betiği /okyanus/progs/slurm_betikleri/spark-2.3.0-singlenode.sh adresinde mevcuttur. Birden fazla sunucuda iş çalıştırmak için örnek slurm betiği ise /okyanus/progs/slurm_betikleri/spark-2.3.0-multinode.sh adresinden edinilebilir.


    GATK (Genome Analysis Toolkit)

    Sariyer kümesinde gatk-4.0.2.1 sürümü ve ayrıca BWA, SAMtools, Picard, Cromwell , WDLtool, Bowtie2, Hisat2, trinity, R yazılımları da kuruludur. Bu yazılımlara ait module dosyaları ve bazı örnek slurm betikleri de mevcuttur.


    Intel Parallel Studio XE for Linux

    Intel Parallel Studio, derleyiciler ve hata ayıklayıcılar içeren bir yazılım paketidir. Bu pakettin bir çok sürümü sariyer kümesinde kuruludur. module komutu aracılığı ile tüm paket tek module ile (Örneğin intel/parallel_studio_xe_2019.4.070) yada ayrı ayrı her program için birer module ile gereken ayarlamalar yapılarak kullanılabilir. Paket içerisindeki programların ne amaçla kullanılabileceğine aşağıda bağlantılardan bakabilirsiniz:


    https://software.intel.com/en-us/get-started-with-parallel-studio-xe-2019-for-linux

    https://software.intel.com/en-us/get-started-with-parallel-studio-xe-cluster-for-linux


    Intel C derleyisine icc, C++ derleyicisine icpc, ve Fortran derleyicisine ifort komutlarını kullanarak erişebilirsiniz.


    Aşağıda GNU Derleyicileri için anlatılan -mtune ve -march parametrelerinin İntel Derleyicileri için benzerleri -ax ve -x parametreleridir. Çoğu durumda GNU Derleyiciler için geçerli -march ifadeleri İntel Derleyicileri için de geçerlidir. Temelde sadece -march=native yerine -xHost yazılması gerektiğine dikkat etmeniz yeterlidir.


    GNU GCC Derleyicileri

    Sariyer kümesinde linux dağıtımı ile gelen gcc derleyicilerinin yanı sıra module komutunu ile kullanabileceğiniz daha başka gcc sürümleri de mevcuttur. module avail komutu ile bakıldığında GNU derleyicileri için olan paket gcc adı ile gözükmektedir, ancak bu sizi yanıltmasın bu module dosyaları ile sadece gcc (C derleyisi) değil, c, c++, fortran ve go derleyicileri de gelmektedir.


    GNU GCC C derleyisine gcc, C++ derleyicisine g++, ve Fortran derleyicisine gfortran, GO derleyicisine gccgo komutlarını kullanarak erişebilirsiniz.


    Sarıyer Kümesi Donanım Bilgisi tablosunun İşlemci Kod Adı sütunundaki işlemci kod isimlerini gcc derleyicilerine kod derlenirken hangi işlemci için optimizasyon yapmasını ( Örneğin: -mtune=broadwell ) yada sadece o işlemciye özel derlenmiş program (executable) üretmesini istediğimizi ( Örneğin: -march=broadwell ) söylerken kullanabiliriz. -march verilen işlemciye özel derleme yaptığı için, derlenmiş programımızın, özellikle daha eski işlemcilerde çalışmama olasılığı mevcuttur. Ancak bu parametre ile büyük olasılıkla en hızlı derlenmiş programı elde edeceğimiz için program derlerken kullanmanızı tavsiye ederiz.


    Sariyer Kümesinde Kullanılabilecek -mtune -march Değerleri
    İşlemci Tipi İşlemci Bilgisi
    native Derlemenin yapıldığı makinenin işlemcisi demektir. Sariyer kümesinde derleme işlemi sariyer makinasında (login node) yapılıyorsa, bu durumda broadwell değeri ile aynı şey olacaktır.
    x86-64 Genel olarak tüm 64 Bit İntel/AMD işlemciler için derle.
    haswell Intel Haswell işlemci; 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C komut setleri ile.
    broadwell Intel Broadwell işlemci; 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW komut setleri ile.
    skylake Intel Skylake işlemci; 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES komut setleri ile.
    skylake-avx512 Intel Skylake Server işlemci; 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD komut setleri ile.


    Clang (LLVM) Derleyicileri

    Clang derleyicileri de Sariyer kümesinde kuruludur. LLVM/clang-llvmorg-10.0.1-gcc-8.3.0 veya LLVM/clang-llvmorg-8.0.1-gcc-8.3.0 gibi module dosyalari yüklenerek tüm LLVM-clang programlarına erişilebilir.


    Gerekli module dosyası yüklendikten sonra, C derleyicisine clang, C++ derleyicisine clang++ komutu ile erişebilirsiniz. LLVM projesinde ayrıca, Kodunuzun satırlarını çeşitli standartlara göre biçimlendiren clang-format, kodunuzu kontrol eden clang-check, ve C++ kodunuzu çeşitli kriterlere göre kontrol eden clang-tidy komutları da bulunmaktadır.

    core40q Kuyruğundaki Yeni Makinaların Kullanımı

    core40q kuyruğundaki yeni makinaların gücünden tam anlamıyla faydalanmak için, program derlerken bu makinaların işlemcilerine uygun derleme yapabilmek için, Gcc 8.2.0 yada intel parallel_studio_xe_2018.3.051 ve sonrası bir derleyici paketi kullanmanızı öneririz.

    Çok Büyük Dosya Desteği

    Sarıyer kümesinin dosya sistemi olan lustre dosya sistemi, kullanıcılara çok büyük dosyaları kullanırken, sistemin gücünden daha iyi yararlanabilmek için, bir dosyanın kaç parçaya bölünerek saklanacağı konusunda ayar yapabilme imkanı sunar. Sariyer sisteminde, dosyanız normalde bir OST'de (tek parça) saklanmaktadır. Bu şekilde en yüksek hız ve en az gecikme ile dosyanıza erişebilirsiniz. Ancak dosya boyutu büyüdükce OST sayısını artırmak performansı artıracaktır. Tabiki OST sayısını artırmak bu OST'lerin birlikte çalışması için ilave haberleşme gerektireceğinden, normalde dosyanıza erişimi yavaşlatacaktır. Fakat dosya boyutu büyüdükce bir OST üzerindeki yük çok artacağı için, dosyayı parçalamak hızlanma sağlar.


    Bizim tavsiyemiz dosya boyutuna göre parça (OST) sayısını seçmenizdir. 10GB 'dan küçük dosyalar için dosyayı parçalamak fayda değil, zarar (yavaşlama) getirecektir. 10GB - 50GB arası için önerimiz 2 parça (stripe), 50GB - 100GB için 4 parça seçmenizdir. 100GB'dan büyük dosyalar için 6 parça (stripe) seçmenizi öneririz.


    Parça (stripe) sayısı mevcut dosya için değiştirilememektedir. Bu sebeble önce dizin yada olmayan bir dosyanın parça sayısı ayarlanmalı, sonrasında mevcut dosya, parça sayısı ayarlanmış dizine yada boş dosyaya kopyalanarak oluşturulacak yeni dosyanın parçalanması sağlanmalıdır. Taşıma (mv) işlemi dosyanın yeniden oluşturulmasını sağlamadığı için parçalama sayısını değiştirmemektedir, yani işe yaramamaktadır.


    $ ls -alh buyuk-dosya.nc
    -rw-r----- 1 root root 187G Aug  3 09:48 buyuk-dosya.nc
    
    $ lfs getstripe /okyanus/users/mercan/buyuk-dosya.nc
    /okyanus/users/mercan/buyuk-dosya.nc
    lmm_stripe_count:   1
    lmm_stripe_size:    1048576
    lmm_pattern:        1
    lmm_layout_gen:     0
    lmm_stripe_offset:  5
    	obdidx		 objid		 objid		 group
    	     5	     140532890	    0x8605c9a	             0
    


    Yukarıda lfs getstripe komutu ile dosyanın kaç parça saklandığını öğreniyoruz. lmm_stripe_count: 1 satırı bize dosyanın tek parça tutulduğunu gösteriyor. Bu dosyayı 6 parça halinde saklanır yapalım:


    $ lfs setstripe -c 6 /okyanus/users/mercan/buyuk-dosya-yenisi.nc
    
    
    $ ls -alh buyuk-dosya-yenisi.nc
    -rw-r----- 1 root root 0 Aug  3 09:48 buyuk-dosya-yenisi.nc
    
    
    $ cp /okyanus/users/mercan/buyuk-dosya.nc /okyanus/users/mercan/buyuk-dosya-yenisi.nc
    cp: overwrite /okyanus/users/mercan/buyuk-dosya-yenisi.nc’? y
    
    
    $ lfs getstripe  /okyanus/users/mercan/buyuk-dosya-yenisi.nc
    /okyanus/users/mercan/buyuk-dosya-yenisi.nc
    lmm_stripe_count:   6
    lmm_stripe_size:    1048576
    lmm_pattern:        1
    lmm_layout_gen:     0
    lmm_stripe_offset:  1
    	obdidx		 objid		 objid		 group
    	     1	     133583042	    0x7f650c2	             0
    	     5	     140533580	    0x8605f4c	             0
    	     3	     130545704	    0x7c7f828	             0
    	     0	     143484548	    0x88d6684	             0
    	     2	     141272209	    0x86ba491	             0
    	     4	     131071169	    0x7cffcc1	             0
    


    Artık 6 parçaya ayrılmış yeni bir dosya elde ettik, eskisi silerek tek parça halinden kurtulalım:

    $ rm buyuk-dosya.nc
    


    Şayet zaten var olan bir dosyanın parça sayısını ayarlamaya kalksaydık, dosyanın parça sayısı zaten ayarlı şeklinde bir hata alacaktık:


    lfs setstripe -c 6 /okyanus/users/mercan/mevcut-dosya.nc
    error on ioctl 0x4008669a for '/okyanus/users/mercan/mevcut-dosya.nc' (3): stripe already set
    error: setstripe: create stripe file '/okyanus/users/mercan/mevcut-dosya.nc' failed
    


    Singularity ve Docker Container Kullanımı

    Günümüzünde oldukca populer olan Docker Container ne yazıkki HPC ortamı için çok da uygun değildir. Docker yazılımının sorunlarını çözerek Container teknolojisini, hesaplama kümelerinin (HPC Cluster) hizmetine sunmayı amaçlayan birkaç yazılımdan biri de 'singularity yazılımıdır. Bu yazılım sayesinde docker container'ları bir komut yardımı ile singularity Container formatına dönüştürülerek kullanılabilmektedir.


    Sariyer kümesinde singularity yazılımı kuruludur. Ayrıca /okyanus/progs/Containers adresinde ubuntu-16.04, ubuntu-18.04, ubuntu-18.10, centos5-vault, centos-6, openfoam.com-v1812, wgd, bowtie2 gibi birçok Container'lar hazır bir şekilde kullanılabilir durumdadır. Bu container'lar dışında bir container kullanmak isterseniz iki seçenek mevcuttur: Birinci seçenek bize kullanmak istediğiniz container'ın linkini yollamanız ve bizim bu container'ı dönüştürerek kullanılabilr hale getirmemiz, yada sizin kendi linux bilgisayarınıza singularity yazılımını kurmanız ve kendi container'ınızı kendiniz hazırlamanız.