Sarıyer sistemine iş vermek

UHeM sitesinden
Atla: kullan, ara


UHeM'e yeni alınan Sarıyer Kümesini kullanmak için kullanıcılarımız sariyer.uhem.itu.edu.tr makinasına ssh yapmalıdırlar.

Konu başlıkları

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ı Özel Donanım Bu makinalarda

Çalışacak Kuyruklar

sariyer (login node) Intel(R) Xeon(R) CPU

E5-2680 v4 @ 2.40GHz

Broadwell 28 128GB YOK Login makinasında

iş çalıştırılamaz

s001 - s080 Intel(R) Xeon(R) CPU

E5-2680 v4 @ 2.40GHz

Broadwell 28 128GB 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 Nvidia GP-GPU

(Tesla K20m)

gpuq (7 gün)
f004 - f013 Intel(R) Xeon(R) CPU

E5-2680 v4 @ 2.40GHz

Broadwell 28 512GB YOK bigmemq (7 gün)
s101 - s115 Intel(R) Xeon(R) CPU

E5-2680 v3 @ 2.50GHz

Haswell 24 64GB YOK longq (21 gün)
s201 - s235 Intel(R) Xeon(R) Gold

6148 CPU @ 2.40GHz

Skylake 40 192GB YOK core40q (7 gün)


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.

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.


Bu kümenin disk yapısı anadolu ve karadeniz makinalarından farklıdır. Sarıyer kümesinde diğer sistemlerimizdeki gibi /AKDENIZ ve /RS şeklinde iki farklı ev dizini yoktur. Eski sistemlerimizdeki dosyalarınız, Sarıyer kümesindeki ev dizininizde bulunmamaktadır. Çünkü /okyanus diski, lnode makinalarınınkinden farklı bir disktir. İhtiyaç duyduğunuz dosyalarınızı bu diske de kopyalamanız gerekecektir.


Sadece eski 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 karadeniz ve maslak sistemlerindeki programlar yeni sisteme 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)


Slurm 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


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. Bu makinaya, önce VPN Bağlantısı yaptıktan sonra, sariyer.uhem.itu.edu.tr adresine ssh bağlantısı yaparak ulaşabilirsiniz.


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 komutunu kullanabilirsiniz:


$ 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    7-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
   core40q   1360    1400       0     34     35    7-00:00:00     1  SINIRSIZ     40


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.


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     42      560     20                        ahmet kadir
 t0111     DURDURULDU     42      560     20  CPU kota asimi uyari  ahmet
 
 
hsaat Projesi Kullanilan CpuSaat:7093/20000 (%35),  Disk:32/200 GB (%15).
t0111 Projesi Kullanilan CpuSaat:203679/202906 (%100),  Disk:692/2000 GB (%34), CPU kota asimi uyarisi!
 
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. 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.


Ayrıca her projenin altındaki satırlarda o projeye iş verebilecek kullanıcı listesi de görüntelenmektedir.


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 -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 -n <cekirdek_sayisi> Çekirdek (core) yani işlemci sayısı.


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

İş Teslimi

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

 $ sbatch basit.sh
Submitted batch job 182


İş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.


Ç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 işiniz bir gpu takılı makinada çalışıyorsa, isler komutu çıktısı, gpu kartının adını ve yük-hafıza kullanım yüzdesini de görüntüler:


$ isler 1504
| MAKINA  YUK      HAFIZA  SWAP | MAKINA  YUK      HAFIZA  SWAP | MAKINA  YUK      HAFIZA  SWAP |
|-------------------------------|-------------------------------|-------------------------------|
| f001  28/28    93/47/128  0/4 | f001 Tesla-K20m Yuk% 0 Hfz% 0 |
|-------------------------------|-------------------------------|-------------------------------|
 
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.


Bu çıktıdaki ilk sütunda f001 makinasının kendi yük, hafıza ve swap durumu gösteriliyorken; ikinci sütunda f001 makinasında takılı gpu kartının (Tesla-K20m) üzerindeki yük ve hafıza kullanım yüzdesi gözükmektedir.


Ç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

Yukarıdaki 182 nolu iş RUNNING olarak gözükmekte. Ancak 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 squeue -l -u ahmet komutunun çıktısında gözüken makinalara (bu örnekte s001) ssh komutu ile bağlanıp, istediğimiz bilgileri doğrudan alabiliriz.


Ancak işimiz çalışmayan (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-C 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

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 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.


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 hazırlanmış örnek betik /okyanus/progs/slurm_betikleri/ayniMakinadaBirdenFazlaIs.sh adresinde bulunabilir. Bu örnek betik bir makinada çalışacak şekilde yazılmıştır. Sadece bir makina isteyerek kullanıınız.


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.


GPU İşi Çalıştırmak

Sarıyer kümesinde, sadece f001, f002 ve f003 hesaplama sunucularında GPU mevcuttur. Dolayısı ile kullanıcılarımız GPU kullanacak programlarını sariyer makinasinda doğrudan derleyemeyiz. GPU kullanan işlerinizi çalıştırmanız için GPU içeren hesaplama makinalarımıza özel gpuq kuyruğu mevcuttur.


Dolayısı ile bir GPU işi çalıştırılacağı zaman Slurm'e gpuq kuyruğunu 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

İş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

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.


TensorFlow İşi Çalıştırmak

Sarıyer kümesinde tensorflow işi çalıştırmak için, bir çok farklı seçenek mevcuttur:

  1. kaynak kodudun doğrudan derlenmesi ile python 2.7.14 sürümünde sadece cpu kullanarak,
  2. işletim sistemi ile gelen python 2.7.5 sürümünde cpu ve gpu kullanarak,
  3. Yüklü bulunan Anaconda2-5.0.1 ve Anaconda3-5.0.1 sürümlerinde kurulu olanları kullanarak,
  4. Kendi ev dizininize, virtualenv ile özel bir python kurulumu yapıp, pip install ile kendi tensorflow'unuzu yükleyerek,
  5. Kendi ev dizininize, kendi Anaconda'nızı yükleyerek.

Sarıyer kümesinde kaynak kodundan doğrudan derlemiş TensorFlow 1.5.0 sürümü, yine kaynak kodundan doğrudan derlenmiş python 2.7.14 sürümünde sadece cpu üzerinde çalışacak şekilde mevcuttur. CPU üzerinde tensorflow çalıştırılmak isteniyorsa bu sürümü tercih etmek hem hız hem de daha yeni bir sürüm olması sebebiyle bizim önerdiğimiz seçenektir. Aşağıda bu sürümü kullanmak için kullanılabilecek betik kullanılabilir. Bu betiği /okyanus/progs/slurm_betikleri/tensorflow-1.5.0-cpu.sh adresinde bulabilirsiniz:


#!/bin/bash
 
#SBATCH -J "Tensorflow-CPU-1.5.0"              # isin adi
 
#SBATCH -A hsaat                         # account / proje adi
#SBATCH -p defq                          # kuyruk (partition/queue) adi
 
#SBATCH -n 56                             # cekirdek / islemci sayisi
#SBATCH -N 2                             # bilgisayar sayisi
 
module load TensorFlow/v1.5.0-compiled-from-source-cpu-only
 
#calisacak tensorflow isi
python programimiz.py



İşletim sistemi ile gelen python 2.7.5 sürümünde, hem cpu (işlemci) üzerinde, hem de gpu üzerinde çalışabilecek tensorflow 1.3 sürümü mevcuttur. İşlemci üzerinde çalıştırmak için yüklenmesi gereken bir module dosyası yoktur. Doğrudan kullanılabilir. Ancak GPU üzerinde çalıştırmak için cuda-8.0 module dosyası yüklenmelidir. Bu amaçla aşağıdaki gibi bir betik kullanılabilir. Bu betiği /okyanus/progs/slurm_betikleri/tensorflow-1.3-gpu.sh adresinde bulabilirsiniz:


#!/bin/bash
 
#SBATCH -J "Tensorflow-GPU"              # isin adi
 
#SBATCH -A hsaat                         # account / proje adi
#SBATCH -p gpuq                          # kuyruk (partition/queue) adi
 
#SBATCH -n 1                             # 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
python programimiz.py

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

Sariyer kümesinde bir çok Anaconda sürümü mevcuttur. Bu programlar aracılığı ile kurulan Tensorflow, Keras, Caffe gibi bir çok programı kullanabilirsiniz. Bu amaçla ilgili module dosyası yüklenmelidir:

#!/bin/bash
 
#SBATCH -J "Tensorflow-GPU"              # isin adi
 
#SBATCH -A hsaat                         # account / proje adi
#SBATCH -p gpuq                          # kuyruk (partition/queue) adi
 
#SBATCH -n 1                             # cekirdek / islemci sayisi
#SBATCH -N 1                             # bilgisayar sayisi
#SBATCH --gres=gpu:1                     # ilave kaynak (1 gpu gerekli)
 
module load Anaconda/Anaconda3-5.0.1-Cuda-8.0
 
#calisacak gpu isi
python programimiz.py

Kendi kullanıcınıza virtualenv ile Python Paketi Kurmak

Sistemimizi kullanırken ihtiyaç duyacağınız programları, dilerseniz, kendi ev dizininize kurabilirsiniz. Bu kullanacağınız programın lisansının kısıtlı olması yada programda kendinize özel bir ayarlama yapacağınız durumlarda gerekebilir. Ancak bazen de python gibi büyük bir programı kendi ev dizininize kurmaya uğraşmak yerine sadece gereken ilave bir paketi kendi ev dizininize kurmak daha pratik bir çözüm olacaktır. Python bu amaçla pip paketlerinin kendi evdizininize kurulmasına izin vermektedir. Ancak sistemde kurulu pek çok python sürümü olduğundan ve farklı çözümleri farklı python sürümleri ile çalıştırmak isteyebileceğinizden, bizim tavsiyemiz virtualenv paketi ile belli dizinlere özel kurulumlar yapmanızdır.


Bu amaçla öncelikle kullanacağımız komutlardan emin olmalıyız. Sistemdeki bir çok python sürümü ile birlikte bir çok pip ve virtualenv komutu da kuruludur. Biz kullanacağımız python sürümü ile gelen pip ve virtualenv komutlarını kullandığımızdan emin olmalıyız. Örneğin module load Python/python-2.7.14 komutu ile yüklediğimiz python sürümü bize aşağıdaki dizinlerdeki python, pip ve virtualenv komutlarını sağlamaktadır:


$ which python
/okyanus/progs/Python/Python-2.7.14/bin/python
 
$ which pip
/okyanus/progs/Python/Python-2.7.14/bin/pip
 
$ which virtualenv
/okyanus/progs/Python/Python-2.7.14/bin/virtualenv


Görüleceği üzere hepsi aynı dizinde bulunmaktalar. Böylece doğru sürümlerinin kullanılır durumda olduğundan emin olduk. Bazen python3 serisinde pip yerine pip3 komutunu yada ilave-moduller3 paketlerinde python komutundan pip komutunu çağırmamız da gerekebilir:


$ pip3 list
 
$ python -m pip list


Sonrasında pip ile kurulu paketlerin listesini sorarak hem pip komutunun doğru çalıştığından emin olalım, hem de kurmaya çalıştığımız paketin zaten yüklü olmadığını görelim. Aşağıdaki komutun çıktı vermesi biraz uzun sürebilir, sabırlı olalım:


$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) 
in your pip.conf under the [list] section) to disable this warning.
absl-py (0.1.10)
attrs (17.4.0)
backports.weakref (1.0.post1)
bleach (1.5.0)
Cython (0.27.3)
enum34 (1.1.6)
funcsigs (1.0.2)
futures (3.2.0)
html5lib (0.9999999)
Markdown (2.6.11)
mock (2.0.0)
nose (1.3.7)
numpy (1.14.1)
pandas (0.22.0)
pbr (3.1.1)
pip (9.0.1)
pluggy (0.6.0)
protobuf (3.5.1)
py (1.5.2)
pytest (3.4.1)
python-dateutil (2.6.1)
pytz (2018.3)
setuptools (28.8.0)
six (1.11.0)
tensorflow (1.5.0)
tensorflow-tensorboard (1.5.1)
virtualenv (15.1.0)
Werkzeug (0.14.1)
wheel (0.30.0)


Burada bu python sürümünde yüklü pip paketlerini gördük. Şimdi yükleme işine geçebiliriz. Öncelikle virtualenv ile kullanacağımız projeler için bir ortak dizin açalım, şart değilse de virtualenv ile çalıştığımızı hatırlamak açısından faydalı olur:


$ mkdir virtualenv-projeleri
 
$ cd virtualenv-projeleri/


Sonrasında ilk virtualenv projemizi başlatabiliriz:

[mercan@sariyer virtualenv-projeleri ]$ virtualenv ilkprojem
New python executable in /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/python
Installing setuptools, pip, wheel...done.
 
[mercan@sariyer virtualenv-projeleri ]$ /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/python --version
Python 2.7.14
 
[mercan@sariyer virtualenv-projeleri ]$ /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/pip --version
pip 9.0.1 from /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/lib/python2.7/site-packages (python 2.7)


Yukarıda görüleceği üzere mevcut python, pip, wheel, python-config, easy_install komutlarının bir kopyası bu proje dizinine konuldu ve bir artık buradaki kopyalarını kullanmalıyız. Bunun için gereken ayarların yapılması için activate komutu çalıştırılmalıdır:

$ source /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/activate
 
(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ which python
~/virtualenv-projeleri/ilkprojem/bin/python


Komut satırının başındaki (ilkprojem) ilavesine dikkat ediniz. Bu ilkprojem virtualenv ayarlarının yüklü (activated) olduğunu göstermekte. Dahası python komutu kendi dizinimizdeki python'u çağırıyor. Artık kuruluma geçebiliriz. regex pip paketini kuralım:


(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ pip install regex
Collecting regex
  Downloading regex-2018.02.21.tar.gz (620kB)
    100% |████████████████████████████████| 624kB 1.3MB/s
Building wheels for collected packages: regex
  Running setup.py bdist_wheel for regex ... done
  Stored in directory: /okyanus/users/mercan/.cache/pip/wheels/63/9b/ce/be27920ad7bd9d2a69038ff983cd9b0a053da42332f4e86361
Successfully built regex
Installing collected packages: regex
Successfully installed regex-2018.2.21
 
(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) 
in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
regex (2018.2.21)
setuptools (38.5.2)
wheel (0.30.0)


Ve sonunda sorunsuzca istediğimiz paketi kurduk. pip list komutunun çıktısında kurulu paketi de görebiliyoruz. Burada birşeye dikkatinizi çekmek istiyorum, virtualenv öncesindeki "pip list" komutunun çıktısında gözüken paketler artık gözükmemekte. Sanki tamamen yeni bir python kurulumu yapmışız gibi aslında.


İşimiz bitince bu virtualenv ortamını kapatmak için, deactivate komutu kullanmalıyız. Artık python komutu da eski şekline döner:


(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ deactivate
 
[mercan@sariyer virtualenv-projeleri ]$ which python
/okyanus/progs/Python/Python-2.7.14/bin/python
 
[mercan@sariyer virtualenv-projeleri ]$


Burada bir dizine kendi paketlerimizi kurulmasını tamamladık. Ancak bu kurduğumuz python ve pip paketlerini kullanacağımız zaman da activate işlemini tekrar etmeliyiz:

[mercan@sariyer ~ ]$ source /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/activate
 
(ilkprojem) [mercan@sariyer ~ ]$


Sisteme iş verirken de mutlaka bu activate komutu da iş betiğine eklenmelidir:


#!/bin/bash
 
#SBATCH -J "ilkprojem"              # isin adi
 
#SBATCH -A hsaat                         # account / proje adi
#SBATCH -p defq                          # kuyruk (partition/queue) adi
 
#SBATCH -n 56                             # cekirdek / islemci sayisi
#SBATCH -N 2                             # bilgisayar sayisi
 
source /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/activate
 
#calisacak python isi
python programimiz.py
 
deactivate

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 yada ayrı ayrı programlar için gereken ayarlamalar yapılarak kullanılabilir. Paket içerisindeki programların ne amaçla kullanılabileceğine aşağıda bağlantıdan bakabilirsiniz:

https://software.intel.com/en-us/get-started-with-parallel-studio-xe-2018-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 özellikle daha eski işlemcilerde derlenmiş programımızın ç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.


Ç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