Altay Kümesinde MATLAB Yazılımını Çalıştırmak
Satın aldığımız yıllık MATLAB lisansımız, hangi üniversiteden olurlarsa olsun, akademik kullanıcılarımıza akademik çalışmaları için sınırsız MATLAB kullanabilmelerine olanak sağlamaktadır. Tüm matlab modüllerini kullanmak, ve sınırsız sayıda iş ve işlemci kullanımı mümkündür.
Ancak sadece R2023a, R2022b, ve R2022a sürümleri yüklüdür. İşletim sistemimizle uyumlu olan en yeni sürümler bunlardır. Ayrıca uygun GPU'lu makina içeren kuyruk seçilerek GPU kullanan matlab işi de çalıştırabilirsiniz.
Bu matlab lisansı ile matlab kullanabilmek için, kullanıcının akademik linux grubuna üye olması gereklidir. akademik grubunda olup olmadığınızı id komutu ile test edebilirsiniz:
$ id
uid=1677(mercan) gid=928(hsaat) groups=928(hsaat),407(akademik)
Şayet akademik bir hesabınız varsa ve id komutunun çıktısında akademik grubuna üye gözükmüyorsanız, UHEM destek biriminden bir eposta ile eklenmenizi istemelisiniz. Siz istekte bulunmadan otomatik olarak bu gruba eklenmezsiniz.
Bu Matlab Lisansı sınırsız olduğu için, matlab çalıştırma betiğinizde slurm'den lisans istemenize de gerek yoktur:
#!/bin/bash
#SBATCH -J "MATLAB isi" # isin adi
#SBATCH -p defq # kuyruk (partition/queue) adi
#SBATCH -A hsaat # account / proje adi
#SBATCH -n 128 # toplam cekirdek / islemci sayisi
#SBATCH -N 1 # makina sayisi
module load MATLAB/R2023a
matlab -nodisplay -nosplash < ./programimiz.m
Bu betiği /ari/progs/slurm_betikleri/matlab.sh adresinde de bulabilirsiniz.
Altay Kümesinde, Kendi Bilgisayarınızdan MATLAB Yazılımını Çalıştırmak
İşletim sistemini ne olursa olsun (Windows, MacOSX, Linux), kendi bilgisayarınızda kurulu MATLAB yazılımından (Sadece R2023a, R2022b, ve R2022a sürümleri ile), Altay kümesine matlab hesaplama işlerinizi gönderebilirsiniz.
Hazırlık İşlemleri
Bu amaçla yapılması gereken bir kaç hazırlik mevcuttur:
Altay kümesinde MATLAB yazılımını çalıştırmak konusunda bahsedilen tüm şartlar kendi bilgisayarınızdaki matlab'dan iş gönderirken de gereklidir. Sadece R2023a, R2022b, ve R2022a sürümlerinden biri bilgisayarınızda kurulu ise kullanabilirsiniz. Sadece akademik kullanıcımız iseniz, ve akademik çalışmalarınız için kullanacaksanız bu matlab imkanından yararlanabilirsiniz. Kullanıcınızın akademik linux grubuna üye olması yine gereklidir. Ayrıca her iş gönderdiğinizde yada sonuçlarını aldığınızda UHeM'e VPN ile bağlı durumda olmalısınız.
Bu şartları sağlıyorsanız, öncelikle matlab için küme bilgisini toplamalısınız:
$ module load MATLAB/[VERSION]
Bu MATLAB sadece akademik kullanicilarca akademik isler icin kullanabilir.
Kullanabilmek icin akademik grubuna uye olmalisiniz.
$ configCluster.sh
Bu işlemden sonra kendi bilgisayarınızdaki MATLAB yazılımında aşağıdaki komutu çalıştırınız:
>> userpath
Yukarıdaki komutun çıktısında gösterilen dizine https://www.uhem.itu.edu.tr/MATLAB-par/uhem-matlab-desktop.zip dosyasını indirip açınız (unzip).
Sonrasında, UHeM'e openvpn ile bağlanarak, altay kümesine ulaşabilir durumda olunuz. Matlab'ın UHeM'e bağlanıp, configCluster.sh komutu ile hazırladığınız küme bilgisini alabilmesi için bu gereklidir.
Eğer yukarıdaki dosyayı uygun yerine açtı iseniz, aşağıdaki komutu çalıştırarak işin çalıştırılacağı küme bilgisini alınız. Bu komut, her matlab sürümü için sadece bir kez çalıştırılmalıdır, daha sonra tekrar çalıştırmayınız:
>> configCluster
Size UHeM'deki kullanıcı adınız ve şifreniz sorulacaktır. Kullanıcı adınız kaydedilecek ve sonrasında sadece şifre istenecektir. Dilerseniz şifre yerine bilgisayarınızdaki kullanıcının gizli ssh anahtarını (ssh private key) da kullanabilirsiniz (tabiki şifresiz ssh ayarladıysanız).
Bu komut sonrasinda artık çalıştırdığınız tüm işler için, aksini ayarlamazsanız, UHeM Altay kümesi kullanılacaktır.
Eğer, bir hesabın kendi bilgisayarınızda yapılmasını isterseniz, aşağıdaki şekilde local makine ayarlaması yapmalısınız:
>> % Get a handle to the local resources
>> c = parcluster('local');
İş Çalıştırma Ayarlamaları
Matlab her hesaplama işini Altay kümesinin SLURM yazılımına bir iş betiği olarak vereceği için, matlab içerisinde bir hesaplama yapmadan sanki kendiniz bir slurm betiği hazırlar gibi gerekli iş parametrelerini matlab'a sağlamalısınız. İşleme parcluster değişkenini tanımlayarak başlıyoruz:
>> % Get a handle to the cluster
>> c = parcluster();
Aşağıda ayarlayabileceğiniz bir çok parametre gösterilmiştir, ancak sadece kullanılacak proje (account-name) bilgisini vermek zorunludur, diğerlerini isterseniz ayarlarsınız, şart değildir:
%[REQUIRED]
>> % Specify the account
>> c.AdditionalProperties.AccountName = 'account-name';
%[OPTIONAL]
>> % Specify a constraint
>> c.AdditionalProperties.Constraint = 'feature-name';
>> % Request email notification of job status to the your email adress
>> c.AdditionalProperties.EmailAddress = 'my_email@itu.edu.tr';
>> % Specify the partition
>> c.AdditionalProperties.Partition = 'partition-name';
>> % Specify cores per node
>> c.AdditionalProperties.ProcsPerNode = 64;
>> % Use reservation
>> c.AdditionalProperties.Reservation = 'reservation-name';
>> % Specify the wall time (e.g., 1 day, 5 hours, 30 minutes)
>> c.AdditionalProperties.WallTime = '1-05:30';
Bir ornek verelim:
>> % Kullanilacak Proje / Account (#SBATCH -A)
>> c.AdditionalProperties.AccountName = 'hsaat';
>> % Eposta adresi (#SBATCH --mail-user)
>> c.AdditionalProperties.EmailAddress = '';
>> % Kullanilacak Kuyruk (#SBATCH -p)
>> c.AdditionalProperties.Partition = 'defq';
>> % Bu kuyruktaki bir sunucudaki islemci/cekirdek sayisi
>> c.AdditionalProperties.ProcsPerNode = 128;
Burada verilen değerler parametrelerin anlaşılması için, açıklama/örnek olarak verilmiştir. Sizin kendi durumunuza uygun şekilde değişiklikleri yapmanız gereklidir. Bu örneği aynen KULLANMAYINIZ!
Sonrasında bu ayarlamaları kaydetmeliyiz:
>> c.saveProfile
Dilerseniz emin olmak yada ayarlamadığınız değerlerin mevcut durumunu görmek için, mevcut ayarları da yazdırabiliriz:
>> % To view current properties
>> c.AdditionalProperties
Yukarıdaki ayarlamalarda işimizin her aşamasında bize eposta yollanması için eposta bilgisi girilmesi gösterildi. Ancak bu her zaman iyi bir fikir değildir. Eğer eposta gönderilmesin istersek, eposta bilgisini silebiliriz:
>> % Turn off email notifications
>> c.AdditionalProperties.EmailAddress = '';
>> c.saveProfile
Daha fazlası ve kullanım örnekleri için https://www.uhem.itu.edu.tr/MATLAB-par/matlab.html sayfasına bakınız.
Sariyer Kümesinde MATLAB Yazılımını Komut Arabiriminden Çalıştırmak
Merkezimizdeki sariyer kümesinde kurulu bulunan MATLAB yazılımı 9.1 (R2016b) ve 9.3 (R2017b) sürümleridir ve lisansımız aşağıdaki gibidir:
MATLAB: 20 licenses MATLAB_Distrib_Comp_Engine: 128 licenses SIMULINK: 10 licenses GADS_Toolbox: 20 licenses Image_Toolbox: 10 licenses Compiler: 10 licenses Optimization_Toolbox: 20 licenses Distrib_Computing_Toolbox: 10 licenses PDE_Toolbox: 10 licenses Symbolic_Toolbox: 10 licenses
İlk satırdaki lisans matlab kodumuzun paralel çalışması için gereken lisansdır ve görüleceği üzere 128 adet lisansımız mevcuttur. Yani en fazla 20 program ve tümünün toplamı 128 işlemciye kadar matlab işi çalıştırılabilmektedir. Ayrıca sadece yukarıda lisansta gözüken toolbox'lar kullanılabilir. Diğer toolbox'lar lisans olmadığından kullanılamaz.
Tek makinada Matlab çalıştırmak
Matlab programı (.m uzantılı program dosyası) çalıştırmak için gereken iş dosyası aşağıdaki gibidir. Bu betiği sariyer makinasında /okyanus/progs/slurm_betikleri/matlab-R2016b.sh ve /okyanus/progs/slurm_betikleri/matlab-R2017b.sh adresinde bulabilirsiniz:
#!/bin/bash
#SBATCH -A hsaat # account / proje adi
#SBATCH -n 28 # cekirdek / islemci sayisi
#SBATCH -N 1 # makina sayisi / ilave ayar yapmadikca mutlaka 1 olmali
#SBATCH -L matlab@flex5,matlabpar@flex5:28 # lisans isteniyor, buradaki sayi kullanilan cekirdek sayisi ile ayni olmali
module load MATLAB/R2016b
matlab -nodisplay -nosplash < ./programimiz.m
Yukarıdaki örnekte makina sayısı kullanıcı mutlaka 1 olmalıdır. Dolayısı ile bu ayar yapılmazsa, en fazla 1 makinada 28 işlemci (longq kuyruğunda 24 işlemci) kullanacak iş çalıştırılabilir. Daha fazla makina kullanımı aşağıda ayrı bir bölümde anlatılmıştır.
Aşağıda bir paralel matlab programı örnek olarak verilmiştir. Bu program http://hpcf.umbc.edu/other-packages/how-to-run-matlab-programs-on-maya sitesinden alınarak değiştirilmiştir. Ayrıca MATLAB dökümantasyonunada http://www.mathworks.com/help/pdf_doc/distcomp/distcomp.pdf adresinden ulaşabilirsiniz:
UHeM = parcluster('local');
poolobj = parpool(UHeM,28);
spmd
msg = sprintf('Hello world from process %d of %d', labindex, numlabs);
end
for i=1:poolobj.NumWorkers
disp(msg{i});
end
delete(poolobj);
Birden çok makinada Matlab çalıştırmak
Birden çok makinada Matlab programı (.m uzantılı program dosyası) çalıştırmak için gereken iş dosyası aşağıdaki gibidir. Bu betiği sariyer makinasında /okyanus/progs/slurm_betikleri/matlab-R2016b-multinode.sh ve /okyanus/progs/slurm_betikleri/matlab-R2017b-multinode.sh adresinde bulabilirsiniz. Aşağıdaki betikte servisleri başlatmak için verilen R2016b ifadesi, R2017b sürümü için R2017b şeklinde olacaktır:
#!/bin/bash
#SBATCH -A hsaat # account / proje adi
#SBATCH -n 56 # cekirdek / islemci sayisi
#SBATCH -N 2 # makina sayisi / ilave ayar yapmadikca mutlaka 1 olmali
#SBATCH -L matlab@flex5,matlabpar@flex5:56 # lisans isteniyor, buradaki sayi kullanilan cekirdek sayisi ile ayni olmali
module load MATLAB/R2016b
#MATLAB servisleri aciliyor, asagidaki satiri degistirmeyiniz:
/okyanus/progs/matlabAyarla/matlab_servisleri_baslat.sh R2016b
matlab -nodisplay -nosplash < ./programimiz.m
#MATLAB servisleri aciliyor, asagidaki satiri degistirmeyiniz:
/okyanus/progs/matlabAyarla/matlab_servisleri_durdur.sh R2016b
Yukarıdaki örnekte matlab servislerinin açılması ve kapanması oldukça uzun zaman almaktadır, bu sebeble işiniz gerçekten gerektirmedikce yukarıdaki 1 makina için olan betiği kullanınız.
Aşağıda bir paralel matlab programı örnek olarak verilmiştir. Bu program http://hpcf.umbc.edu/other-packages/how-to-run-matlab-programs-on-maya sitesinden alınarak değiştirilmiştir. Ayrıca MATLAB dökümantasyonunada http://www.mathworks.com/help/pdf_doc/distcomp/distcomp.pdf adresinden ulaşabilirsiniz:
profile_UHeM = parallel.importProfile('matlab-UHeM');
UHeM = parcluster(profile_UHeM);
poolobj = parpool(UHeM,56);
spmd
msg = sprintf('Hello world from process %d of %d', labindex, numlabs);
end
for i=1:poolobj.NumWorkers
disp(msg{i});
end
delete(poolobj);
Sariyer Kümesinde Grafik Arabirimle Matlab Çalıştırmak
Grafik arabirimle Matlab çalıştırmak için öncelikle x2go client yazılımını kendi bilgisayarımıza kurmalıyız. Gerekli açıklamaları Sariyer Kümesine İş Vermek sayfasında bulabilirsiniz.
Sonrasında grafik arayüzle matlab çalıştırmak için gereken işlemler, Sariyer Kümesinde Grafik Arabirim Kullanarak İnteraktif İş Çalıştırmak sayfasında anlatılmıştır.