-
MATLAB
MATLAB
MATLAB on korkean tason teknisen laskennan kieli ja interaktiivinen ympäristö algoritmien kehittämiseen, datan visualisointiin, data-analyysiin ja numeeriseen laskentaan.
Lisenssi
MATLAB on suljettua lähdekoodia oleva ohjelmisto, jonka käyttö edellyttää voimassa olevaa lisenssiä. Lisäksi jokainen toolbox vaatii oman erillisen lisenssinsä toimintojensa käyttöön.
Vaikka supertietokoneiden MATLAB-asennukset sisältävät kaikki saatavilla olevat toolboxit, pelkkä asennus ei anna käyttöoikeutta niiden käyttöön. Sinulla täytyy olla voimassa oleva lisenssi jokaiseen yksittäiseen toolboxiin, jota haluat käyttää.
Lisenssivaihtoehdot käsitellään seuraavissa osioissa.
Saatavuus
Tarjoamme kolme tapaa käyttää MATLABia CSC:n supertietokoneilla. Paras vaihtoehto riippuu tarpeistasi.
-
MATLAB-selainsovellus sopii parhaiten interaktiiviseen käyttöön. Se toimii työpöytäversion tavoin ja antaa sinun käyttää omaa lisenssiäsi (home, individual, student tai campus-wide) kaikkien toolboxiesi kanssa. Voit käyttää myös verkkolisenssiä. Saatavilla Roihu-CPU:ssa ja LUMIssa.
-
MATLAB-komentorivikäyttöliittymä sopii hyvin perusinteraktiiviseen käyttöön ja eräajoihin. Sen avulla voit käyttää omaa lisenssiäsi (home, individual, student tai campus-wide) kaikkien toolboxiesi kanssa. Voit käyttää myös verkkolisenssiä. Saatavilla Roihu-CPU:ssa ja LUMIssa.
-
MATLAB Parallel Server sopii parhaiten erälaskentaan. Voit lähettää töitä paikallisesta MATLABistasi supertietokoneelle. Paikalliset toolboxisi toimivat myös supertietokoneella. Supertietokoneen workerit käyttävät CSC:n verkkolisenssiä. Saatavilla vain Roihu-CPU:ssa.
Kaikki vaihtoehdot tukevat MATLAB-versioita R2023b–R2026a.
Saatavuus Roihussa
- MATLAB Parallel Server EI ole vielä saatavilla Roihussa!
- MATLAB toimii tällä hetkellä vain Roihu-CPU:ssa (x86_64).
GPU:t ovat tällä hetkellä saatavilla vain
vizinteractive-osiolla, joka on tarkoitettu visualisointiin. - Tuki Roihu-GPU:lle on suunnitteilla, kun MATLAB tulee saataville ARM:lle (aarch64).
CSC tarjoaa seuraavat lisenssit, jotka ovat kaikkien käyttäjien yhteiskäytössä, akateemiseen käyttöön:
Verkkolisenssi 1766@license4.csc.fi tarjoaa seuraavat akateemiset lisenssit Roihuun: 5 MATLAB, 2 Parallel Computing Toolbox, 500 MATLAB Parallel Server.
Akateeminen lisenssi sallii käytön vain suomalaisiin korkeakouluihin kuuluville henkilöille eli henkilökunnalle ja opiskelijoille.
Verkkolisenssi 1766@license10.csc.fi tarjoaa seuraavat akateemiset lisenssit LUMIin: 25 MATLAB, 25 Simulink, 25 Control System Toolbox, 25 Curve Fitting Toolbox, 25 Deep Learning Toolbox, 25 Global Optimization Toolbox, 25 Image Processing Toolbox, 25 Optimization Toolbox, 25 Parallel Computing Toolbox, 25 Signal Processing Toolbox, 25 Statistics and Machine Learning Toolbox, 25 Wavelet Toolbox.
Akateeminen lisenssi sallii käytön vain opetukseen ja akateemiseen tutkimukseen tutkintoja myöntävissä oppilaitoksissa.
Info
Jos olet käyttäjä kaupallisesta yrityksestä tai tutkimuslaitoksesta, sinun täytyy tuoda ja käyttää omaa kaupallista lisenssiäsi. Ole hyvä ja ota yhteyttä CSC:n asiakastukeen saadaksesi lisäohjeita.
MATLAB-selainsovellus

Suosittelemme käyttämään selainkäyttöliittymää MATLABin interaktiiviseen käyttöön.
-
Aloita kirjautumalla sen klusterin selainkäyttöliittymään, jota haluat käyttää: www.roihu.csc.fi tai www.lumi.csc.fi.
-
Paina sitten MATLAB-kuvaketta valitaksesi MATLAB-selainsovelluksen.
-
Valitse lähetyslomakkeessa istunnollesi sopivat resurssit. Suosittelemme vähintään 8 Gt muistia ennen MATLAB-sovelluksen käynnistämistä. MATLAB-selainsovellus kuluttaa itsessään noin 4 Gt muistia.
-
Näkyviin tulee MATLAB-selainsovelluksen lisenssi-GUI. Valitse Online License Manager kirjautuaksesi sisään MathWorks-tunnuksillasi. Jos sinulla ei ole MathWorks-tiliä, sinun täytyy luoda MathWorks-tili yliopistosi tai organisaatiosi sähköpostiosoitteella. Vaihtoehtoisesti voit valita Network License Managerin käyttääksesi verkkolisenssiä.
-
MATLAB-sovelluksen latautuminen kestää muutaman minuutin. Paina sitten Connect to MATLAB, jolloin selainsovellus avautuu.
Error
Jos yrität kirjautua sisään MathWorks-tunnuksilla, mutta MATLABin lisenssi-GUI lataa automaattisesti CSC:n lisenssipalvelimen, sinun täytyy ensin tyhjentää välimuistiin tallennetut tunnistetiedot. Toimi näin:
- Avaa selainkäyttöliittymässä Login node shell -sovellus.
- Suorita seuraava komento poistaaksesi välimuistiin tallennetut tunnistetiedot:
MATLAB-komentorivikäyttöliittymä
Voit käyttää MATLAB-komentorivikäyttöliittymää omalla lisenssilläsi (suositeltu) käyttäen Login Named User- tai Online Licensing -tilaa. Molemmat pyytävät MathWorks-käyttäjätunnuksesi ja salasanasi. Käyttö Login Named Userin (LNU) kautta:
Käyttö Online Licensingin (OLL) kautta:
Vaihtoehtoisesti voit käyttää lisenssiä, johon MLM_LICENSE_FILE-ympäristömuuttujan arvo osoittaa; oletuksena tämä on CSC:n tarjoama akateeminen lisenssi:
Voit myös ajaa MATLAB-skriptejä erätilassa seuraavasti:
Voit käyttää eri lisenssiä asettamalla seuraavan ympäristömuuttujan ennen MATLABin käynnistämistä:
Laskentasäikeet ja Parallel Computing Toolbox
MATLABin lineaarialgebraoperaatioissa, suurten taulukoiden alkioittaisissa operaatioissa ja sisäänrakennetuissa matemaattisissa operaatioissa on sisäänrakennettu säikeistys, jota ohjaa maxNumCompThreads.
MATLAB asettaa sen yleensä automaattisesti oikeaan arvoon myös Slurm-töissä.
Voit vertailla yhden ja kahden säikeen vaikutusta matriisikertolaskuun ajamalla seuraavan MATLAB-skriptin:
A = rand(1000, 1000);
% One thread
maxNumCompThreads(1);
t0 = tic;
B = A*A;
t1 = toc(t0);
% Two threads
maxNumCompThreads(2);
t2 = tic;
C = A*A;
t3 = toc(t2);
% Compare times
fprintf("One thread : %g\nTwo threads: %g\n", t1, t3);
Voimme myös rinnakkaistaa koodia MATLABissa käyttämällä korkean tason rakenteita Parallel Computing Toolboxista.
Tarkastellaan seuraavaa sarjallista koodia, joka pysähtyy yhdeksi sekunniksi n kertaa ja mittaa suoritusaikaa:
Seuraavan sarjallisen suorituksen pitäisi kestää noin kaksi sekuntia:
Voimme rinnakkaistaa funktion käyttämällä rinnakkaista for-silmukkarakennetta parfor seuraavasti:
function t = funcParallel(n)
t0 = tic;
parfor idx = 1:n
pause(1);
end
t = toc(t0);
end
Rinnakkaiskoodin ajamiseksi meidän täytyy luoda rinnakkaispooli prosesseilla tai säikeillä ja ajaa sitten rinnakkaiskoodi. Voimme luoda rinnakkaispoolin kahdella prosessilla ja ajaa rinnakkaiskoodin samalla argumentilla kuin sarjallisessa versiossa, mutta sen pitäisi kestää vain noin yksi sekunti:
function t = funcProcesses(n)
pool = parpool('Processes', n);
t = funcParallel(n);
delete(pool);
end
Tässä sama käyttäen säikeisiin perustuvaa rinnakkaispoolia:
function t = funcThreads(n)
pool = parpool('Threads', n);
t = funcParallel(n);
delete(pool);
end
MATLABissa on myös mahdollista käyttää GPU:ita, mutta vain Nvidia-GPU:t ovat tuettuja.
Voimme kysyä saatavilla olevat GPU-laitteet ja suorittaa laskentaa GPU:lla seuraavasti:
function C = funcGPU(n)
gpuDevice();
A_gpu = gpuArray(rand(n, n));
B_gpu = gpuArray(rand(n, n));
C_gpu = A_gpu * B_gpu;
C = gather(C_gpu);
end
Ajetaan funktio:
MATLAB Parallel Server
Paikallinen määritys
MATLAB Parallel Server (MPS) mahdollistaa erätöiden lähettämisen käyttäjän tietokoneella olevasta MATLABista Roihu-klusterin MATLAB-workereille. MPS:n käyttö edellyttää käyttäjän tietokoneella seuraavaa määritystä: MATLAB-asennus tuetulla MATLAB-versiolla, Parallel Computing Toolbox, SSH-yhteys Roihu-klusteriin sekä käyttäjäpuolen määritys. Asenna käyttäjäpuolen määritystiedostot ajamalla seuraava MATLAB-skripti:
% Define local MATLAB configuration directory.
if ispc()
% Windows
confroot = fullfile(getenv("APPDATA"), "Mathworks", "MATLAB");
elseif isunix() || ismac()
% Unix (Linux) or MacOS
confroot = fullfile(getenv("HOME"), ".matlab");
else
% Operating system not supported
exit();
end
% Path to where the ZIP file is downloaded.
confzip = fullfile(confroot, "mps_roihu.zip");
% Remove previous zipfile if exists
if exist(confzip, "file") == 2
delete(confzip);
end
% Path to the directory where configuration files are extracted.
confdir = fullfile(confroot, "mps_roihu");
% Remove previous zipdir if exists
if exist(confdir, "dir") == 7
rmdir(confdir, 's');
end
% Download the configuration files as a ZIP file.
websave(confzip, "https://github.com/CSCfi/csc-env-matlab/raw/refs/heads/main/config/mps_roihu.zip");
% Extract the configuration files to the configuration directory.
unzip(confzip, confdir);
% Persist path to the configuration files.
addpath(confdir);
savepath();
Seuraavaksi määritetään klusteriprofiili, jonka avulla MATLABisi voi lähettää töitä Roihuun. Anna kehotteeseen Roihu-käyttäjätunnuksesi.
Lopuksi voimme testata yhteyden MATLABista Roihuun. Ensimmäisellä yhteyskerralla MATLAB pyytää valitsemaan salasana- tai SSH-avainautentikoinnin välillä. Sinun täytyy valita SSH-avainautentikointi, antaa yksityisen avaimesi polku ja syöttää yksityisen avaimen salasana, jos sellainen on. Salasana-autentikointia ei tueta Roihussa. MATLAB tallentaa avaimesi polun eikä kysy sitä uudelleen tulevissa istunnoissa.
Error
Jos käytät PuTTYä SSH-avainten luomiseen, sinun täytyy viedä yksityinen avain OpenSSH-avaimena ja käyttää sitä MATLAB Parallel Serverin kanssa.
PuTTY Private Key -muoto (.ppk) ei toimi.
Yksittäisen solmun sarjalliset ja rinnakkaiset työt
Määritämme resurssivarauksen käyttäen parcluster-funktiota ja lähetämme funktion tai skriptin klusteriin käyttäen batch-funktiota.
parcluster-olio on tilallinen, joten poistamme ominaisuuksien asetukset eksplisiittisesti silloin, kun niitä ei käytetä, kuten GPU:t vain CPU:ta käyttäville töille.
Voit käyttää seuraavia esimerkkejä; korvaa vain <project> omalla projektillasi, kuten project_2001234, ja muokkaa resurssivarausta tarpeidesi mukaan.
c = parcluster();
c.AdditionalProperties.ComputingProject = '<project>'; % --account=<ComputingProject>
c.AdditionalProperties.Partition = 'small'; % --partition=<Partition>
c.AdditionalProperties.WallTime = '00:15:00'; % --time=<WallTime>
c.NumThreads = 1; % --cpus-per-task=<NumThreads>
c.AdditionalProperties.MemPerCPU = '4g'; % --mem-per-cpu=<MemPerCPU>
c.AdditionalProperties.GPUCard = ''; % --gres=gpu:<GPUCard>:<GPUsPerNode>
c.AdditionalProperties.GPUsPerNode = 0;
j = batch(c, @funcSerial, 1, {2}, 'CurrentFolder', '.', 'AutoAddClientPath', false);
c = parcluster();
c.AdditionalProperties.ComputingProject = '<project>'; % --account=<ComputingProject>
c.AdditionalProperties.Partition = 'small'; % --partition=<Partition>
c.AdditionalProperties.WallTime = '00:15:00'; % --time=<WallTime>
c.NumThreads = 2; % --cpus-per-task=<NumThreads>
c.AdditionalProperties.MemPerCPU = '4g'; % --mem-per-cpu=<MemPerCPU>
c.AdditionalProperties.GPUCard = ''; % --gres=gpu:<GPUCard>:<GPUsPerNode>
c.AdditionalProperties.GPUsPerNode = 0;
j = batch(c, @funcThreads, 1, {2}, 'CurrentFolder', '.', 'AutoAddClientPath', false);
Esimerkissä asetamme työhakemistoksi klusterin kotihakemiston asettamalla 'CurrentFolder' arvoksi '.'.
Lisäksi meidän tulee estää MATLABia lisäämästä paikallista MATLAB-hakupolkua etäworkereille asettamalla 'AutoAddClientPath' arvoksi false.
Nämä esimerkit varaavat klusterista 1 MATLAB Parallel Server -lisenssin työn ajaksi.
Monisolmutyöt
Warning
Monisolmutyöt eivät näytä toimivan versiossa R2025a.
Voimme myös luoda rinnakkaispoolin workereista asettamalla 'Pool'-argumentiksi niiden workereiden määrän, jonka haluamme varata (tämä vastaa Slurm-varauksessa asetusta --ntasks=<PoolSize>).
parcluster-resurssit määrittävät, kuinka paljon resursseja varataan workeria kohden.
Pooli kannattaa varata tällä tavalla silloin, kun tarvitsemme enemmän workereita kuin yhteen solmuun mahtuu; muussa tapauksessa voimme varata rinnakkaistyön kuten edellisessä osiossa kuvattiin ja varata poolin säikeillä tai prosesseilla.
Tässä on esimerkki rinnakkaispoolista, jossa on 50 workeria:
c = parcluster();
c.AdditionalProperties.ComputingProject = '<project>'; % --account=<ComputingProject>
c.AdditionalProperties.Partition = 'large'; % --partition=<Partition>
c.AdditionalProperties.WallTime = '00:15:00'; % --time=<WallTime>
c.NumThreads = 1; % --cpus-per-task=<NumThreads>
c.AdditionalProperties.MemPerCPU = '4g'; % --mem-per-cpu=<MemPerCPU>
c.AdditionalProperties.GPUCard = ''; % --gres=gpu:<GPUCard>:<GPUsPerNode>
c.AdditionalProperties.GPUsPerNode = '';
j = batch(c, @funcParallel, 1, {50}, 'Pool', 50, 'CurrentFolder', '.', 'AutoAddClientPath', false);
Huomaa, että rinnakkaispooli pyytää aina yhden ylimääräisen prosessin worker-poolin hallintaan. Tämä esimerkki varaa klusterista 51 MATLAB Parallel Server -lisenssiä työn ajaksi. Roihussa on 500 MATLAB Parallel Server -lisenssiä kaikkien käyttäjien yhteiskäytössä.
Töiden ja tulosteen kysely
Hae viite parcluster-olioon:
Hae viimeiset 5 työtä:
Hae työ sen tunnisteen perusteella:
Voimme hakea valmistuneen työn funktion tulosteet seuraavasti:
Voimme lukea työn tulosteen seuraavasti:
Voimme myös kysyä työn tehokkuutta:
Klusterissa tiedostoihin kirjoitettu data täytyy hakea suoraan tiedostojärjestelmästä, esimerkiksi käyttäen scp-komentoa.
MATLAB-ympäristön laajentaminen
CSC:n MATLAB-asennus toimii Apptainer-säiliön sisällä.
Jos tarvitset ohjelmistoja, joita asennus ei tarjoa, kuten Python-tulkin, ylimääräisiä järjestelmäkirjastoja tai komentorivityökaluja, joita MATLAB-koodisi kutsuu, voit rakentaa oman säiliökuvasi CSC:n MATLAB-kuvan päälle ja käyttää sitä matlab-moduulin kanssa.
Koska MATLAB on saatavilla Roihu-CPU:ssa, rakenna säiliö Roihu-CPU:n kirjautumissolmulla tai Roihu-CPU:n laskentasolmulla. Katso yleiset ohjeet ja parhaat käytännöt säiliöiden rakentamiseen CSC:n supertietokoneilla kohdasta Säiliökuvien rakentaminen.
Määritystiedoston kirjoittaminen
Laajennamme CSC:n MATLAB-kuvaa käyttämällä sitä säiliön pohjakuvana eli käynnistämällä paikallisesta kuvasta. Voit nähdä polun kuvaan, jota tietty MATLAB-versio käyttää, seuraavasti:
MATLAB-kuva on rakennettu Rocky Linuxin päälle, joten asennamme ohjelmistot siihen DNF-paketinhallinnalla. Tässä on esimerkki MATLAB engine for Pythonin asentamisesta MATLAB-kuvan päälle:
Bootstrap: localimage
From: /appl/soft/manual/general/x86_64/matlab/r2026a/matlab.sif
%post
# Install Python
dnf install -y python3.11 python3.11-pip
# Install MATLAB engine into a virtual environment
cd /opt
python3.11 -m venv venv
. venv/bin/activate
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/matlab/bin/glnxa64
python3.11 -m pip install matlabengine
%environment
PATH=/opt/venv/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/matlab/bin/glnxa64
matlabengine-paketin täytyy vastata pohjakuvan MATLAB-versiota.
%environment-osio tuo virtuaaliympäristön ja MATLAB-kirjastot saataville ajonaikaisesti, jotta python3 viittaa virtuaaliympäristön Python-tulkkiin ja import matlab.engine löytää MATLAB-kirjastot.
Säiliön rakentaminen
Rakennamme säiliön määritystiedostosta (matlab.def) säiliökuvaksi (matlab.sif) käyttäen fakerootia.
MATLAB-kuva on suuri, joten rakenna se scratch-alueella (korvaa <project> omalla projektillasi) ja seuraa kiintiötäsi:
Rakentaminen kestää jonkin aikaa, koska Apptainerin täytyy kopioida ja pakata uudelleen koko pohjakuva.
Oman säiliön käyttäminen
Lataa sama MATLAB-versio, jota käytit pohjakuvana, ja osoita MATLAB_SIF_IMAGE-ympäristömuuttuja omaan kuvaasi:
Moduulin tarjoamat MATLAB-komennot suoritetaan nyt oman kuvasi sisällä:
Voimme myös ajaa muuta kuvaan asentamaamme ohjelmistoa matlab-apptainer-exec-komennolla:
Voimme esimerkiksi kutsua MATLABia Pythonista MATLAB-enginen avulla seuraavasti:
Huomaa, että CSC päivittää MATLAB-kuvia esimerkiksi soveltaakseen korjauspäivityksiä MATLAB-versioon. Jos pohjakuva muuttuu, sinun täytyy rakentaa oma kuvasi uudelleen, jotta muutokset tulevat mukaan.


