TRUBA’da MATLAB Kullanımı#
Giriş#
Bu doküman, MATLAB’ın TRUBA Yüksek Başarımlı Hesaplama (YBH) altyapısında nasıl yapılandırılacağını ve kullanılacağını açıklamaktadır. Doküman; etkileşimli çalıştırma, Slurm aracılığıyla betik iş gönderimi ve yerel MATLAB entegrasyonu konularını kapsar. TRUBA, akademik kullanıcıların yüksek kapasiteli CPU ve GPU’lar kullanarak yoğun hesaplama gerektiren simülasyonları hızlandırmasına, standart bir dizüstü bilgisayarın kaldıramayacağı büyüklükteki veri setlerini işlemesine ve çok sayıda MATLAB worker’ını aynı anda çalıştırarak hesaplama süresini önemli ölçüde azaltmasına olanak tanır. Bu rehber, TRUBA’nın akademik kullanıcıları için hazırlanmıştır.
Test Edilen Ortam#
Not
Not: Bu dokümantasyon aşağıdaki ortam özelinde oluşturulmuştur. MATLAB sürümlerindeki veya Slurm ayarlarındaki değişiklikler küçük düzeltmeler gerektirebilir.
Bileşen |
Versiyon / Değer |
|---|---|
Küme (Cluster) |
TRUBA (arf ve cuda) |
Test Edilen Part. |
debug, orfoz, barbun-cuda |
MATLAB |
R2025b |
Lisans Modeli |
Network Academic (MathWorks, bitiş 31 Ara 2027) |
Slurm |
23.02.5-1 |
İşletim Sistemi |
Rocky Linux 9 |
Test Tarihi |
2026-03-02 |
Ön Koşullar ve Lisanslama#
Devam etmeden önce bu üç gereksinimin hazır olduğundan emin olun:
Aktif TRUBA Hesabı: Geçerli bir kullanıcı adı ve şifre.
VPN Bağlantısı: Kümeye erişmek için VPN aktif olmalıdır.
Akademik Amaç: TRUBA üzerindeki MATLAB kullanımı sadece akademik araştırmalar içindir. Ticari/kurumsal kullanıma izin verilmez.
Lisanslama ve Politika#
TRUBA, MATLAB’ı aşağıdaki şartlara sahip bir Network Academic lisansı ile sunmaktadır:
Lisans Türü |
Sponsored – Concurrent – Annual |
Geçerlilik Tarihi |
31 Aralık 2027 |
MATLAB + Tüm Toolboxlar |
200 eşzamanlı oturum (MATLAB Compiler dahil) |
MATLAB Parallel Server |
4000 worker |
Önemli
Önemli: TRUBA hesaplama kaynaklarında yalnızca akademik MATLAB kullanımına izin verilir.
Uygulamada Bu Ne Anlama Geliyor?#
Lisansın nasıl yönetileceği, çalışma yönteminize bağlıdır:
Open OnDemand veya Batch Modu Kullanımı: MATLAB’ı doğrudan TRUBA kümesi üzerinde (web tarayıcısı veya batch script aracılığıyla) çalıştırırsanız, lisans, küme tarafında otomatik olarak sağlanır ve yönetilir. Kendi lisansınızı sağlamanıza gerek yoktur.
Kişisel Bilgisayarınızda MATLAB Kullanımı: Kodunuzu yerel MATLAB’ınızda yazıp küme eklentisini (plugin) kullanarak TRUBA’ya iş gönderirseniz, yerel kurulumunuz mutlaka bir akademik lisansa sahip olmalıdır. Bilgisayarınızda ticari veya deneme sürümü lisansı kullanıyorsanız, uzaktan yürütme işlemi engellenecektir.
İpucu
MATLAB lisans türünüzü kontrol etmek için:
MATLAB’ı açın ve şunu yazın:
verLisans türü görünmüyorsa, https://www.mathworks.com/licensecenter adresinden MathWorks hesabınıza giriş yapın ve My Licenses altını kontrol edin.
Hala emin değilseniz, üniversitenizin yazılım koordinatörü veya IT birimi ile iletişime geçin.
Uygulama Yönteminin Seçilmesi#
TRUBA üzerinde MATLAB çalıştırmak için desteklenen üç yöntem vardır. Aşağıdaki tabloyu kullanarak durumunuza en uygun olanı seçebilirsiniz.
Amacınız… |
Kullanılacak Yöntem |
Zorluk Seviyesi |
|---|---|---|
Küme üzerinde tam bir MATLAB Desktop oturumu başlatmak (Open OnDemand üzerinden GUI) |
Metot A: Open OnDemand |
Başlangıç |
Kodları yerelde geliştirip işleri kümeye göndermek |
Metot B: Yerel MATLAB + Plugin |
Orta |
İşleri tamamen Slurm üzerinden (GUI olmadan) yürütmek |
Metot C: Slurm Batch Script |
Orta |
Küme nodları üzerinde etkileşimli paralel worker’lar kullanmak |
İleri Düzey: Etkileşimli parpool |
İleri |
Not
Hangi yöntemi seçmelisiniz? Metot A (Open OnDemand), herhangi bir yerel kurulum gerektirmediği için başlamanın en kolay yoludur. Ancak uzak bir GUI oturumu olarak çalıştığından performans daha yavaş olabilir. Düzenli veya yoğun kullanım için TRUBA’ya bağlı yerel bir MATLAB kurulumu (Metot B) önerilir.
Metot A — Open OnDemand (Etkileşimli GUI)#
Bu yöntem, web tarayıcınız üzerinden doğrudan grafiksel bir MATLAB arayüzü kullanmanıza olanak tanır. Etkileşimli çalışmak istiyorsanız en iyi seçenektir ve yerel bir MATLAB kurulumu gerektirmez.
Önemli
Kural: MATLAB’ı mutlaka Open OnDemand üzerinden başlatmalısınız. MATLAB’ın doğrudan login nodlarında çalıştırılması kesinlikle yasaktır ve tespit edilen oturumlar sonlandırılacaktır.
ARF Kümesine Bağlanma#
TRUBA OpenVPN bağlantınızı kurun.
Tarayıcınızı açın ve şu adrese gidin: https://172.16.6.20
TRUBA kullanıcı adınız ve şifrenizle giriş yapın.
Dashboard üzerinden Interactive Apps menüsüne tıklayın ve Desktop seçeneğini seçin.
Detaylı bağlantı talimatları için: https://docs.truba.gov.tr
Desktop Oturumunda MATLAB’ı Başlatma#
Tarayıcıda sanal masaüstünüz göründüğünde:
Terminal Açın: Masaüstünde herhangi bir yere sağ tıklayın ve Open Terminal Here seçeneğini seçin.
MATLAB Modülünü Yükleyin: Ortamı hazırlamak için aşağıdaki komutları yazın:
module purge
module available | grep -i matlab # yüklü sürümleri gösterir
module load apps/matlab/r2025b
MATLAB’ı Çalıştırın:
matlab
MATLAB’ı Küme ile Tanıştırma#
TRUBA üzerinde MATLAB’ı ilk kez çalıştırdığınızda, hesaplama ortamını algılaması gerekir; bu yapılandırmanın bir kez yapılması yeterlidir.
MATLAB Home sekmesinde, Parallel → Discover Clusters… yolunu izleyin.
MATLAB, size atanan hesaplama nodunu (örneğin
orfoz34) algılayacaktır.İşlemi tamamlamak için yönlendirmeleri takip edin.
Not
Bu adım ne işe yarar? Bu işlem sadece MATLAB’a bir TRUBA hesaplama nodu üzerinde çalıştığını bildirir. Uzun vadeli iş gönderimi (job submission) yapılandırmasını sağlamaz. Bu konu için İşlerin Yapılandırılması ve Gönderilmesi bölümüne bakınız.
Alternatif: MATLAB’ı GUI Olmadan Başlatma#
“MATLAB’ı Küme ile Tanıştırma” adımı tamamlandıktan sonra, her oturumda tam grafiksel masaüstünün başlatılmasına gerek duyulmaz. Bunun yerıne kullanılabilecek iki alternatif mevcuttur:
Etkileşimli komut satırı modu (komut yazmaya devam edebilirsiniz):
matlab -nodesktop
Etkileşimli olmayan batch modu (bir betiği çalıştırır ve otomatik çıkar):
matlab -batch "betiginiz_veya_komutunuz"
İpucu
Hangisi ne zaman kullanılır? GUI yükü olmadan komutları etkileşimli yazmak
istiyorsanız -nodesktop kullanın. Bir betiği herhangi bir etkileşim
olmadan tam otomatik çalıştırmak istiyorsanız -batch kullanın.
Open OnDemand kullanırken Cluster Profile Manager’ı açtığınızda bir Validate düğmesi görebilirsiniz. Bunu TRUBA üzerinde kullanmayın — bkz. “Validate” (Doğrula) Düğmesi.
CUDA Kümesine Bağlanma#
TRUBA altyapısı temel olarak iki ana bölümden oluşur: Genel amaçlı hesaplamalar için ARF (standart CPU ağırlıklı) ve yüksek başarımlı grafik işlemci ihtiyaçları için CUDA (güncel GPU odaklı) kümeleri
ARF Erişimi: https://172.16.6.20
CUDA Erişimi: https://172.16.6.16 (Özel yetkilendirme gerektirir)
CUDA erişim gereksinimleri için: https://docs.truba.gov.tr/1-kaynaklar/arf_acc/arf_acc_baglanti.html#arf-acc-baglanti
Dosyalarınız, ayarlarınız ve MATLAB tercihleriniz her iki küme arasında paylaşılır; bu nedenle geçiş yaparken ek bir MATLAB yapılandırması gerekmez.
Home dizini:
/arf/home/$USERMATLAB tercihleri:
~/.matlab/R2025b/(profil ayarları burada tutulur)
Sonraki Adımlar#
MATLAB ortamınız artık yapılandırılmıştır. İş parametrelerini ayarlamak ve kümeye ilk işinizi göndermek için İşlerin Yapılandırılması ve Gönderilmesi bölümüne bakınız.
Metot B — Kendi MATLAB’ınızdan İş Gönderme#
Bu yöntem, kodunuzu kendi bilgisayarınızdaki MATLAB’da geliştirmenize ve MATLAB ortamından ayrılmadan işleri doğrudan TRUBA’ya göndermenize olanak tanır. Tek seferlik bir yapılandırma gerektirir.
Önemli
Lisans hatırlatması: Metot B, geçerli bir akademik lisans kapsamındaki yerel bir MATLAB kurulumu gerektirir. Ticari veya deneme lisansları TRUBA’ya iş gönderemez. Akademik lisansınız yoksa Metot A — Open OnDemand (Etkileşimli GUI) yöntemini kullanın.
Tek Seferlik Yapılandırma#
Bu kurulum her küme (ARF veya CUDA) için bir kez yapılmalı ve yerel MATLAB sürümünüzü güncellediğinizde tekrarlanmalıdır.
Adım 1: User Path Doğrulaması#
MATLAB’ın TRUBA bağlantı betiklerini saklamak için belirli bir klasöre ihtiyacı vardır.
Bilgisayarınızda MATLAB’ı açın.
Komut penceresine
userpathyazın.Bir klasör yolu dönüyorsa, eklenti (plugin) buraya kurulacaktır.
Boş dönüyorsa, sıfırlayın:
userpath('reset')
userpath
Eğer klasör henüz mevcut değilse, manuel olarak oluşturun:
mkdir(fullfile(getenv('HOME'),'Documents','MATLAB'))
userpath(fullfile(getenv('HOME'),'Documents','MATLAB'))
savepath
Adım 2: TRUBA Cluster Plugin Kurulumu#
TRUBA MATLAB Plugin (ZIP) dosyasını indirin:
TRUBA MATLAB Plugin (ZIP)(12 May 2026 tarihinde güncellendi)İçeriği doğrudan
userpathtarafından döndürülen klasöre çıkartın.MATLAB Komut Penceresinde şunu çalıştırın:
configCluster
Yönlendirmeleri takip edin: kümeyi (ARF veya CUDA) seçin ve TRUBA kullanıcı adınızı girin.
Not
Henüz şifre gerekmemektedir. Şifreniz sadece kümeye gerçekten bir iş gönderdiğinizde sorulacaktır.
Başarılı bir yapılandırmadan sonra, yerel MATLAB’ınızdan gönderilen işler TRUBA kümesi üzerinde çalışacaktır. Profilin oluşturulduğunu Home → Parallel → Create and Manage Clusters yolunu izleyerek doğrulayabilirsiniz.
“Validate” (Doğrula) Düğmesi#
Cluster Profile Manager kısmını açtığınızda bir Validate düğmesi görebilirsiniz.
Önemli
Buradaki “Validate” düğmesini kullanmayın. TRUBA üzerinde iş yürütme işlemleri MATLAB’ın dahili doğrulayıcısı tarafından değil, Slurm iş zamanlayıcısı tarafından yönetilir. Bu doğrulama testi muhtemelen başarısız olacaktır; ancak bu, MATLAB kurulumunuzun hatalı olduğu anlamına gelmez. Komutları çalıştırabildiğiniz sürece kurulumunuz doğrudur.
Adım 3: ARF ve CUDA Küme Profilleri#
ARF ve CUDA ayrı Slurm sistemleridir ve her biri kendi küme profiline ihtiyaç
duyar. Her iki sisteme de erişiminiz varsa, configCluster adımını
tekrarlayın ve istendiğinde CUDA kümesini seçin.
Bilgisayarınız ve Küme Arasında Geçiş Yapma#
MATLAB’a işinizi nerede çalıştıracağınızı tek bir komutla söyleyebilirsiniz.
TRUBA üzerinde çalışmak için (varsayılan):
c = parcluster; % TRUBA profilinizi yükler
Kendi bilgisayarınızda çalışmak için:
c = parcluster('Processes'); % yerel işlemcileri kullanır
İpucu
Processes profilini kişisel çalışma alanınız, TRUBA profilini ise ağır
işlerin yapıldığı bir fabrika gibi düşünün. Fabrikaya işleri sadece
çalışma alanınız için çok büyük olduğunda gönderin!
Listenizde bir Processes profili görmüyorsanız, manuel olarak ekleyin:
Home → Parallel → Create and Manage Clusters yolunu izleyin.
Add Cluster Profile → Processes seçeneğine tıklayın.
Sonraki Adımlar#
Yerel MATLAB’ınız artık TRUBA’ya iş gönderecek şekilde yapılandırılmıştır. İş parametrelerini ayarlamak için İşlerin Yapılandırılması ve Gönderilmesi bölümüne bakınız.
Metot C — Slurm Batch Script#
Bu yöntem, MATLAB’ı tamamen bir Slurm betik aracılığıyla çalıştırır. Standart bir Slurm iş betiği yazarsınız ve MATLAB, Slurm tarafından zaten tahsis edilmiş olan CPU’ları kullanarak bir paralel havuz (parallel pool) oluşturur. Herhangi bir küme profili veya eklenti (plugin) gerektirmez.
Not
Bu yöntem ne zaman kullanılır? Bu yöntem en doğrudan HPC yaklaşımıdır ve yerel bir MATLAB kurulumu veya eklenti yapılandırması gerektirmez. Özellikle Slurm iş betiklerine aşina olan kullanıcılar için uygundur.
Slurm iş betikleri hakkında hızlı bir hatırlatmaya ihtiyaç duyuyorsanız: https://docs.truba.gov.tr/2-temel_bilgiler/slurm-betik-ozellik.html
Gereksinimler#
TRUBA üzerinde
/arf/scratch/$USERaltında bir MATLAB betiği.MATLAB’ı yükleyen ve kodunuzu çalıştıran bir Slurm iş betiği (
.sh).Slurm küme kuyruğu ve azami çalışma süresi (wall time) hakkında temel bilgi. Detaylar için İşlerin Yapılandırılması ve Gönderilmesi
Adım 1: MATLAB Betiğinizi Yazın#
MATLAB betiğinizi /arf/scratch/$USER altına kaydedin. Betiğiniz:
Slurm betiği tarafından atanan
NUM_WORKERSortam değişkenini okumalıdır.Zaten tahsis edilmiş CPU’ları kullanarak bir paralel havuz oluşturmalıdır.
Hesaplamayı yürütmeli ve sonunda havuzu temizlemelidir.
% ornek_betik.m
% Slurm tarafından aktarılan worker (işçi) sayısını oku
n = str2double(getenv("NUM_WORKERS"));
% Slurm tarafından halihazırda tahsis edilmiş çekirdekleri kullanarak
% bir havuz oluştur. Bu işlem yeni bir Slurm talebi GÖNDERMEZ; sadece
% bu işe verilmiş kaynakları kullanır. (Bu, MATLAB'ın doğrudan Slurm
% ile konuştuğu Metot B'den farklıdır.)
parpool('Processes', n); % Hesaplama nodu üzerindeki yerel süreçler
% --- Hesaplama kısmı buraya gelir ---
% Basit bir örnek hesaplama (sleep) — silinebilir.
% Her worker 1 saniye bekler; toplam süre yaklaşık 1 saniye olmalıdır.
tic;
parfor i = 1:n
pause(1);
end
elapsed = toc;
fprintf('parfor demosu %.2f saniyede tamamlandı.\n', elapsed);
% Temizlik
delete(gcp('nocreate'));
Not
Not: NUM_WORKERS değişkeni aşağıdaki Slurm betiği tarafından
otomatik olarak ayarlanır. Slurm betiğindeki çekirdek sayısını
değiştirirseniz, worker sayısı otomatik olarak güncellenir — MATLAB
kodunuzu düzenlemenize gerek kalmaz. Slurm çıktısında MATLAB’ın
havuzu Processes profilini kullanarak başlattığını görebilirsiniz;
bu beklenen bir durumdur ve havuzun tahsis edilen hesaplama nodu
üzerinde yerel olarak çalıştığını gösterir.
Adım 2: Slurm Betiğinizi Yazın#
Aşağıdaki içeriği is_gonder.sh olarak kaydedin:
#!/bin/bash
#SBATCH -J matlab-is # iş adı
#SBATCH -A $USER # hesap adı
#SBATCH -p orfoz # partition
#SBATCH -N 1 # node sayısı
#SBATCH --ntasks=56 # orfoz için 56xn çekirdek
#SBATCH --cpus-per-task=1
#SBATCH -t 0-00:30 # azami süresi
#SBATCH -o matlab-is_%j.out # çıktı dosyası
#SBATCH -e matlab-job_%j.err # hata dosyası
module load apps/matlab/r2025b
# Bir çekirdek istemci, kalanı worker olur
export NUM_WORKERS=$((SLURM_NTASKS - 1)) # = 55 worker
matlab -batch "ornek_betik"
İpucu
Çekirdek sayıları: orfoz kuyruğu, çekirdeklerin node başına
56’nın katları şeklinde talep edilmesini gerektirir.
--ntasks=56 ile bir çekirdek MATLAB istemcisi olurken 55 tanesi
paralel worker olur. Diğer kuyruklara (partition) özgü kurallar
İşlerin Yapılandırılması ve Gönderilmesi bölümünde detaylandırılmıştır.
Adım 3: İşin Gönderilmesi ve İzlenmesi#
İşi login nodundan gönderin:
sbatch is_gonder.sh
İş durumunu kontrol edin:
squeue -u $USER
İş tamamlandıktan sonra çıktı dosyasını inceleyin:
cat matlab-is_<jobid>.out
Sonraki Adımlar#
Her üç yöntem için de geçerli olan kuyruk (partition) kuralları, bellek yönetimi ve kaynak seçimi hakkında daha ayrıntılı bilgi edinmek için İşlerin Yapılandırılması ve Gönderilmesi bölümüne bakınız.
İşlerin Yapılandırılması ve Gönderilmesi#
Bu bölüm Metot A (Open OnDemand) ve Metot B (Yerel MATLAB) için geçerlidir. Metot C (Slurm Batch Script) kaynak taleplerini doğrudan Slurm betiği içinde yönetir — bkz. Metot C — Slurm Batch Script.
İşleri göndermeden önce, Slurm kavramları hakkında temel düzeyde bilgi sahibi olmanız önerilir:
Slurm iş betiği temelleri: https://docs.truba.gov.tr/2-temel_bilgiler/slurm-betik-ozellik.html
TRUBA kuyruklarına (partition) genel bakış: https://docs.truba.gov.tr/2-temel_bilgiler/hesaplama_kumeleri.html
Ayarlanması Gereken Üç Temel Parametre#
Her iş gönderimi için en az şu üç parametrenin ayarlanması gerekir:
c = parcluster;
c.AdditionalProperties.Partition = 'debug'; % kullanılacak kuyruk
c.AdditionalProperties.NumNodes = 1; % node sayısı
c.AdditionalProperties.WallTime = '0-00:10'; % maks. çalışma süresi (G-SA:DA)
Partition (Küme Kuyruğu): İşinizin hangi sunucularda (node) çalışacağını belirler. Başlangıç testleri için her zaman
debugkuyruğunu kullanın. Üretim işleri için iş yükünüze (CPU, bellek veya GPU) uygun olan kuyruğu seçin. Detaylar için aşağıdaki referans tablolarına bakın.NumNodes (Node Sayısı): Bu değeri her zaman açıkça belirtin. Eğer boş bırakılırsa, Slurm görevleri sunucular arasında çekirdek politikalarını ihlal edecek şekilde verimsiz dağıtabilir.
WallTime (Azami Çalışma Süresi): Zorunludur. Testler için süreyi kısa tutun (örneğin 10 dakika). Üst limitler kuyruğa bağlıdır; bunları TRUBA login nodunda
scontrol show partitionkomutuyla kontrol edebilirsiniz.
Kullanılabilir Kuyrukları Listeleme#
MATLAB içerisinden kullanılabilir kuyrukların listesini almak için şu komutu kullanabilirsiniz:
c = parcluster;
clusterPartitionNames(c)
Örnek çıktı:
{'akya-cuda' }
{'barbun' }
{'barbun-cuda'}
{'debug' }
{'hamsi' }
{'orfoz' }
{'smp' }
Not
Not: Çevrimiçi dokümantasyon her zaman en güncel kuyruk yapılandırmasını
yansıtmayabilir. MATLAB içinden hızlı bir liste için
clusterPartitionNames komutunu; bellek limitleri ve azami çalışma
süresi dahil tüm detaylar için ise login nodunda
scontrol show partition komutunu kullanın.
Ayarların Değiştirilmesi ve Kaydedilmesi#
Varsayılan olarak, AdditionalProperties üzerinde yapılan değişiklikler
MATLAB oturumları (sessions) arasında kaydedilmez.
Mevcut tüm ayarları görüntülemek için:
c.AdditionalProperties
İhtiyacınız olan parametreleri belirledikten sonra bir ayarı şu şekilde değiştirebilirsiniz:
c.AdditionalProperties.WallTime = '0-00:30';
Bir değeri temizlemek ve eklenti varsayılanlarına dönmek için:
c.AdditionalProperties.Partition = '';
c.AdditionalProperties.NumNodes = 0;
c.AdditionalProperties.MemPerCPU = '';
c.AdditionalProperties.RequireExclusiveNode = false;
Ayarlarınızın MATLAB oturumları arasında kalıcı olmasını sağlamak için (değişiklik yaptıktan sonra kaydedin):
c.saveProfile
İş Gönderme#
Kümeye iş göndermek için batch komutunu kullanın:
j = batch(c, @fonksiyonunuz, 1, {}, ...
'Pool', 2, ...
'CurrentFolder', '.', ...
'AutoAddClientPath', false);
Argümanların açıklaması:
c: TRUBA küme profili.@fonksiyonunuz: Kümede çalıştırılacak fonksiyon (hızlı bir test için, TRUBA üzerindeki çalışma dizinini döndüren@pwdkullanılabilir).1: Beklenen çıktı argümanı sayısı.{}: Giriş argümanları (bu örnekte boş).'Pool', 2: Paralel worker (işçi) sayısı.'CurrentFolder', '.': Küme üzerindeki çalışma dizini.'AutoAddClientPath', false: MATLAB’ın yerel yolları küme worker’larına eklemesini engeller (gereksiz uyarıları önler).
İş gönderildikten sonra Slurm kuyruğuna girer ve tamamen TRUBA üzerinde çalışır. MATLAB’ı veya masaüstü oturumunuzu kapatabilirsiniz; iş çalışmaya devam eder.
Pool+1 Kuralı#
Önemli
Toplam Slurm Görevi = Havuz (Pool) Boyutu + 1
Bir paralel havuz talep ettiğinizde, MATLAB işin yönetimi ve koordinasyonu (orchestration) için ek bir görev (task) kullanır. Bu nedenle, 2’lik bir havuz aslında 3 Slurm görevi talep eder. Bazı kuyruklar (partition) node başına katı çekirdek sayıları uyguladığı için bu hesaplama çok önemlidir.
Örnek: orfoz üzerinde tam 56 çekirdek kullanmak için Pool = 55
olarak ayarlanmalıdır:
j = batch(c, @fonksiyonunuz, 1, {}, ...
'Pool', 55, ...
'CurrentFolder', '.', ...
'AutoAddClientPath', false);
Not
Sadece Metot C için: Slurm iş betiklerinde (batch scripts) Pool+1 kuralı
manuel olarak uygulanmaz; worker (işçi) sayısı otomatik olarak
SLURM_NTASKS - 1 formülüyle hesaplanır.
Kuyruk Referansı: CPU Kuyrukları#
Kuyruk |
Çekirdek/N |
Bellek/CPU |
Notlar |
|---|---|---|---|
|
esnek |
— |
Sadece test amaçlıdır |
|
112 |
~2000 MB |
56×n çekirdek istenmeli |
|
56 |
~3400 MB |
56×n çekirdek istenmeli |
|
40 |
~8500 MB |
40×n çekirdek istenmeli |
|
224 |
3400 MB (maks 17000) |
Tek node: |
Çekirdek Sayısı Kuralları#
Bazı kuyruklar katı “node başına çekirdek sayısı” politikaları uygular. Bu kurallar ihlal edilirse, Slurm işi bir hata mesajıyla reddeder.
orfoz: Node başına 56 veya 112 çekirdek talep edilmelidir.hamsi: Node başına 56×n çekirdek talep edilmelidir.barbun: Node başına 40×n çekirdek talep edilmelidir.
Önemli
Pool+1 kuralını unutmayın. Örneğin orfoz üzerinde 56 çekirdek
ayırmak için MATLAB içinde Pool = 55 ayarlamalısınız.
Reddedilen iş mesajı örneği:
sbatch: error: Orfoz kuyruguna gonderilen islerde node basina
56/112 cekirdek talep ediniz.
Kuyruk Referansı: GPU Kuyrukları#
Kuyruk |
Çekirdek/N |
GPU/Node |
Bel./CPU |
GPU Baş. CPU |
|---|---|---|---|---|
|
40 |
2 |
~8500 MB |
20 |
|
40 |
4 |
~8500 MB |
10 |
GPU Talep Kuralları#
GPU kuyrukları hem zorunlu bir GPU talebi hem de katı bir CPU-GPU oranı uygular.
barbun-cuda: - GPU talebi zorunludur. - GPU başına 20×n CPU çekirdeği talep edilmelidir. - Tam bir node: 2 GPU + 40 CPU çekirdeğinden oluşur.
akya-cuda: - GPU talebi zorunludur. - GPU başına 10×n CPU çekirdeği talep edilmelidir. - Tam bir node: 4 GPU + 40 CPU çekirdeğinden oluşur.
MATLAB üzerinden GPU talep etmek için:
c.AdditionalProperties.GPUsPerNode = 2;
Önemli
Eğer daha önce bir node kısıtlaması (Constraint) ayarladıysanız
(örneğin test için orfoz), GPU kuyruklarına iş göndermeden önce
bunu mutlaka temizleyin:
c.AdditionalProperties.Constraint = '';
Aksi takdirde Slurm uygun bir node bulamayabilir.
Hata mesajı örnekleri:
barbun-cuda kuyruguna sadece GPU talebi olan isler gonderilebilir.
sbatch: error: Too few CPUs requested for the number of GPUs.
Bellek Modeli#
TRUBA’da bellek tahsisi, talep edilen CPU çekirdek sayısı ile orantılıdır; belleği doğrudan talep etmezsiniz. Daha fazla çekirdek talep etmek, size oranlı olarak daha fazla bellek sağlar. Bellek miktarları yukarıdaki kuyruk (partition) tablolarında belirtilmiştir.
İpucu
Bellek yoğun işler: Eğer işiniz CPU çekirdeğinden ziyade belleğe
ihtiyaç duyuyorsa, CPU başına bellek oranı daha yüksek olan bir kuyruk
seçin. barbun (~8500 MB/CPU), bellek yoğun iş yükleri için
genellikle en iyi seçenektir. Çok yüksek bellek gereksinimleri için
smp kuyruğunu değerlendirin.
Not
Sorumlu kullanım: Sadece daha fazla bellek elde etmek için, işlemcilerin boşta kalmasına neden olacak şekilde gereksiz çekirdek talebinde bulunmayın. Bunun yerine, işinize en uygun CPU/Bellek oranını sunan kuyruğu tercih edin.
İş İzleme ve Sonuçların Alınması#
İş Çalışırken#
İşin durumunu MATLAB içerisinden kontrol edebilirsiniz:
j.State
Olası durumlar:
queued: Slurm kuyruğunda bekliyor.running: Şu anda yürütülüyor.finished: Başarıyla tamamlandı.failed: Bir hata oluştu.
Kısa test işleri için MATLAB’ı iş bitene kadar bekletmek (bloklamak) isterseniz:
wait(j)
Durumu TRUBA login nodu üzerinden kontrol etmek için:
squeue -u $USER
İş bittikten sonra detaylı istatistikleri almak için:
sacct -j <jobid> --format=JobID,State,Elapsed,AllocCPUS,NodeList
Tamamlanmış Bir İşe Geri Dönme#
Uzun süreli işlerde, işi gönderdikten sonra MATLAB’ı kapatıp daha sonra sonuçları kontrol etmek için geri dönebilirsiniz. İşlerinize yeniden bağlanmak için:
c = parcluster;
c.Jobs % Bu profille ilişkili tüm işleri listeler
c.Jobs; iş kimliği (ID), durum ve gönderim zamanını içeren bir liste
döndürür. Eğer birden fazla iş gönderdiyseniz, ilgili işi şu şekilde
seçebilirsiniz:
% Konuma göre seçme (en son gönderilen iş)
j = c.Jobs(end);
% Veya gönderim sırasında not ettiğiniz ID ile seçme
j = c.findJob('ID', 4);
Sonuçların Alınması#
Fonksiyon Çıktısı (fetchOutputs): Eğer işiniz değer döndüren bir fonksiyon olarak gönderildiyse, sonuçları şöyle çekebilirsiniz:
out = fetchOutputs(j); out{1} % Çıktılar her zaman bir 'cell array' olarak döner
Bu yöntem, küçük sonuçlar döndüren fonksiyonlar ve testler için en pratik yoldur.
Dosya Çıktısı: Üretim işleri (production jobs) için MATLAB kodunuz genellikle sonuçları
save()vb. komutlarla doğrudan diske yazar. Bu dosyalar,batchçağrısında belirttiğinizCurrentFolderdizinine kaydedilir.Önemli
Dosyalar nerede?
Metot A (Open OnDemand): Dosyalar küme üzerinde, belirttiğiniz dizine (genellikle
/arf/scratch/$USER) yazılır. Bunlara doğrudan TRUBA dosya sistemi üzerinden erişebilirsiniz.Metot B (Yerel MATLAB): Dosyalar yerel makinenize değil, küme üzerine yazılır. Bunlara erişmek için TRUBA’ya SSH ile bağlanmalı veya
scp/sftpile yerelinize kopyalamalısınız.
Yazdırılan Çıktıları Görüntüleme: Yürütme sırasında MATLAB’ın komut penceresine (command window) yazdırdığı her şeyi görmek için:
diary(j)
İş Başarısız Olursa#
j.State % Durumun 'failed' olduğunu teyit edin
j.Tasks(1).Error % Hata mesajını görüntüleyin
diary(j) % Hatalar dahil tüm yazdırılan çıktıları inceleyin
Sorunu TRUBA desteğine bildirmeniz gerekirse, Slurm iş numarasını (job ID) şöyle alabilirsiniz:
j.getTaskSchedulerIDs()
Temizlik#
Tamamlanmış tek bir işi ve yerel üstverilerini (metadata) silmek için:
delete(j)
Profille ilişkili tüm iş kayıtlarını temizlemek için:
c = parcluster;
delete(c.Jobs)
İleri Seviye: Masaüstünden Etkileşimli parpool#
Bu bölüm, kişisel bilgisayarınızdaki MATLAB üzerinden doğrudan TRUBA’da bir
paralel havuz (parallel pool) başlatmayı açıklar. Havuz bağlandığında,
parfor döngüleriniz sanki yerelde çalışıyormuş gibi şeffaf bir şekilde
küme worker’ları üzerinde yürütülür.
Not
Gereksinimler: VPN aktif olmalı ve bilgisayarınızda gelen trafik için TCP 27370 portu açık olmalıdır.
Bağlantının Kurulması#
Havuzu başlatmadan önce, VPN IP adresinizi TRUBA worker nodlarına tanıtmak için aşağıdaki komutu çalıştırın:
sethostname
Beklenen çıktı:
Found private IP address. Setting hostname: 10.x.x.x
Bu komutu MATLAB’ı her başlattığınızda çalıştırmalısınız. Eğer güvenlik duvarı iletişimi engelliyorsa şu hatayı alabilirsiniz:
Check whether a firewall is blocking communication between the
worker machines and the MATLAB client machine.
TRUBA Üzerinde Paralel Havuz Başlatma#
Küme profilini her zamanki gibi yapılandırın (kuyruk kuralları ve bellek rehberi için bkz. İşlerin Yapılandırılması ve Gönderilmesi), ardından havuzu başlatın:
c = parcluster;
c.AdditionalProperties.Partition = 'orfoz';
c.AdditionalProperties.NumNodes = 1;
c.AdditionalProperties.WallTime = '0-00:30';
pool = parpool(c, 56);
Not
parpool(c, 56) komutu arka planda 56 worker talep eden bir Slurm işi
gönderir. Tüm TRUBA kuyruk kısıtlamaları geçerlidir; örneğin orfoz
node başına 56×n çekirdek gerektirir. Havuz, siz açıkça silene kadar
aktif kalır ve küme kaynaklarını rezerve eder.
Bu başlangıç aşaması; MATLAB’ın Slurm işini göndermesi, worker süreçlerini başlatması ve bağlantıları kurması sırasında on saniyelerden birkaç dakikaya kadar sürebilir.
Kodun Etkileşimli Çalıştırılması#
Havuz bağlandığında, parfor döngüleriniz küme worker’ları üzerinde
şeffafça çalışır. Havuzun çalıştığını doğrulamak için hızlı bir test:
tic; parfor i = 1:56, pause(1); end; toc
56 worker ile her iterasyon eşzamanlı çalışır, bu nedenle toplam geçen süre 56 saniye yerine 1 saniyeye yakın olmalıdır. Bu, havuzun aktif olduğunu doğrular.
Havuzun İzlenmesi#
Aktif havuzları ve işleri görüntülemek için İş Monitörünü (Job Monitor) açın:
Parallel → Monitor Jobs
Not
Havuz aktif olduğunda İş Monitörü Description: Interactive pool ve State: running durumlarını gösterir. Bu, worker’ların tahsis edildiği anlamına gelir; mutlaka bir döngünün o an yürütüldüğü anlamına gelmez. Havuz açık kaldığı sürece küme kaynakları rezerve edilir.
Havuzun Kapatılması#
İşiniz bittiğinde havuzu her zaman silin:
delete(gcp('nocreate'))
Boştaki havuzlar yaklaşık 30 dakika sonra otomatik olarak sonlandırılabilir, ancak kaynak israfını önlemek için buna güvenmeyin.
Sorun Giderme#
Eğer havuz bağlanamazsa (örneğin VPN bağlantısını yeniledikten sonra), şunu deneyebilirsiniz:
fixConnection
Yardımcı Fonksiyonlar#
TRUBA, MATLAB içerisinden Slurm ve küme kaynaklarıyla etkileşimi
kolaylaştıran çeşitli yardımcı fonksiyonlar sunar. Küme özelliklerini
sorgulayan tüm fonksiyonlar aktif bir küme profili nesnesi gerektirir
— bunları c = parcluster komutundan sonra çalıştırın.
Fonksiyon |
Açıklama |
Notlar |
|---|---|---|
|
Kullanılabilir Slurm kuyruklarını listeler |
Kuyruk ayarından önce teyit edin |
|
Küme özelliklerini ve kısıtları listeler |
Kuyruk kurallarını anlamak için yararlı |
|
Mevcut GPU modellerini listeler |
GPU kaynağı talep etmeden önce kullanın |
|
Küme bağlantısını yeniden kurar |
Sadece etkileşimli parpool için geçerli |
|
İşin Slurm verimlilik verilerini gösterir |
İş tamamlandıktan sonra kullanın |
|
İşin neden kuyrukta olduğunu açıklar |
İş beklerken kullanın |
Kullanım#
% Küme sorgulama fonksiyonları — küme profili nesnesi gerektirir
c = parcluster;
clusterPartitionNames(c)
clusterFeatures(c)
clusterGpuCards(c)
% İş fonksiyonları — MATLAB iş (job) nesnesi gerektirir
% 'j' nesnesi batch() tarafından döndürülür veya c.Jobs ile alınır
seff(j) % İş tamamlandıktan sonra
willRun(j) % İş kuyrukta beklerken
seff Çıktısının Yorumlanması#
seff(j), işinizin kendisine ayrılan kaynakları ne kadar verimli
kullandığına dair bir özet sunar. Örnek çıktı:
ID: 5335910
Cluster: arf
User/Group: username/username
State: COMPLETED (exit code 0)
Nodes: 1
Cores per node: 56
CPU Utilized: 00:22:41
CPU Efficiency: 22.50% of 01:40:48 core-walltime
Job Wall-clock time: 00:01:48
Memory Utilized: 50.29 GB
Memory Efficiency: 45.98% of 109.38 GB
Gelecekteki iş gönderimlerini optimize etmek için en yararlı iki değer:
CPU Verimliliği (CPU Efficiency): %22.50 değeri, worker’ların işin büyük bölümünde boşta kaldığı anlamına gelir. Ya iş yükü 56 worker’ı meşgul tutmak için çok küçüktü ya da iterasyonlar arasında dengesiz bir yük dağılımı vardı. Havuz (pool) boyutunu azaltmayı veya iterasyon başına iş yükünü artırmayı düşünün.
Bellek Verimliliği (Memory Efficiency): %45.98 değeri, ayrılan belleğin yaklaşık yarısının kullanılmadığı anlamına gelir. TRUBA’da bellek miktarı talep edilen çekirdek sayısıyla ölçeklendiği için, bir sonraki çalışmada daha az çekirdek talep ederek yeterli belleğe sahip olmaya devam edebilirsiniz.
İpucu
Kaynak taleplerinizi optimize ederken her işten sonra seff komutunu
çalıştırın. CPU ve bellek verimliliği sürekli olarak yüksek olduğunda,
iş yükünüz için en doğru yapılandırmayı bulmuşsunuz demektir.
Sorun Giderme#
İş Başarısız Oldu: Hata Ayıklama Günlüklerinin Alınması#
Bir batch işi başarısız olursa, TRUBA üzerindeki MATLAB worker’larından gelen
ayrıntılı hata mesajlarını almak için getDebugLog komutunu kullanın.
Havuz (pool) işleri için:
c.getDebugLog(job)
Bağımsız işler (birden fazla görev) için:
c.getDebugLog(job.Tasks)
Slurm İş Kimliğinin (Job ID) Alınması#
Bir sorunu TRUBA desteğine bildirmeniz gerekirse, sizden Slurm iş kimliğini (Job ID) isteyebilirler. Bu kimliği şu komutla alabilirsiniz:
job.getTaskSchedulerIDs()
Örnek çıktı:
ans =
25539
Bu numara, TRUBA login nodunda squeue veya sacct komutlarıyla
görülebilen Slurm iş numarasına karşılık gelir.
Lisanslama Sorunları#
TRUBA üzerindeki MATLAB işleri şunları gerektirir:
Yerel MATLAB kurulumunuzda geçerli bir akademik lisans.
parpoolvePoolparametrelibatchkullanımı için Parallel Computing Toolbox.
TRUBA’nın ağ lisansı zaten yapılandırılmıştır; küme tarafında herhangi bir ayar yapmanıza gerek yoktur.
Yerel Lisansınızı Kontrol Etme#
Yerel MATLAB kurulumunuzda Parallel Computing Toolbox olup olmadığını doğrulamak için:
license('test', 'Distrib_Computing_Toolbox')
% Varsa 1, yoksa 0 döner
Oturumunuzda o an kullanılan tüm araç kutularını (toolboxes) görmek için:
license('inuse')
MATLAB’ınızda kurulu olan tüm araç kutularını görmek için:
ver
Not
Eklenti (Metot B) üzerinden kümeye iş göndermek için akademik lisans zorunludur. Kurumsal lisansınızın Parallel Computing Toolbox’ı kapsayıp kapsamadığından emin değilseniz, kurumunuzun MATLAB lisans yöneticisine danışın.
Lisans Sorunu Belirtileri#
İşin gönderildikten hemen sonra başarısız olması.
Worker’ların başlatılamaması.
parpoolkomutunun takılması veya lisans hatası (checkout failure) vermesi.
TRUBA Tarafında Lisans Sorunu Olduğundan Şüpheleniyorsanız#
TRUBA desteğiyle iletişime geçin ve şu bilgileri ekleyin:
Slurm iş kimliği (
job.getTaskSchedulerIDs()).Hata ayıklama günlüğü (debug log) (
c.getDebugLog(job)).j.Tasks(1).Errorkomutundan gelen tam hata mesajı.
Daha Fazla Bilgi#
MATLAB Parallel Computing Toolbox hakkında daha fazla bilgi edinmek için aşağıdaki resmi MathWorks kaynakları yardımcı olabilir:
Bu kaynaklar, MATLAB içindeki genel paralel hesaplama kullanımını kapsar ve TRUBA küme yapılandırmasına özel değildir.
Hızlı Referans#
Temel Ayarlar#
c = parcluster;
c.AdditionalProperties.Partition = 'debug'; % kuyruk adı
c.AdditionalProperties.NumNodes = 1; % node sayısı
c.AdditionalProperties.WallTime = '0-00:10'; % azami çalışma süresi (G-SA:DA)
Testler için her zaman debug ile başlayın. Üretim işleri için kuyruğu
değiştirin.
İş Gönderme#
j = batch(c, @fonksiyonunuz, 1, {}, ...
'Pool', N, ...
'CurrentFolder', '.', ...
'AutoAddClientPath', false);
Pool+1 Kuralı#
Toplam Slurm görevi = Pool + 1
MATLAB, yönetim (orchestration) için fazladan bir görev kullanır. Katı çekirdek politikası uygulayan kuyruklarda bu hesaplama kritiktir:
Kuyruk |
Çekirdek/N |
Pool Değeri |
|---|---|---|
|
56 |
55 |
|
112 |
111 |
|
56 |
55 |
|
40 |
39 |
|
(GPU) 40 |
39 |
|
(GPU) 40 |
39 |
İş İzleme ve Sonuçların Alınması#
j.State % queued / running / finished / failed
wait(j) % iş bitene kadar MATLAB'ı beklet
diary(j) % worker'ların çıktılarını görüntüle
out = fetchOutputs(j); out{1} % fonksiyon dönüş değerini al
j.Tasks(1).Error % iş başarısızsa hatayı görüntüle
c.getDebugLog(j) % detaylı worker hata günlüğü
Login nodu üzerinden:
squeue -u $USER
sacct -j <jobid> --format=JobID,State,Elapsed,AllocCPUS,NodeList
Tamamlanmış Bir İşe Geri Dönme#
c = parcluster;
c.Jobs % tüm işleri listele
j = c.Jobs(end); % en son gönderilen iş
j = c.findJob('ID', 4); % ID ile belirli bir işi seç
Ayarların Kaydedilmesi#
c.saveProfile % ayarları oturumlar arasında kalıcı yap
c.AdditionalProperties % mevcut tüm ayarları görüntüle
Örnek: orfoz Üzerinde CPU İşi (56 çekirdekli yarım node)#
c = parcluster;
c.AdditionalProperties.Partition = 'orfoz';
c.AdditionalProperties.NumNodes = 1;
c.AdditionalProperties.WallTime = '0-00:10';
j = batch(c, @pwd, 1, {}, ...
'Pool', 55, ...
'CurrentFolder', '.', ...
'AutoAddClientPath', false);
wait(j);
out = fetchOutputs(j);
out{1} % TRUBA üzerindeki çalışma dizininizi döndürmelidir
Örnek: barbun-cuda Üzerinde GPU İşi (2 GPU, 40 CPU)#
c = parcluster;
c.AdditionalProperties.Partition = 'barbun-cuda';
c.AdditionalProperties.NumNodes = 1;
c.AdditionalProperties.WallTime = '0-00:10';
c.AdditionalProperties.GPUsPerNode = 2;
j = batch(c, @gpuDeviceCount, 1, {}, ...
'Pool', 39, ...
'CurrentFolder', '.', ...
'AutoAddClientPath', false);
wait(j);
out = fetchOutputs(j);
out{1} % worker tarafından görülen GPU sayısını (2) döndürmelidir