TRUBA-levrek-cuda

TRUBA Wiki Sayfası sitesinden

Git ve: kullan, ara

Konu başlıkları

Giriş

Levrek olarak adlandırılmış hesaplama sunucularından ve her bir sunucuya adanmış 2şer adet Nvidia M2090 GPU kartından oluşan hesaplama kümesi Kasım 2014 tarihinde hizmete alınmıştır.

Sistem Mimarisi ve Yapılandırması

Kümedeki levrek sunucularının özellikleri aşağıdaki gibidir:

İşlemci: 2x Intel Xeon E5-2680 (toplamda 24 çekirdek 32 thread)

GPU: 2x Nvidia M2090

Bellek : 256 GB ECC

Disk  : 2 x 600 GB 2.5" SAS (Raid 1 yapılandırılmış)

Performans Ağı bağlantısı: 40 Gbit QDR Infiniband

Yönetim:Gigabit Ethernet

Teorik performans: 1090 Gflops (double) (işlemci) + 2x 1330 Gflops (GPU)

HPL Performansı: 960 Gfops (işlemci)

SPEC_fp Performansı: 780 (işlemci)

Küme 16 klasik hesaplama sunucusundan ve her sunucuya adanmış 2şer adet Nvidia M2090 GPU kartından oluşmaktadır. Kümede hizmet veren donanımın türü ve miktarı zaman içinde değişiklik gösterebilir. Hesaplama sunucuları birbirlerine 644 portlu QDR Infiniband anahtarlama cihazı (Fat-tree) ile bağlıdır.

Kuyruklar (Partitions)

Bölüm adı # Node # çekirdek iş süresi sunucular
levrek-cuda 16 16x24 15-00:00:00 levrek[129-144]

Görülen ihtiyaç üzerine kuyruklardaki kaynak miktarı ve sunucu aralığı değiştirilebilmektedir.

İşletim Sistemi

Sistemlerde Centos Enterprise Linux 7.3 işletim sistemi kurulu bulunmaktadır.

Dosya Sistemleri

Hesaplama kümelerindeki sunucuların kendi üzerlerindeki yerel disklerden bağımsız olarak, sunucular kullanıcı verilerin saklanması ve kullanıcı işlerinin çalıştırılması amacı ile paylaştırılmış merkezi dosya sistemlerini kullanırlar. Merkezi dosya sistemleri yüksek başarımlı LUSTRE parelel dosya sistemi kullanarak yapılandırılmıştır.
Kullanım amacına göre dosya sistemleri farklı boyutlarda, ve farklı özellikteki donanımlarla hazırlanırlar. Örnegin, kullanıcı ev dizinleri performans dosya sistemine göre boyut olarak daha büyük olmasına rağmen, hız bakımından performans dosya sistemi daha başarılıdır.

Ev dizinleri ve Ortak yazılımlar

Kullanıcı ev dizinleri ve TRUBA tarafından sağlanan yazılımların (derleyici, uygulama ve kütüphaneler) kaydedildiği alan için “kullanıcı ev dizini” terimi kullanılmaktadır. Kullanıcı ev dizinleri için iki farklı dosya sistemi kullanılmaktadır. Lufer ve Mercan kümelerinde kullanıcı ev dizinleri (home_palamut1, home_palamut2 ve home_eymir) için /home_palamut dosya sistemi kullanılmaktadır (Hesaplama kümesi kullanım dışı olduğu için bu dosya sistemi de kullanım dışıdır). Levrek kümesinde kullanıcı dizinleri /truba/ dosya sistemi altında bulunmaktadır. Kısa zaman sonra, /home_palamut dosya sistemi kullanımdan kaldırılarak, tüm veri /truba dosya sistemine aktarılacaktır. Bu nedenle kullanıcıların ivedilikle /truba dosya sistemi üzerinde çalışmaya başlamaları ve yeni uygulamalarını bu dosya sistemi üzerinde derlemeri gerekmektedir.
Gerek home_palamut gerekse truba dosya sistemlerinde kullanıcılar için kota uygulaması söz konusudur. Tüm kullanıcıların disk kotaları eşit olarak ayarlanmıştır. ARDEB vasıtası ile hesap açılan ve projeleri kapsamında işlerini çalıştıran kullanıcılar için, standart kota miktarından farklı olarak, projelerinde öngörülen disk kotası miktarı uygulanmakdatır.
Kullanıcı ev dizinlerinin yedekleri alınmamaktadır. Bu nedenle buradaki kullanıcı verilerinin düzenli olarak kullanıcılar tarafından kendi kişisel bilgisayarlarına aktarılması, önemsiz verilerin ise yine kullanıcının kendisi tarafından silinmesi beklenmektedir. Kullanıcı ev dizinleri kesinlikle uzun vadeli bir depolama alanı olarak düşünülmemelidir.
Kullanıcı dizinleri hesaplama sunucuları tarafında read-only erişilebilir durumdadır.Kulanıcılar hesaplamaları sırasında bu dizindenlerden verilerini okuyabilirlerken, bu dizinlere herhangi bir çıktı yazamazlar. Bu nedenle işler ev dizinlerinde değil performans alanında (truba_scratch) çalıştırılmalıdır.
Kullanıcı ev dizinleri standart olarak sadece dizinin sahibi tarafından erişilebilecek şekilde oluşturulurlar. Ancak zamanla kullanıcılar dizin erişim hakklarını bilerek yada bilmeyerek değiştirebilirler. Kullanıcı ev dizinlerindeki verinin güvenliğinden yine kullanıcın kendisi sorumludur.
Lüfer/Mercan kümelerinde ortak yazılımlar /home_palamut1/software dizininde tutulurlar. Bu dizine tüm kullanıcıların read-only erişimleri vardır. Bu dizindeki yazılımlar genel olarak ücretsiz lisanslı yazılımlardır ve tüm TRUBA kullanıcılarının -yazılımın lisans haklarına uyulması şartı ile kullanımına açıktır.

Scratch dizini (/truba_scratch)

Hem Mercan/Lüfer kümesinde hemde Levrek kümesinde hesaplama performans alanı okarak /truba_scratch dosya sistemi kullanılmaktadır.
Yapısı gereği kullanıcı ev dizinlerine göre boyut olarak daha küçük ancak daha hızlı çalışacak şekilde yapılandırılmıştır. Kullanıcıların işlerini bu dosya sisteminde çalıştırması amaçlanmıştır.
Hesap sırasında oluşacak dosyaların boyutları tam olarak kestirilemediğinden bu dosya sisteminde kota uygulanmamaktadır. Ancak bu dosya sistemindeki dosyalar düzenli olarak kullanıcı tarafından silinmelidir. Dosya sisteminde, 30 gün boyunca hiç erişilmemiş dosyalar düzenli olarak sistem yöneticisi tarafından silinmektedir.
Bu dosya sistemi kesinlikle kalıcı bir dosya depolama alanı olarak düşünülmemelidir. Dosya sistemindeki verilerin güvenliğinden kullanıcının kendisi sorumludur.

Sisteme Bağlantı

Kullanıcılar kullanıcı arayüzü sunucularına SSH ile bağlantı sağlayarak, hesaplama kümelerine iş gönderebilir, dosya düzenleme işlerini gerçekleştirebilir, verilerini kendi kişisel bilgisayarlarına aktarabilirler. Şu an için iki adet kullanıcı arayüzü kullanıcılara hizmet vermektedir.
levrek1.ulakbim.gov.tr: Tüm kuyruklara iş göndermek için ve /truba/home dosya sisteminde işlem yapmak için kullanılır.
sardalya1.ulakbim.gov.tr: Sardalya kuyruğundaki sunucularda kümenin geri kalan sunucularındakinden farklı olarak centos7.3 kurulu bulunmaktadır. Bu kuyrukta çalıştırılacak işlerin bu sunuculara uygun bir şekilde derlenebilmesi için kullanıcılar bu sunucuya bağlanıp, derleme ve test çalışmalarını gerçekleştirip, sardalya ve diğer kuyruklara da iş gönderebilirler... Bu sunucuya şu an için sadece levrek1 sunucusu üzerinden geçiş yapılabilmektedir.
mercan9.ulakbim.gov.tr: Mercan kuyruğundaki sunucularda centos7.3 kurulu bulunmaktadır. Bu kuyrukta çalıştırılacak işlerin bu sunuculara uygun bir şekilde derlenebilmesi için kullanıcılar bu sunucuya bağlanıp, derleme ve test çalışmalarını gerçekleştirip, mercan ve diğer kuyruklara da iş gönderebilirler... Bu sunucuya şu an için sadece levrek1 sunucusu üzerinden geçiş yapılabilmektedir.

Doğrudan Erişim

Sadece ULANKET ağına dahil kurumlardaki bilgisayarlardan (kamu ve bazı vakıf üniversiteleri) kullanıcı arayüzü sunucularına doğrudan erişime izin verilmektedir. ULAKNET'deki tüm bilgisayarlar herhangi bir erişim iznine ihtiyaç duymadan SSH ve SCP ile erişim yapabilirler.

OpenVPN Baglantısı

Bilgisayarına sabit ve gerçek bir IP adresi tanımlama şansı olmayan kullanıcılar, OpenVPN kullanarak ile TRUBA ağına dahil olabilirler ve kullanıcı arayüzü suncusuna ulaşabilirler. OpenVPN bağlantısı, sadece kullanıcı adı ve parola kullanarak gerçekleştirilebileceği gibi, bunu desteklemeyen versiyonlarda, TRUBA 'dan temin edilecek geçerli bir sertifika ile de gerçekleştirilebilir.


Kullanıcı adı ve parola ile OpenVPN Erişimi

OpenVPN bağlantısını, herhangi bir sertifikaya ihtiyaç olmadan, TRUBA kullanıcılarının sistem üzerindeki kullanıcı adları ve parolalarını kullanarak gerçekleştirmeleri mümkündür. Kullanıcı adı ve parola kullanarak farklı işletim sistemleri üzerinden bağlantı gerçekleştirmek için openvpn 'in ilgili sürümü indirilerek, ilgili yapılandırma dosyası OpenVPN kurulum dizinindeki config dizinine kopyalanmalıdır.
OpenVPN'nin eski sürümleri kullanıcı adı - parola doğrulamasını desteklemediği için, daha önce yüklenmiş olan OpenVPN programlarının da güncellenmesi gerekmektedir.
OpenVPN genel yapılandırma dosyası
OpenVPN android yapılandırma dosyası
OpenVPN Ios yapılandırma dosyası
Viscocity genel yapılandırma dosyası
NOT: Kaydedilen dosya adının ovpn ile bitmesi önemlidir. Bazı sistemlerde ve web tarayıcılarda dosya adının sonuna txt eklenebilmektedir.
VPN bağlantısını bu şekilde yaptıktan sonra, kullanıcı arayüzüne aşağıdaki adreslerden herhangi bir ssh istemcisi ile ulaşılabilir.
levrek1 için levrek1.yonetim yada 172.16.7.1
sardalya1 için sardalya1.yonetim yada 172.16.10.1
barbun1 için barbun1.yonetim yada 172.16.11.1
Windows 10'da OpenVPN Kurulumu
Bu wiki belgesini takip edebilmek ve kurulumu tamamlayabilmek için aşağıdaki gereksinimlerin sağlanmış olması gereklidir.
Kullandığınız bilgisayar Microsoft Windows 10 işletim sistemini çalıştırmalı, ve tüm güncellemeleri ve yamaları yapılmış olmalıdır.
Kullandığınız bilgisayar üzerinde yönetici haklarına sahip olmanız beklenmektedir.
Kullanıcının ağ bağlantısında OpenVPN bağlantılarını engelleyen bir güvenlik cihazı ya da yapılandırma bulunmamalıdır.

OpenVPN'in Kurulumu

OpenVPN ile ilgili yapılandırmanın yapılmasından önce işletim sistemine OpenVPN kurulumunu yapmanız gerekmektedir. Eğer daha önceden sisteminize OpenVPN kuruldu ise, OpenVPN versiyonunun 2.4.0'dan yüksek olması gerekmektedir. Daha eski OpenVPN sürümleri bu belgedeki yapılandırma adımları ile uyumlu değildir ve bağlantı kurmakta başarısız olacaktır.

OpenVPN'in İnternetten İndirilmesi

OpenVPN, yazılımın ana sayfasından, openvpn.net adresinden indirilebilmektedir. OpenVPN istemcisinin indirme sayfasına buradan ulaşabilirsiniz.
Karşınıza gelen web sayfasında, en yukarıda belirtilen sürüm her zaman en güncel sürümdür. Bu belgedeki adımlara uygun şekilde kurulum yapabilmek için ekran görüntüsünde de görülen tablonun en alt satırındaki "Installer, Windows Vista and Later" ile belirtilmiş olan .exe dosyasını indirmeniz gerekmektedir. Bu dosyayı indirilip, kaydedildikten sonra dosyayı çalıştırarak kuruluma başlayabilirsiniz.

OpenVPN İstemcisinin Kurulması

OpenVPN istemcisinin kurulumunu başlatmak için indirdiğiniz dosyayı çalıştırmanız yeterlidir. İlk adımda programın sistemde değişiklik yapabilmesi için sizden izin istenecektir.
Kurulumu başlatabilmeniz için çıkan bu uyarıya Evet cevabı vererek devam etmeniz gerekmektedir. Bu adımdan sonra kurulum programı açılacaktır
OpenVPN kurulum yardımcısı sistem dilinden bağımsız olarak İngilizce olarak açılmaktadır. İlk ekranı Next'e basarak geçebilirsiniz.
Bir sonraki Ekranda OpenVPN lisans sözleşmesi gösterilecektir. "I Agree" butonuna basarak kabul edebilir ve bir sonraki adıma geçebilirsiniz.
Bu adımda ise OpenVPN istemci ile beraber kurulacak olan yan yazılımlar ve yazılım parçaları seçilmektedir. Bu adımda herhangi bir değişiklik yapmadan Next seçeneğini seçerek devam edebilirsiniz.


Bu adımda OpenVPN istemcinin nereye kurulacağını belirleyebilirsiniz. Sisteminizde özel bir düzenleme yok ise, bu adımda herhangi bir değişiklik yapmadan, Next seçeneğini seçerek devam edebilirsiniz.
Bu adımdan sonra kurulum başlayacaktır.
Kurulum sırasında yukarıdaki bir uyarı ile karşılaşabilirsiniz. Bu uyarı, OpenVPN'in sanal ağ bağdaştırıcı sürücüsünü kurup isteyip istemediğinizi sormaktadır. Bu sürücü istemcinin çalışması için gerekli olduğundan Yükle seçeneğini seçmeniz gerekmektedir. Daha sonra istemcinizi güncellerken bu soru ile karşılaşmak istemiyorsanız Her zaman "OpenVPN Technologies, Inc." kaynaklı yazılımlara güven seçeneğini işaretleyebilirsiniz.
Sanal ağ bağdaştırıcı sürücüsü de sisteme kurulduktan sonra kurulum tamamlanacaktır. Next seçeneğini seçerek devam edebilirsiniz.
Son ekranda ise README dosyasını okuyup istemek istemediğinizi seçtikten sonra Finish'e basarak kurulumdan çıkabilirsiniz.
OpenVPN kurulumu tamamlandıktan sonra, OpenVPN istemcisinin yapılandırılması gerekmektedir. Bir sonraki adımda bu işlemler detaylı şekilde anlatılacaktır.

OpenVPN İstemcisinin TRUBA Bağlantısı için Yapılandırılması

OpenVPN istemcisi kurulduktan sonra TRUBA altyapısına bağlanabilmeniz için gerekli olan yapılandırma dosyasını indirmeniz gerekmektedir. İlgili dosyaya yukarıdaki bağlantıdan ulaşabilirsiniz.
Not: Eğer tarayıcınız dosyayı indirmek yerine pencerede açar ise, lütfen bağlantıya sağ-tıklayarak kaydediniz. Firefox için bu seçenek Bağlantıyı farklı kaydet... dir.
İndirdiğiniz dosyayı kullanmak için taşıyabileceğiniz iki konum bulunmaktadır. Bunlardan bir tanesi bağlantıyı sadece sizin kullanmanızı sağlarken, diğeri sistemdeki tüm kullanıcıların kullanmalarına izin vermektedir.
Sizin kullanımınız için (önerilen): C:\Kullanıcılar\<kullanıcı_adınız>\OpenVPN\config
Genel kullanım için: C:\Program Files\OpenVPN\config
Dosyayı kopyaladıktan sonra masaüstünüzde kurulum sırasında oluşmuş olan OpenVPN GUI bağlantısına çift tıklayarak istemciyi çalıştırabilirsiniz.
İstemciyi çalıştırdığınız zaman saatin yanında istemcinin simgesi belirecektir.
Bu simgeye sağ tıkladığınız zaman bir menü açılacaktır. Buradan Bağlanı seçerek bağlantınızı kurabilirsiniz.
Bağlantı kurduğunuzda OpenVPN istemcisi sizden kullanıcı adınızı ve parolanızı isteyecektir. Kullanıcı adı ve parolanız arayüz makinesine bağlantı için kullandığınız kullanıcı ve parola ile aynıdır.
Not: Eğer sisteminize ilk defa OpenVPN kuruyorsanız, Windows Güvenlik Duvarı aşağıdaki gibi bir pencere ile bağlantı izni isteyebilir. Bütün ağ türlerini seçtikten sonra Erişime izin ver seçeneğini seçmeniz gerekmektedir.
Bu noktada OpenVPN bağlantınız kurulmuş olacaktır. Bağlantı başarılı bir şekilde kurulduğunda aşağıdaki gibi bir bildirim gelecektir. Atanan IP kısmı aşağıdaki resim ile farklılık gösterebilir ve her bağlantınızda değişebilir, bu bir problem değildir.

Ortam ve Programlama

Kaynak Yöneticisi ve İş Döngüsü

Mevcut hesaplama kaynaklarının verimli kullanabilmesini sağlamak amacı ile tüm hesaplama sunucuları hesaplama kuyrukları ile organize edilerek SLURM kaynak yöneticisi ile yönetilmekte ve kullanılmaktadır.. Kaynak yöneticisi hakkında detaylı bilgiye üreticinin web sayfasından (https://computing.llnl.gov/linux/slurm/) erişmek mümkündür.

Temel SLURM komutları

Temelde sbatch ve squeue komutları iş göndermek işinizin durumunu izlemek için yeterli olsa da ek bazı SLURM komutlarını biliyor ve kullanıyor olamak, kullanım sırasında karşılaşılabilecek pek çok sorunu hızlıca çözmek ve sistemin genelini daha iyi kavramak açısından önemlidir.
Aşağıda sık kullanılan bazı komutların temel fonksiyonları hakkında özet bilgiler verilmiştir. Ancak bu komutlar pek çok ek ve özelliği, komut yanına yazılacak parametrelerle sağlayabilmektedir. Komutların ek özellikleri ve detayları hakkında pek çok bilgiye, komutların yardım sayfalarından (man pages) yada SLURM'un web sitedinden ulaşılabilir. Komutların yarım sayfasına, kullanıcı arayüzü sunucularından aşağıdaki komutla ulaşılabilir.


$> man <komut_adi>
sinfo: İş kuyruklarının güncel kullanım durumunu ekrana basar. Buradan edilinecek bilgi ile kuyruğa gönderilecek işin kaynak miktarı planlanarak en hızlı şekilde başlayabileceği kuyruğa yönlendirilebilir.Kullanılacak ek parametrelerle, listelenecek bilginin türü ve miktarı değiştirilebilir.
squeue: Kullanıcının kuyrukta bekleyen ve çalışan işlerini görüntüler. Kullanılacak ek parametrelerle, listelenecek bilginin türü ve miktarı değiştirilebilir. Kullanıcının tüm işleri listelenebileceği gibi (varsayılan), işin iş numarası parametre olarak verilerek, o işe özel bilgilerin dökümü de alınabilir.
sbatch: Hazırlanan iş betiğini kuyruğa göndermek için kullanılır. Parametreler betik dosyasında verilebilecegi gibi komutun yanına da yazılabilir. İşin akışını, verimini ve kontrolünü sağlayacak pek çok parametresi vardır.
srun: Alternatif olarak işler sbatch yerine srun komutu ile de çalıştırılabilir. Srun kullanılırken çalıştırılacak komut doğrudan srun ve parametrelerinin sonuna yazılır. Basit ve küçük işleri çalıştırmak için hızlı bir yöntemdir. Sbatch'de olduğu gibi pek çok önemli parametresi vardır.
scancel : Kuyrukta sırada bekleyen yada o anda çalışmakta olan işleri iptal etmek için kullanılır.
salloc: Komut satırından interaktif iş çalıştırmak için kullanılır. Salloc komutu ile öncelikle istenilen kaynak miktarı “allocate” edilerek salloc komut satırına geçilir, sonrasında srun komutu işe işler interaktif olarak çalıştırılır. Çalışma sırasında kullanıcı işin çalışmasına müdehale edebilir.
scontrol: Küme, kuyruk (partition) yada herhangi bir iş ile ilgili bilgilerin dökümü alınabilir, izin verildiği ölçüde, müdehale edilebilir. Kuyruğa gönderilmiş olan işler üzerinde, işleri silmeden güncelleme yapılmasına imkan sağlar.
sacct: Beklemede, çalışmakta yada daha önce çalışmış ve sonlanmış olan işler yada tek bir iş hakkında ayrıntılı rapor ve bilgi alınmasına imkan verir. Pek çok parametre içerir. Örneğin belli tarihler arasında başlamış ve bitmiş işlerin listesi, çalışma süresi, kullandığı bellek miktarı, üzerinde çalıştığı sunucuların adresleri vs, gibi iş/işler ile ilgili bilgi alınması mümkündür.
sstat Çalışmakta olan işin kullandığı, kullanmakta olduğu sistem kaynakları hakkında bilgi verir. --format= ile verilecek bilgi türleri seçilebilir.

SLURM betiği özellikleri

Herhangi bir SLURM betiği aslında BASH kabuk betiğidir. BASH kabuk programlama dilinin tüm öğelerini bu betikte kullanarak, pek çok detaylı analizi iş kuyruklarında yaptırmak mümkün.dür. BASH dilini betikte kullanarak, SLURM'un (yada herhangi bir başla kaynak yöneticisinin) sağlayamayacağı esnekliği betiklere eklemek mümkündür. Kabuk programlama ile ilgili wiki sayfamızda bulunan “Temel Kabuk Programlama” dökümanına göz atabilirsiniz.


Kabuk programlamadan bağımsız olarak, Herhangi bir SLURM betiği temel olarak 3 ana bölümden oluşur. Başlangıç (Parametreler, tanımlar), gövde ve iş başlatma/çıkış.
Başlangıç
Bu bölümde, hesaplama sırasında kullanılacak banka hesabı ve işin çalışacağı yer, zaman sınırı, çekirdek ve node sayısı gibi işin temel özellikleri tanımlanır. Her tanım satırı #SBATCH işe başlar. Bu bölümde işin akışını belirleyecek pek çok tanım yapılabileceği gibi, temel birkaç tanımın yapılması işin çalışması için yeterlidir.
Bu tanımların bir kısmı betik dosyasının içerisinde yapılabilecegi gibi, bir kısmı sbatch komutu ile dosya kuyruğa gönderilirken komutun yanında parametre olarak da kullanılabilir. örnegin sbatch -N 4 -n 16 is_dosyasi_adi


#!/bin/bash Betiği yorumlayacak interptreter. Bu şekilde kalması gerekir.
#SBATCH -p İşin çalıştırılacağı kuyruk adı (partition)
#SBATCH -A İş için kullanılacak kullanıcak bankaccount. Grup halinde yapılan çalışmalarda kullanıcı adından farklı olabilir. ARDEB kanalı ile açılan TBAG proje hesaplarına ayrıcalıklı olarak iş göndermek için, bu kısıma ilgili (ve kullanıcı hesabınız için izin verilen) tbag hesabının yazılması gerekir.
#SBATCH -J İşin kuyrukta görülecek adı.
#SBATCH -n Görev sayısı (mpi işleri için, uygulamanın çalıştırılacağı kopya sayısı). Normalde sbatch herhangi bir görev çalıştırmaz. İş, çalışacağı sunucuya düşüp, master nodda çalışmaya başladığında, betik linux komut satırından çalıştırılmış gibi davranır. Betikte işin çalıştırılacağı komut satırında özel bir durum belirtilmemişse işin tek kopyası çalıştırılır. Ancak satırda mpirun yada mpiexec komutları kullanılmışsa, ilgili uygulamanın -n kopyası çalıştırılır.
#SBATCH -c Her bir görev için kullanılabilecek en fazla çekirdek sayısını belirtir (cores per task) . Varsayılan değeri 1'dir. Eğer hibrid işler (mpi+openmp) yada multitask (openmp sadece) çalıştırılacaksa, bu parametrenin kullanılması gerekir.. Değeri OMP_NUM_THREADS değişkeninin değeri işe aynı olacak şekide seçilmelidir. Değeri 1 sunucudaki çekirdek sayısından fazla olamaz.. Eğer aynı sunucusu uzerinden 1 den fazla task (n) çalıştırılacaksa, sunucu başına düşen görev sayısı x görev başına düşen çekirdek miktarı en fazla ilgili sunucudaki çekirdek sayısı kadar olabilir. Örnegin 2 adet 28 çekirdekli sunucunun tamamı kullanarak 8 processli (task) bir MPI+openmp hibrid işi çalıştırılacaksa, process başına en fazla 7 çekirdek kullanılabilir. (sunucu başına 4 process düşer, sunucuda toplam 28 çekirdek varsa, her bir process için en fazla 7 çekirdek kullanılabilir)
#SBATCH --threads işlemcilerin hyperthreading özelliklerini kullanmak için tanımlanır.. Mevcut işlemcilerde çekirdek başına 2 thread düşmektedir. Örnegin 28 çekirdekli bir sunucuda, bir openmp işini 56 threadle (OMP_NUM_THREADS=56) çalıştırabilmek için -N 1 -n1 -c28 --threads=2 tanımı kullanılabilir..
#SBATCH --mem= Bu parametre ile iş için toplamda en fazla ne kadaar bellek kullanılacağı belirtilmektedir. kullanımı zorunlu değildir. Eğer Bu parametre kullanılmazda her bir çekirdek için DefMemPerCore kadar bellek ayrılır.. Eğer daha fazla belleğe ihtiyaç duyulacaksa, bu parametre ile ihtiyaç duyulan bellek miktarı arttırılabilir. Ancak bu değer en fazla çekirdek_sayisi x MaxMemPerCore kadar arttırılabilir.
#SBATCH --mem-per-core= Bu parametre ile her bir çekirdek için ihtiyaç duyulan bellek miktarı belirtilir. Kullanımı zorunlu değildir. Eğer Bu parametre kullanılmazda her bir çekirdek için DefMemPerCore kadar bellek ayrılır.. Eğer daha fazla bellege ihtiyaç duyulacaksa, bu paramere ile ihtiyaç duyulan bellek miktarı arttırılabilir. Ancak bu değer en fazla MaxMemPerCore kadar olabilir.


#SBATCH –time= İşin en fazla çalışma süresi. Bu süre zarfında tamamlanmamış olan işler, zaman dolduğunda otomatik olarak öldürülürler. Burada verilecek değer ilgili kümenin sınırından yüksek olamaz. Herhangi bir değer verilmeden gönderilen işler, çalışmaya başladıktan 1 dakika sonrasında sistem tarafından otomatik olarak sonlandırılırlar.
#SBATCH –no-requeue İş çalışırkan bazı durumlarda, hesaplama suncusundan kaynaklı sebeplerle, iş hata alarak sonlanabilir, bu durumda işi kuyruğa otomatik olarak yeniden gönderilir. İşin kuyruğa yeniden gönderilmesi genelde faydalı bir özelliktir, ancak eğer iş kaldığı yerden devam edecek şekilde yapılandırılmamışsa yada kullanılan uygulamanın böyle bir özelliği yoksa ve o ana kadar üretilen verilerin üzerine yeni verilerin yazılma ihtimali varsa, bu opsiyon kullanılarak işin kuyruğa otomatik olarak yeniden gönderilmesi engellenebilir.


#SBATCH –output= İş çalışırlen, kullandığınız uygulamanın ya da betiğinizde kullandığınız bash programla öğelerinin ekrana basacağı (STDOUT) bilgilerin yazılacağı dosyabın tam adresi ve adı. Bu adresin scratch dizinde olması zorunludur.
#SBATCH –error= İş çalışırlen, kullandığınız uygulamanın ya da betiğinizde kullandığınız bash programla öğelerinin ekrana basacağı hata mesajlarının (STDERR) yazılacağı dosyanın tam adresi ve adı. Bu adresin scratch dizinde olması zorunludur.
Eğer --error ve --output parametreleri belirtilmezse, tüm ekran çıktısı otomatik olarak slurm-JOBID.out dosyasına yönlendirilir.


#SBATCH -N Hesaplama sırasında, kullanıcak çekirdeklerin kaç farklı node tarafından sağlanacağını belirler. Herhangi bir tanım girilmemişse, çekirdekler rasgele sayındaki nodelardan rastgele sayıda sağlanırlar. Node sayısı için herhangi bir tanımlama yapmamak işlerin mümkün olan en hızlı şekilde başlamasını sağlar, ancak performans testlerinde alıncak sonuç, her iş için farklı olabilir, Eğer talep edilen çekirdeklerin nodelar tarafından eşit sayıda sağlanması istemiyorsa, -n -N parametresi yerine --ntasks-per-node ve -N parametreleri birlikte kullanılmalıdır. Örnegin işiniz için toplamda 16 çekirdeğin 4 sunucu tarafından eşit sayıda sağlanmasını istiyorsanız -N 4 --ntasks-per-node=4 parametresini kullanmalısınız.
Not: --ntask-per-node parametresi openmpi-1.6.5 sürümü ile düzgün çalışmamaktadır. O nedenle eşit çekirdek sayısının elzem olduğu durumlarda en az openmpi-1.8.8 sürümü kullanılmalıdır. Bu parametre impi ve diğer mpi sürümleri ile kontrol edilmemiştir.


#SBATCH -M Birden fazla hesaplama kümesin tek bir arayüz üzerinden hizmet verdiği durumlarda, işin gideceği kümeyi belirtir. TRUBA'da şu an için farklı hesaplama kümeleri farklı kullanıcı arayüzlerinden hizmet vermektedirler.
#SBATCH –workdir= işin başlayıp, output err dosyalarının yazılacağı dizinin adresidir. Scratch dizini işaret ediyor olması zorunludur. Eğer herhangi bir tanımlama yapılmaz ise, varsayılan olarak iş gönderilirken o an içinde bulunan dizin workdir dizini olarak kabul edilir.
#SBATCH –gres= Ekstra özelliklerin sunulduğu kuytuklarda bu ekstra özelliklerin ve onlardan ne kadarının kullanılacağını belirtir. Cuda kuyruğundaki GPU kartlarını kullanabilmek için bu tanımın yapılması gerekir. Örnegin SBATCH –gres=gpu:1
#SBATCH –mail-type= İş kuyruğa gönderildikten sonra, iş ile ilgili ne tür e-postaların gönderileceğini tanımlar. BEGIN, END, FAIL, REQUEUE, ALL değerlerini alabilir. Herhangi bir tanım yapılmaz ise kullanıcı e-posta ile bilgilendirilmez.
#SBATCH –mail-user= Yukarıda tanımlanan durumlarda e-postanın gönderileceği adresi tanımlar.
Gövde
Her program ve kullanıcı için gövde kısmı farklı olabilir. Bu kısımda işi çalıştırmadan önce yapılması gereken ön çalışma yapılır; load edilmesi gereken kütüphaneler, varsa çevre değişkenler vs. yüklenir. Kabuk dili öğeleri kullanılarak ön kontroller yapılarak gereki dosyaların varlığı, içeriği vs. kontrol edilebilir. Bu kısım kullanıcın deneyimine ve ihtiyaçlarına göre şekillenir. Ancak standart olarak iş ile ilgili temel bilgilerin STDOUT'a yazılması daha sonra işi analiz yada debug etmek için faydalı olabilir. Örneğin: aşağıdaki kısım da herhangi bir gaussian işini çalıştırmak için ihtiyaç duyulan kütüphaneler load edilerek çevre değişkenleri ayarlanıyor ve kullanılan kaynağın özellikleri STDOUT'a basılıyor.


echo "SLURM_NODELIST $SLURM_NODELIST" 
echo "NUMBER OF CORES $SLURM_NTASKS" 
export OMP_NUM_THREADS=1 
export g09root=$HOME 
export GAUSS_SCRDIR=/tmp 
. $g09root/g09/bsd/g09.profile
İşin çalıştırılması ve bitiş
Gövde kısmında işin programın çalıştırılması için gereki kütüphaneler, çevre değişkenleri load edildikten ve gerekli kontroller yapıldıktan sonra, sıra işin çalıştırılmasına gelir. İş çalıştırma satırı, normalde işi komut satırından elle çalıştırırken kullanılan komut satırı ile aynıdır. Herhangi bir gaussian işi işin bu satır aşağıdaki gibi olabilir örnegin:


$g09root/g09/g09 < gaussian_egitim.com
exit
MPI işler için SLURM'un sağladığı bazı esneklikler ve kullanım kuralları vardır. Hesaplama sırasında kullanılak cekirdek sayısı ve host bilgisi yazılmasına OpenMPI (ve diğer bazı MPI kütüphanelerinde) gerek yoktur. Bu bilgi mpirun komutuna doğrudan kaynak yöneticisi tarafından sağlanır. Örneğin komut satırından bir MPI işini 4 çekirdek çalıştırıken normalde


mpirun -np 4 –machinefile=hosts_dosyasi <uygulamanin_tam_adresi_ve_adi>
exit


gibi bir komut verilmesi gerekirken SLURM betiğinde aşağıdaki satır kullanılmalıdır.


mpirun <uygulamanin_tam_adresi_ve_adi>
exit


Eğer işin o ana kadar kullanmış olduğu sistem kaynakları (bellek, walltime, runtime, disk vs) hakkında detaylı bilgi alınmak isteniyorsa exit satırından önce
sstat -j $SLURM_JOB_ID
komutunu yazabilirsiniz.

Örnek betik dosyaları

Her kullanıcın deneyimi, ve kullanacağı uygulamanın yeri, özellikleri, versiyonu , ihtiyaç duyduğu kaynak türü ve miktarı, derlendiği ortam ve kütüphanelere göre, herhangi bir uygulamayı çalıştırmak için kullanılabilecek betik dosyası farklılıklar gösterebilir.
Teknik birim tarafından, tüm kullanıcıların kullanımı için standart özelliklerle derlenerek ortak dizine kurulmuş uygulamaların pek çoğu için örnek betik dosyaları hazırlanarak, kullanıcıların kullanımına sunulmuştur.
Örnek betik dosyalarına /truba/sw/scripts dizininden ulaşılabilir. Kullanıcıların burdaki betik dosyalarını kullanabilmeleri için, onları scratch'deki kendi dizinlerine kopyalamaları ve betik dosyasında verilmiş tanımları kendi hesaplanın ve işlerinin özelliklerine göre değiştirmeleri gereklidir.
Betik dosyalarını içinde bulundukları dizinle birlikte kopyalamakta fayda vardır. Zira ilgili dizin içinde, uygulamanın test amacı ile çalıştırılması için örnek input dosyaları da bulunmaktadır.

İşlerin Önceliklendirilmesi ve Başlatılması

Herhangi bir iş kuyruğa gönderildiğinde, kaynak yöneticisi belli parametrelere göre işin öncelik değerini (priority) hesaplar, ve işi kuyruğa alır.. Öncelik değeri ne kadar yüksek ise, iş, iş kuyruğunun o kadar önünde yer alır.. Bu işin daha önce başlatılması anlamına gelir ( kullandığımız backfill algoritması, daha düşük öncelikli işlerin de başlatılmasına olanak verir).
Kullanıcılar işlerinin öncelik değerini squeue --format=%Q yada sprio komutları ile ögrenebilirler.
TRUBA'daki kuyruk sisteminde SLURM tarafından sağlanan multifactor algoritması kullanılmaktadır. Bu algoritmaya göre, herhangi bir işin önceliği hesaplanırken iş gönderilirlen tanımlanmış parametrelere ve sistem yöneticisi tarafından belirlenmiş parametre ağırlıklarına bakılır.
PriorityWeightAge, PriorityWeightJobSize, PriorityWeightPartition,PriorityWeightQOS değerleri, sistem yöneticisi tarafından belirlenmiş, her parametrenin öncelik hesaplamasında ne kadar ağırlığı olduğunu belirleyen değerlerdir. TRUBA'da bu değerler:
PriorityWeightAge =1000 
PriorityWeightJobSize =10000 
PriorityWeightPartition =10000
PriorityWeightQOS =10000
dir. Herhangi bir kullanıcı arayüzünde, kullanıcılar sprio -w komutu ile güncel değerleri görebilirler..
İş önceliği formulü:
Job_priority =
                       (PriorityWeightAge) * (age_factor) +
                       (PriorityWeightFairshare) * (fair-share_factor) +
                       (PriorityWeightJobSize) * (job_size_factor) +
                       (PriorityWeightPartition) * (partition_factor) +
                       (PriorityWeightQOS) * (QOS_factor) +
                       SUM(TRES_weight_cpu * TRES_factor_cpu,TRES_weight_<type> * TRES_factor_<type>,...)
TRUBA'daki öncelik hesaplamasında TRES ve Fairshare parametreleri hesaba katılmamaktadır. Dolayısı ile formülümüz aşağıdaki gibidir:
Job_priority =
                       (PriorityWeightAge) * (age_factor) +
                       (PriorityWeightJobSize) * (job_size_factor) +
                       (PriorityWeightPartition) * (partition_factor) +
                       (PriorityWeightQOS) * (QOS_factor) +


Job_size_factor'u şu şekilde hesaplanır:
Job_node_number_factor=(node_number_in_job/total_node_number_in_cluster)
Job_cpu_number_factor = (cpu_number_in_job/total_cpu_number_in_cluster)
job_size_factor= (Job_node_number_factor+ job_cpu_number_factor)
Eğer büyük işler öncelikliyse:
JOBSIZE_priority= (PriorityWeightJobSize/2) * job_size_factor
Eğer küçük işler öncelikliyse:
JOBSIZE_priority= PriorityWeightJobSize - (PriorityWeightJobSize/2) * job_size_factor
Örneğin 100 nodedan oluşmuş 1000 çekirdekli bir kümede, -n20 -N4 ile gönderilecek bir işin JOBSIZE_priority değeri:
jOBSIZE_priority=(10000/2) * ( 4/100 + 20/1000)
                          = 300 
Eğer küçük işler öncelikli ise:
jOBSIZE_priority=10000 -300 =9700 
olacaktır.


age_factor değeri şu şekilde hesaplanır:
Herhangi bir işin kuyrukta en fazla bekleme süresi MaxAge olarak sistem yöneticisi tarafından tanımlanır.
age_factor=job_age/MaxAge
dolayısı ile AGE_Priority
 AGE_priority=PriorityWeightAge*job_age/MaxAge
Örneğin en faza bekleme süresi 15 gün ve PriorityWeightAge değeri 1000 olan TRUBA'da herhangi bir kuyrukta 10 gün bekleyen işin AGE_priority değeri aşağıdaki gibi olacaktır.
  AGE_priority=(10/15)*1000 = 667 
Eğer iş kuyrukta 15 gün yada daha fazla bekleyecek olursa, işin AGE_priority değeri en fazla 1000 olacaktır.
QOS_factor değeri şu şeklde hesaplanır:
İşin gönderildiği anda, tüm hesaplar arasında, QOS tanımlarında priority değeri en yüksek olan hesabın priority değeri tavan limit olarak kabul edilir.. İşi gönderen kullanıcının QOS tanımındaki priority degeri bu tavan limitle normalize edilir.
QOS_factor=QOS_priority_of_user/max_qos_priorty_in_cluster
QOS_priority=PriorityWeightQOS*QOS_factor
QOS öncelik değeri 1500 olan bir kullanıcı, tavan limiti 5000 ve PriorityWeightQOS değeri 10000 olan bir kümeye iş gönderecek olursa, ilgili işin aşağıdaki gibi olacaktır.
QOS_priority=1500/5000 * 10000 = 3333


partition_factor değeri, öncelik değeri en yüksek olan kuyruğun değeri tavan kabul edilerek, işin gönderildiği kuyruğun değerinin bu tavan değere bölünmesi ile hesaplanır.
partition_factor = priority_value_of_partition_of_job/max_priortity_value_of_partitions
Partition_priority=PriorityWeightPartition*partition_factor
Kuyrukların öncelik değerleri scontrol show partition komutu ile görülebilir.

Yazılımlar

Modül dosyaları ve çevre değişkenler

Herhangi bir uygulamayı çalıştırabilmek içim, sistemin o uygulamanın dosyalarının, o uygulamayı derlerken kullanılan kütüphanelerin nerede olduğunu bilmesi gerekir. Bu bildirim LD_LIBRARY_PATH, PATH ve diğer bazı çevre değişkenlerin ayarlanması ile yapılır. Bu değişkenlerin ayarlanması ile yapılmış olan değişikliği gerli almak için ya logout olup tekrar login olmak yada, bu değişkenlerin içerisinden, ilgili kısımın geri çıkarılması gerekmektedir. Bu işlem zor olmamakla birlikte, kullanılacak her uygulama için, her bağlantıda yapılması kullanıcılar üzerinde bir iş yükü oluşturmaktadır. Örnegin ortak uygulama alanında kurulu Espresso 5.0.2 uygulamasını çalıştırmak için LD_LIBRARY_PATH ve PATH değişkenlerine aşağıdaki gibi değerlerinin atanması gerekmektedir.
export LD_LIBRARY_PATH=/truba/sw/centos6.4/app/espresso/5.0.2-impi-mkl/lib:$LD_LIBRARY_PATH
export PATH=/truba/sw/centos6.4/app/espresso/5.0.2-impi-mkl/bin:$PATH


Çevre değişkenlerinin otomatik olarak ayarlanması, yada yapılan ayarlanmanın geri alınmasını otomatize etmek için module dosyaları kullanılmaktadır.
Merkezi dosya sisteminde bulunan uygulama, kütüphane ve derleyicilerin bazıları için module dosyaları oluşturulmuştur. Mevcut modul dosyalarının listesi “module avail” komutu ile
$>module avail
centos7.3/app/abinit/8.6.1-openmpi-1.8.8-gcc-4.8.5-AMDOPT
centos7.3/app/abinit/8.6.1-openmpi-1.8.8-gcc-4.8.5-E5V1
centos7.3/app/abinit/8.6.1-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4
centos7.3/app/espresso/6.1-impi-mkl-PS2016
centos7.3/app/espresso/6.1-openmpi-1.8.8-gcc-4.8.5-AMDOPT
centos7.3/app/espresso/6.1-openmpi-1.8.8-mkl-PS2013-E5V1
centos7.3/app/espresso/6.1-openmpi-1.8.8-mkl-PS2013-E5V3
centos7.3/app/espresso/6.1-openmpi-1.8.8-mkl-PS2013-E5V4
centos7.3/app/gromacs/5.1.4-impi-mkl-PS2016
centos7.3/app/gromacs/5.1.4-openmpi-1.8.8-gcc-4.8.5-AMDOPT
centos7.3/app/gromacs/5.1.4-openmpi-1.8.8-gcc-4.8.5-E5V1
centos7.3/app/gromacs/5.1.4-openmpi-1.8.8-gcc-4.8.5-E5V3
centos7.3/app/gromacs/5.1.4-openmpi-1.8.8-gcc-4.8.5-E5V3-cuda
centos7.3/app/gromacs/5.1.4-openmpi-1.8.8-gcc-4.8.5-E5V4
centos7.3/app/lammps/17Nov16-impi-mkl-PS2016
centos7.3/app/lammps/17Nov16-openmpi-1.8.8-gcc-4.8.5-AMDOPT
centos7.3/app/lammps/17Nov16-openmpi-1.8.8-mkl-PS2013-E5V1
centos7.3/app/lammps/17Nov16-openmpi-1.8.8-mkl-PS2013-E5V3
centos7.3/app/lammps/17Nov16-openmpi-1.8.8-mkl-PS2013-E5V4
centos7.3/app/namd/2017-11-10-multicore
centos7.3/app/namd/2017-11-10-multicore-cuda
centos7.3/app/namd/2.9-multicore-cuda
centos7.3/app/siesta/4.1-b3-mp-gcc-4.8.5-AMDOPT
centos7.3/app/siesta/4.1-b3-mp-gcc-4.8.5-E5V1
centos7.3/app/siesta/4.1-b3-mp-gcc-4.8.5-E5V3-E5V4
centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-AMDOPT
centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V1
centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4

görülebilir. Kullanılmak istenilen uygulama yada kütüphane “module load <module_adı>” komutu ile yüklenebilir, yüklü modullerin listesi “module list” komutu ile görülebilir. Silinmek istenilen modül “module unload <module_adı>” komutu ile silinebilir.
$>module load ccentos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4
$>module unload centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4


Modül hakkında detaylı bilgi almak için module show komutu kullanılabilir.
module show centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4
-------------------------------------------------------------------
/truba/sw/centos7.3/modulefiles/centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4:

module-whatis	  loads the Siesta-4.1-b3  Openmpi version  for Intel Xeon E5V3, E5V4 and E7V3    
prepend-path	 --delim=: PATH /truba/sw/centos7.3/app/siesta/4.1-b3/bin 
setenv		 SIESTA_DIR /truba/sw/centos7.3/app/siesta/4.1-b3/ 
setenv		 SIESTA siesta-openmpi-1.8.8-gcc-4.8.5-E5V4 
-------------------------------------------------------------------


Sistemdeki modül dosyaları ilgili programın/kütüphanenin derlendiği işletim sistemi ve işlemci modeline göre hiyerarşik olarak hazırlanmıştır. Aynı kütüphanelerle ve aynı işletim sistemi üzerinde derlenmiş uygulamalar farklı işlemciler üzerinde genelde çalışabilirlen (örnegin Opteron işlemciler için hazırlanmış uygulamalar büyük ihtimalle Xeon işlemciler üzerinde de çalışacaktır), eğer işletim sisteminin farklı olduğu durumda büyük ihtimal çalışmayacaktır.

Module isimlendirme sistematigi

Merkezi alandaki uygulama veya kütüphaneler genel olarak ortak bir sistematik kullanılarak isimlendirilmektedir. Örnek olarak aşağıdai modül dosyasını inceleyecek olursak:
centos7.3/app/siesta/4.1-b3-openmpi-1.8.8-gcc-4.8.5-E5V3-E5V4
centos7.3 --> uygulamanın derlendiği işletim sistemi
app --> modülün türü; uygulamalar için app, kütüphaneler için lib, derleyiciler için comp
siesta --> uygulamanın / kütüphanenin adı
4.1-b3 --> uygulamanın /kütüphanenin versiyonu
openmpi-1.8.8 -->derleme sırasında kullanılan mpi kütüphanesi ve versiyonu.. Openmp/thread için mp, eğer herhangi bir paralelleştirme kullanılmamışsa serial ifadeleri gelebilir.
gcc-4.8.5 --> derleme sırasında kullanılan derleyici.. Eğer intel derleyiciler kullanılmışsa PS2013, PS2016 vs gelebilir. Eğer herhangi bir matematik kütüphanesi derleme sırasında kullkanılmışsa, bu alandan önce acml, mkl gibi ifadeler gelebilir. ACML sadece AMD işemciler ve gcc derleyici kullanılan uygulamalarda/kütüphanelerde, mkl ise intel derleyicilerle derlenen uygulamalarda/kütüphanelerde kullanılmaktadır.
E5V3-E5V4 --> Derlemenin hangi işlemci modeli için yapıldığını gösteren etikettir.
Altyapıdaki donanım farklı tarihlerde farklı ihalelerle alınmış olduğu için, altyapıda farklı işlemci üreticilerinden farklı işlemci mimarileri ve farklı işletim sistemleri yüklü olabilmektedir. Güncel donanım işlemci bilgisi (2018-02-22) aşağıdaki gibidir. Sunucu aileleri ile ilgili ayrıntılı bilgiye TRUBA Kaynakları sayfasından ulaşabilirsiniz.
Mercan sunuculari --> AMD Opteron 6176 (mercan kuyruğu)
Levrek sunuculari --> Intel Xeon E5 2690 V1 (single, short, mid1,mid2,long kuyrukları)
Levrekv2 sunuculari --> Intel Xeon E5 2680 V3 (cuda ve levrekv2 kuyrugu)
Sardalya sunuculari --> Intel Xeon E5 2690 V4 (sardalya kuyruğu)
Orkinos sunucusu --> Intel Xeon E7 4850 V3 (smp kuyruğu)
Barbun sunuculari --> Intel Xeon Scalable 6148 (barbun, barbun-cuda kuyrukları)
Farklı işlemci modellerinde, işlemcinin ve sunucunun performansını toptan etkileyen, farklı komut setleri bulunmaktadır. Herhangi bir uygulama derlenirken uygulamanın hangi işlemci ve hangi sunucu için derleneceğini bilmek ve buna uygun optimizasyon seçeneklerini kullanmak önem taşır.
Merkezi alandaki uygulamalar/kütüphaneler derlenirken, işlemcilerden en yüksek performansı alabilmek için, ilgili işlemci modeli için tüm optimizasyon seçenekleri kullanılmaktadır. Uygulamanın hangi sunucu için derlendiği, modül dosyasının sonuna eklenmiş olan E5V1, E5V3, E5V4, AMDOPT kısaltmaları ile belirtilmiştir. Uygulama hangi kuyruk üzerinde çalıştırılacaksa, o sunucu/işlemci ailesi için derlenmiş modülü kullanılmalıdır.
İşlemci modeli ile ilgili herhangi bir ibare bulundurmayan modüller genel olarak herhangi bir sunucu üzerinde çalıştırılabilirler.. Ayrıca genel olarak, versiyon numarası yüksek olan işlemciler, versiyon numarası düşük olan işlemcilerdeki komut setlerini barındırırlar. Bu nedenle versiyon numarası düşük olan bir uygulama/kütüphane modülü, versiyon numarası yüksek olan bir işlemci modelinde sorunsuz olarak çalıştırılabilirler. Ancak bunun tersi her zaman mümkün olmayabilir.

Mevcut uygulamalar ve kütüphaneler

Kullanıcıların kullanımına sunulmuş, ve farklı işletim sistemleri ve farklı işlemci mimarileri için derlenmiş, lisansı ücretsiz uygulamalar merkezi yazılım alanına (truba/sw) yükkenmiş bulunmaktadır. Hiyerarşik olarak uygulamalar app, kütüphaneler lib derleyiciler comp dizinine yerleştirilmiştir.
Quantum Espresso, Namd, Amber gibi sık kullanılan uygulamların, Lapack, Blas, FFTW, petsc, mkl gibi kütüphanelerin ve Intel derleyicilerinin farklı versiyonları yazılım dizinlerine yüklenmiştir. Yazılımların yeni versiyonları çıktıkça ve talep oldukça yeni yazılımlar ve yeni versiyonlar yüklenilmeye devam edilecektir.
Ortak alanda bulunan yazılımlar tüm kullanıcılar düşümülerek hazırlandığı için genel opsiyonları ile derlenmiş olup, işlemci mimarisi için geçerli olan optimizasyonlar hariç hiçbirinde herhangi bir optimizasyon yapılmamıştır. Bu nedenle kullanıcıların bekledikleri performansları veremeyebilirler, Ya da yapmak istedikleri hesaplama türünü gerçekleştiremiyor olabilirler. Bu ve benzeri durumlar için, kullanıcıların kullanmak istedikleri uygulamaları kendi ev dizinlerinde kendilerinin derlemelerini, ihtiyaç duydukları optimizasyonu gerçekleştirmelerini öneriyoruz.
Lisansı ücretli olan yazılımlar, küme üzerinde çalışmasına izin verecek lisans edinildikten sonra kullanıcı tarafından kendi ev dizininde derlenmeli ve oraya yüklenmelidir. Bu tür yazılımların lisansları, kullanımları, kurulumları vb konularda her türlü sorumluluk kullanıcının kendisine aittir. Eğer yüklenecek lisanslı yazılım floating yada benzeri bir lisanslama modeli ile lisans doğrulama servisine (flexlm vs) ihtiyaç duyuyorsa, ilgili servis kullanıcının kendi kurumu tarafından sağlanmalı ve buradaki hesaplama sunucularının bu servise erişmesine izin verilmelidir.
Küme üzerinde sıklıkla kullanılan uygulamalar:
  • Quantum Espresso
  • NAMD
  • Amber
  • Siesta
  • Abinit
  • Meeb
  • Lammps
  • Gamess
  • Gromacs
  • Gaussian09
  • Vasp
Mevcut kütüphaneler:
  • Blas/Lapack
  • Scalapack
  • MKL
  • ACML
  • FFTW
  • CUDA
  • Openmpi
  • impi
Mevcut derleyiciler:
  • GNU derleyicileri
  • Intel composer XE 2013 sp1
Derleyiciler
  • Sistemde yüklü olan GCC derleyicileri
Kurulu bununan işletim sistemi ile birlikte gelen GCC 4.8.5 derleyici ve kütüphaneleri tüm kullanıcı arayüzlerinde ve hesaplama sunucularında kullanılabilir durumdadır. GCC'nin bu versiyonunu kullanmak için herhangi bir modülü yüklemeye gerek bulunmamaktadır. Ayrıca modüller içerisinde daha yeni versiyon GCC-6.4 ve gcc 7 derleyicileri de bulunmaktadır. Modül dosyalarını ile tanımlanmış uygulama ve kütüphanelerin kullanımı için kullanıcı el kitabındaki ilgili kısıma göz atınız.
  • Sistemde yüklü olan Intel derleyicileri
Intel derleyici ve matematik kütüphanelerinin pek çok farklı versiyonu altyapıda kurulu bulunmaktadır. Ancak lisans kısıtlamaları nedeni ile sadece Intel Parallel Studio XE SP1 ile birlikte gelen derleyiciler ve kütüphaneler kullanılabilir durumdadır.
icc 14.0.1, ifort 14.0.1, icpc 14.0.1
Intel derleyiciler, Intel Paralel Sdudio 2013-SP1 Update paketi ile gelmektedir. Bu paket içerisinde ayrıca Intel işlemciye sahip sunucular için optimize edilmiş Matematik kütüphanesi, Debug ve Trace araçları da bulunmaktadır.
  • Intel derleyicileri ve beraberinde gelen diğer kütüphane ve araçları kullanabilmek için, gerekli çevre değişkenleri yüklemek için komut satırında ya da betik dosyasına aşağıdaki komutu yazmak yeterlidir.
 $>source /truba/sw/centos7.3/comp/intel/PS2013-SP1/bin/compilervars.sh intel64
 
Ayrıca module sistematiğini kullanarak, ilgili derleyiciler ve kütüphaneler dinamik olarak load yad unload edilebilir.
CUDA
CUDA kütüphanesinin farklı versiyonları /truba/sw/centos7.3/lib/cuda dizini altında yüklüdür.. Kütüphaneler ve araçlar doğrudan bu dizin altından kullanılabileceği gibi, ilgili kütüphanelerin modülleri load edilerek de kullanılabilir.. Mevcut versiyonlar:
  • centos7.3/lib/cuda/7.5
  • centos7.3/lib/cuda/9.0
İlgili kütüphaneler, $TRUBA_SW/lib/cuda/7.5 ve $TRUBA_SW/lib/cuda/9.0 dizinlerinde bulunmaktadır. Bu dizinlerde ayrıca örnek CUDA kodları ve uygulama örnekleri bulunmaktadır. Kurulum alanında yer alan örnekler kaynak yöneticisi aracılığı ile CUDA desteki kuyruklarda ya da kullanıcı arayüz sunucusunda (levrek1) komut satırından çalıştırılabilir.
Intel Kütüphaneleri ve derleyicileri
Yaptığımız denemelerde, küme üzerinde Intel derleyici ve kütüphanelerinin kullanılmasının, uygulamanın performansını arttırdığı gözlemlenmiştir. Levrek sunucuları üzerinde çalışacak kullanıcılar için, uygulama derleme sırasında işlemci ailesi ile uyumlu olan Intel derleyicilerini ve kütüphanelerini kullanmaları önerilmektedir.
Mevcut Intel derleyici ve kütüphaneleri Parallel Studio 2013 SP1 Update paketi ile kurulmuştur. Paket içeriği:
* Intel C/C++ derleyicileri (14.0.1, composer_xe_2013_sp1)
* Intel Fortran derleyicileri (14.0.1, composer_xe_2013_sp1)
* Intel MKL (11.0)
* Intel Advisor
* Intel Inspector
* Intel Vtune Amplidier
Bu paketlerin kullanımı ve özellikleri hakkında detaylı bilgiye üreticisinin web sayfasından ulaşılabilir. Ayrıca Intel Developer Forum'da uygulama öreneklerine ve diğer kullanıcıların tecrübelerine ulaşılabilir.
Nümerik Kütüphanaler
İşlemci üreticileri tarafından sağlanan ve ilgili işlemci markası için optimize edilmiş AMD ACML ve Intel MKL'nin farklı versiyonları ile birlikteblas, lapack, blacs, scalapack, fftw vs. gibi pek çok temel matematik kütüphanesinin farklı versiyonları, farklı işlemci aileleri için optimize edilmiş olarak merkezi alanda yüklü bulunmaktadır. Kullanılacak kütüphanenin, mevcut işletim sistemi için derlenmiş olması önemlidir. Bu nedenle kullanılacak modülün mevcut işletim sistemi adı (centos7.3) ile başlaması yada eğer modül kullanılmayacaksa, kütüphanelerin /truba/sw/centos7.3/lib dizini altında kurulu olan kütüphanelerden seçişmesi gerekmektedir.
ACML modülleri:
  • centos7.3/lib/acml/5.3.1-gfortan64
  • centos7.3/lib/acml/5.3.1-gfortan64_mp
  • centos7.3/lib/acml/6.1.0-gfortan64
  • centos7.3/lib/acml/6.1.0-gfortan64_mp
Kütüphanenin farklı versiyonları /truba/sw/centos7.3/lib/acml/ altında kurulu bulunmaktadır.
Intel MKL
Intel Parallel Studio SP1 ile gelen MKL kullaanılabilir durumdadır.. Kütüphaneyi kullanabilmek için Intel'in tüm kütüphaneleri source edilebilir, yada modüller arasından intel derleyiciler load edilebilir.
$>source /truba/sw/centos7.3/comp/intel/bin/compilervars.sh intel64


FFTW3
FFTW3'ün 3.3.7 versiyonu altyapıdaki farklı işlemci aileleri için yüklü bulunmaktadır. Aşağıdaki modüller:
  • centos7.3/lib/fftw/3.3.7-gcc-4.8.5-AMDOPT
  • centos7.3/lib/fftw/3.3.7-gcc-4.8.5-E5V1
  • centos7.3/lib/fftw/3.3.7-gcc-4.8.5-E5V3-E5V4
  • centos7.3/lib/fftw/3.3.7-intel-PS2013-E5V1
  • centos7.3/lib/fftw/3.3.7-intel-PS2013-E5V3-E5V4
load edilerek kullanılabilir, yada kurulu olduğu dizinden (/truba/sw/centos7.3/lib/fftw/) direk kullanılabilir.


fftw3 modülü yüklendiği zaman, aşağıdaki fftw kütüphanelerine erişim sağlanabilmektedir:
  • standart (statik ve dinamik,intel derleyicilerle)
  • float (statik ve dinamik,intel derleyicilerle)
  • long double(statik ve dinamik,intel derleyicilerle)
  • mpi standart (statik ve dinamik, impi ve intel derleyicilerle)
  • mpi float (statik ve dinamik, impi ve intel derleyicilerle)
  • mpi long double (statik ve dinamik, impi ve intel derleyicilerle)
BLAS/LAPCAK
Temel matematik ve matris kütüphaneleridir. Bu kütüphanelerin sağladığı pek çok rutin ACML ve MKL taradından optimize bir şeklde sağlanmaktadır aynı zamanda.. Kütüphanelerin modül dosyaları henüz hazırlanmamış olmakla birlikte, ilgili kütüphaneleri kullanmak isteyen kullanıcılar /truba/sw/centos7.3/lib/lapack dizini altından blas ve lapack kurulumlarını kullanabilirler..


BLACS/SCALAPACK
LAPACK kütüphanesinin dağıtık kullanılabilmesini sağlayan ve ekstra özellikler getiren matematik ve haberleşme kütüphaneleridir.. Modül dosyaları hazırlanmamış olduğu için, kütüphaneler doğrudan /truba/sw/centos7.3/lib/scalapack dizini altından kullanılabilirler..
Kişisel araçlar