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:
- VPN Bağlantısı Kur, Bağlantı Açık Kalsın (VPN Kılavuzu),
- Scp/WinScp ile sariyer.uhem.itu.edu.tr makinasına İş İçin Gereken Dosyaları Yükle (SCP Kılavuzu),
- 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),
- SLURM İş Betiği Hazırla (İş Betiği):
- projelerim Komutu ile Proje Seç (Proje Bilgisi),
- bosmakinalar yada spart Komutu ile Kuyruk Seç (Kuyruklar),
- module Komutu ile Program Seç (MODULE Kılavuzu,MODULE Seçimi), yada Kendi ev dizinine kullanacağın programları kur.
- nano Komutu ile SLURM Betiği Hazırla, yada /okyanus/progs/slurm_betikleri adresindekilerden kullan ( NANO Kılavuzu),
- sbatch Komutu ile SLURM'e İş Betiğini Ver (İş Teslimi),
- isler Komutu ile İşin Durumuna Bak (İşin Durumu),
- SLURM İş Betiği Hazırla (İş Betiği):
- Scp/WinScp ile sariyer.uhem.itu.edu.tr makinasından Sonuç Dosyalarını İndir,
- Ssh/Putty Bağlantısını Kapat,
- 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 (interaktif işler hariç, interaktif işler için, hem vpn hem de ssh bağlantısı sürekli açık kalmaya devam etmelidir). İş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.
Altay Kümesi de tüm kullanıcılarımızın kullanıma açıktır. UHeM'de yer alan tüm kümeler, tüm kullanıcılarımıza açıktır. Kullanıcılarımızın altay kümesini kullanmaları için ilave bir başvuru/işlem yapmalarına gerek yoktur. Ancak, altay kumesinde en düşük cpu-saat harcaması, 64 cpu-saat iken, sariyer kümesi için bu değer sadece 28 cpu-saat'tir. Bu sebeble, yeni kullanıcılarımıza öncelikle sariyer kümesinde iş çalıştırarak, UHeM'de iş çalıştırmaya alıştıktan sonra altay kümesine geçmelerini öneririz. Altay kümesi çok daha yeni donanımlardan oluştuğu için, sariyer kümesinde iş çalıştırmaya alıştıktan sonra da altay kümesine geçmenizi öneririz. Altay kümesi hakkında bilgi için: Altay sistemine iş vermek sayfamıza bakınız. |
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) |
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) |
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.
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.
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 spart ( yada bosmakinalar ) komutunu kullanabilirsiniz:
$ 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
long2q 24 312 0 0 1 13 || 1 - 21 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
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. v100q gpu kartı bulunan f014 makinasını 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.
RESORC PENDING 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.
OTHER PENDING 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 başka 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. man spart komutu ile, spart github sayfasından yada spart -h parametresi ile, spart komutu hakkında bilgi alabilirsiniz:
Önemli Uyarı!
Sarıyer Kümesinde, kullandığınız makinaların tüm işlemcileri size ayrılır. 1 makina = 28 işlemci olduğundan, verdiniz işlemci sayısı 1 olsa da 28 işlemci meşgul etmiş olursunuz ve size 28 işlemci fatura edilir. 32 işlemci isterseniz, 2 makina = 56 işlemci faturalanır. Bu sebeble 28 ve katları işlemci istemeniz en doğrusudur (core40q için 40, longq için 24 ve katları)! |
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.
Önemli Uyarı!
#SBATCH -n ile verilen işlemci sayısı, tüm işte kullanılacak TOPLAM işlemci sayısıdır. #SBATCH -N ile verilen makina sayısı, #SBATCH -n ile verilen değeri değiştirmez. #SBATCH -N 10 -n 28 derseniz, Slurm 10 makinada toplam 28 işlemci istediğinizi düşünür. Sarıyer Kümesinde, kullandığınız makinaların tüm işlemcileri size ayrıldığından ve 1 makina = 28 işlemci olduğundan, 28 işlemci kullanırsınız ama size 280 işlemci fatura edilir! 10 makina kullanmak için doğru ifade #SBATCH -N 10 -n 280 şeklindedir. |
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.
Önemli Uyarı!
Çok sayıda iş çalıştıracaksanız, Sariyer kümesinin yollayacağı epostalar için, email adresi başına günde 12 eposta sınırı olduğu dikkate alınız! Birgün içinde, 12. epostadan sonraki eposta istekleriniz çalışmayacaktır. |
İş 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.
Önemli Uyarı!
Neredeyse tüm programlar paralel çalışabilsinler (birden çok işlemciyi kullanabilsinler) diye bir takım değişiklikler gerektirirler. Slurm'den çok sayıda işlemci ve/veya makina istemeniz işinizin bu işlemcileri kullandığı anlamına gelmez. İşinizin birden çok işlemci kullanarak çalışmasını ayarlamanız ve kontrol etmeniz gerekecektir. |
İş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.
Önemli Uyarı!
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.
|
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.
- Licenses: Kullandığınız programın (Ansys fluent yada Matlab vb. paralı programlar için), boşta yeterli lisans olmadığı için işiniz yeterli lisans boşalıncaya kadar bekletilecektir.
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.
Önemli Uyarı!
İnteraktif işlerinizin sonlandığından emin olmak için, işinizin durumuna isler komutu ile bakarak kontrol ediniz! |
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:
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
long2q 48 360 0 2 15 21-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 makinamızı ayırabilmek için v100q yada 7 günden uzun sürecek işlerimiz için long2q 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 -XY 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.
Önemli Uyarı!
İnteraktif işlerinizin sonlandığından emin olmak için, işinizin durumuna isler komutu ile bakarak kontrol ediniz! |
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.
Altay ve Sariyer kümelerinin güncel module listesine aşağıdaki linkten ulaşabilirsiniz. Bu linkteki listede ilave module yükleyerek erişilebilen module'ler yer almamaktadır:
https://www.uhem.itu.edu.tr/modules.html |
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:
- Sadece tek bir bilgisayarda çalışabilen, birden fazla thread ile paralelleştirme: Bu yöntem için en yaygın metod OpenMP kullanmaktır.
- 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.
Başka Kullanıcılarla Veri Paylaşmak
UHeM'de tüm kullanıcı dizinleri kullanıcıdan başkasının okuyamayacağı şekilde açılmaktadır. Ancak bu durum, kullanıcılarımızın kendi dosyalarını başka kullanıcıların erişimine açamayacakları anlamına gelmez.
Öncelikle linux 'daki dosya haklarından bahsedelim. Linux'ta tüm dosyalara ve dizinlere erişim, 3 ayrı hak ile kontrol edilmektedir: Okuma (Read), Yazma (Write), ve Çalıştırma (eXecute). Bu haklar ls gibi komutlarda rwx harfleri ile gösterilir. Bu haklar üç grup kullanıcı için tanımlanmaktadır: Kullanıcının-Kendisi (User), Grup (Group), ve Diğerleri (Others).
[mercan@sariyer ~ ]$ ls -alh
total 977K
drwx------ 35 mercan hsaat 104 May 21 16:41 .
drwxr-xr-x 1011 root root 1009 May 28 15:21 ..
-rw-r----- 1 mercan hsaat 129 Apr 18 2022 ahmet.txt
drwxr-x--- 5 mercan hsaat 3 Apr 12 2022 Ansoft
drwxr-x--- 4 mercan hsaat 48 Aug 17 2023 .ansys
-rwxr-x--- 1 mercan hsaat 1.1K Aug 17 2023 AnsysEDT.sh
Yukarıda ls -alh komutunun çıktısını görüyorsunuz. . (tek nokta) ile gösterilen bulunduğumuz dizindir. Bu durumda ev dizinimiz. Hakları ise, drwx------ ile gösterilmekte. İlk karakter d dizin (directory) olduğunu gösteriyor. Dizin değil, dosya ise - (çizgi) ile başlayacaktı. Sonrası sırasıyla rwx bloklarından 3 adet gösteriyor. Ancak bu haklar verilmişse harf olarak, verilmemişse --- şeklinde 3 çizgi olarak gösterilmekte. Buradan kullanıcının bu dizini okuma, yazma ve çalıştırma hakkına sahip olduğunu ama grubun (hsaat grubuna üye kullanıcıların) ve diğer tüm kullanıcıların ise okuma, yazma ve çalıştırma hakklarına sahip OLMADIKLARI anlaşılmaktadır.
Dizinler için r (read) dizin içindeki dosya isimlerini görebilmek demektir. w (write) ise dizin içerisine yeni dosya açabilmek demektir. Son olarak x (execute) ise dizin içine girebilmek (erişebilmek) demektir. Sonuçta dizinimizin içerisindeki dosya adlarının grup (burada hsaat) kullanıcıları tarafindan görülebilmesi için g bloğunda r hakkına, dizin içerisine girilebilmesi için x hakkına ihtiyaç vardır. Bu iki hakkı da, grup için vermenin yolu, chmod komutudur:
[mercan@sariyer ~ ]$ chmod g+rx ./
[mercan@sariyer ~ ]$ ls -alh
total 977K
drwxr-x--- 35 mercan hsaat 104 May 21 16:41 .
drwxr-xr-x 1011 root root 1009 May 28 15:21 ..
-rw-r----- 1 mercan hsaat 129 Apr 18 2022 ahmet.txt
drwxr-x--- 5 mercan hsaat 3 Apr 12 2022 Ansoft
drwxr-x--- 4 mercan hsaat 48 Aug 17 2023 .ansys
-rwxr-x--- 1 mercan hsaat 1.1K Aug 17 2023 AnsysEDT.sh
Ancak dikkat ederseniz, sadece dizinin hakları değişti. İçindeki dosyaların hakları aynı durumda. Eğer tüm dosya ve dizinlerimize bu hakları vermek istersek, chmod komutunu -R (büyük R) parametresini de vermeliyiz:
[mercan@sariyer ~ ]$ chmod -R g+rx ./
[mercan@sariyer ~ ]$ ls -alh
total 977K
drwxr-x--- 35 mercan hsaat 104 May 21 16:41 .
drwxr-xr-x 1011 root root 1009 May 28 15:21 ..
-rw-r-x--- 1 mercan hsaat 129 Apr 18 2022 ahmet.txt
drwxr-x--- 5 mercan hsaat 3 Apr 12 2022 Ansoft
drwxr-x--- 4 mercan hsaat 48 Aug 17 2023 .ansys
-rwxr-x--- 1 mercan hsaat 1.1K Aug 17 2023 AnsysEDT.sh
Aslında linux'da doğrudan bir kullanıya özel haklar vermek de mümkundür. Ancak lafı uzatmamak için bu konuya girmeyeceğiz. Dilerseniz kendiniz Access Control Lists (ACL) konusuna internetten bakabilirsiniz.
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, lbzip2 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
Önemli Uyarı!
'En son alınan 30 adet bir A100 GPU içeren ve 10 adet dört A100 GPU içeren sunucularımız altay kümesinde kullanıma açılmıştır! Bu sunucuları kullanmak için, Altay kümesinde a100q ve a100x4q kuyruklarına iş verebilirsiniz Altay kümesi hakkında bilgi için: Altay sistemine iş vermek sayfamıza bakınız. Sariyer kümesindeki v100q kuyruğundaki GPU'lar hem sayıca az hem de çok daha eskidir. |
Sarıyer kümesinde, 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 makinamıza özel v100q kuyruğu mevcuttur.
Dolayısı ile bir GPU işi çalıştırılacağı zaman Slurm'e v100q 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 f014 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 v100q -n 1 --pty bash -i
[ahmet@f001 ~]$ module load cuda/cuda-10.2-v100q
İşimiz bitince exit komutu yada ctrl-d tuşlarına basarak makinadan ayrılırız ve sisteme verdiğimiz interaktif iş sonlanmış olur. f014 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 v100q # kuyruk (partition/queue) adi
#SBATCH -n 4 # cekirdek / islemci sayisi
#SBATCH -N 1 # bilgisayar sayisi
#SBATCH --gres=gpu:4 # ilave kaynak (1 gpu gerekli)
module load cuda/cuda-10.2-v100q
#calisacak gpu isi
nvidia-smi
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.
Derleme ve En-iyileme işlemleriniz için PRACE'in hazırladığı Best Practice Guide Modern Processors Accelerators dökümanını (ingilizce) tavsiye ederiz. |
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.
İş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. |
Derleme ve En-iyileme işlemleriniz için PRACE'in hazırladığı Best Practice Guide Modern Processors Accelerators dökümanını (ingilizce) tavsiye ederiz. |
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.