Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

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 suljettu 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. Sinulla täytyy olla voimassa oleva lisenssi jokaiseen 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.

  1. 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 Roihussa, Mahdissa ja LUMIssa.

  2. 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 Roihussa, Mahdissa ja LUMIssa.

  3. 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 Roihussa.

Kaikki vaihtoehdot tukevat MATLAB-versioita R2023b–R2026a.

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 ja Mahtiin: 5 MATLAB, 2 Parallel Computing Toolbox, 500 MATLAB Parallel Server. Akateeminen lisenssi sallii käytön vain suomalaisten korkeakoulujen 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 kaupallisen yrityksen tai tutkimuslaitoksen käyttäjä, sinun täytyy tuoda ja käyttää omaa kaupallista lisenssiäsi. Ole yhteydessä CSC:n asiakastukeen saadaksesi lisäohjeita.

MATLAB-selainsovellus

MATLAB web application

Suosittelemme käyttämään selainkäyttöliittymää MATLABin interaktiiviseen käyttöön.

  1. Aloita kirjautumalla sen klusterin selainkäyttöliittymään, jota haluat käyttää: www.roihu.csc.fi, www.mahti.csc.fi tai www.lumi.csc.fi.

  2. Paina sitten MATLAB-kuvaketta valitaksesi MATLAB-selainsovelluksen.

    • MATLAB OOD pinned apps
  3. Valitse lähetyslomakkeessa istunnollesi sopivat resurssit. Suosittelemme vähintään 8 Gt muistia ennen MATLAB-sovelluksen käynnistämistä. MATLAB-selainsovellus itsessään kuluttaa noin 4 Gt muistia.

    • MATLAB OOD form
  4. 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 license GUI
  5. 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:

  1. Avaa selainkäyttöliittymässä Login node shell -sovellus.
  2. Suorita seuraava komento poistaaksesi välimuistiin tallennetut tunnistetiedot:
    rm -rf "$HOME/.matlab/MWI"
    

MATLAB-komentorivikäyttöliittymä

Roihussa ja Mahdissa voit ladata MATLAB-moduulin seuraavasti:

module load matlab

LUMIssa sinun täytyy lisätä CSC:n paikallisen hakemiston moduulitiedostot moduulipolkuun ennen moduulin lataamista seuraavasti:

module use /appl/local/csc/modulefiles
module load matlab

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:

matlab -nodisplay -licmode online

Käyttö Online Licensingin (OLL) kautta:

matlab -nodisplay -licmode onlinelicensing

Vaihtoehtoisesti voit käyttää lisenssiä, johon ympäristömuuttujan MLM_LICENSE_FILE arvo osoittaa; oletusarvoisesti tämä on CSC:n tarjoama akateeminen lisenssi:

matlab -nodisplay

Voit myös ajaa MATLAB-skriptejä erätilassa seuraavasti:

matlab -batch <script>

Voit käyttää eri lisenssiä asettamalla seuraavan ympäristömuuttujan ennen MATLABin käynnistämistä:

export MLM_LICENSE_FILE="port@mylicenseserver.com"

Laskentasäikeet ja Parallel Computing Toolbox

MATLABin lineaarialgebraoperaatioissa, suurten taulukoiden alkioittaisissa operaatioissa ja sisäänrakennetuissa matemaattisissa operaatioissa on sisäänrakennettu säikeistys, jota ohjataan maxNumCompThreads-asetuksella. 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:

compthreads.m
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 rinnakkaistaa koodia MATLABissa myös käyttämällä korkean tason rakenteita Parallel Computing Toolboxista. Tarkastellaan seuraavaa sarjallista koodia, joka pysähtyy yhdeksi sekunniksi n kertaa ja mittaa suoritusaikaa:

funcSerial.m
function t = funcSerial(n)
t0 = tic;
for idx = 1:n
    pause(1);
end
t = toc(t0);
end

Seuraavan sarjallisen suorituksen pitäisi kestää noin kaksi sekuntia:

t_serial = funcSerial(2)

Voimme rinnakkaistaa funktion käyttämällä rinnakkaista for-silmukkarakennetta parfor seuraavasti:

funcParallel.m
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 sarjallinen versio, mutta sen pitäisi kestää vain noin yksi sekunti:

funcProcesses.m
function t = funcProcesses(n)
pool = parpool('Processes', n);
t = funcParallel(n);
delete(pool);
end
t_processes = funcProcesses(2)

Tässä sama säikeitä käyttävällä rinnakkaispoolilla:

funcThreads.m
function t = funcThreads(n)
pool = parpool('Threads', n);
t = funcParallel(n);
delete(pool);
end
t_threads = funcThreads(2)

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:

funcGPU.m
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:

C = funcGPU(1000);

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:

Integration scripts

Roihu-CPU:lle tarkoitetut integraatioskriptit mps_roihu.zip eivät ole vielä saatavilla. Ne tulevat saataville pian!

mps_roihu.m
% 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.

configCluster.m
configCluster();

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.

testConnection.m
c = parcluster();
cscWorkspaces(c);

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.

Yhden solmun sarjalliset, rinnakkaiset ja GPU-työt

Määritämme resurssivarauksen käyttämällä parcluster-funktiota ja lähetämme funktion tai skriptin klusteriin käyttämällä 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ävissä töissä. Voit käyttää seuraavia esimerkkejä; korvaa vain <project> projektillasi, kuten project_2001234, ja muokkaa resurssivarausta tarpeidesi mukaan.

serial.m
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);
parallel.m
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);
gpu.m
c = parcluster();
c.AdditionalProperties.ComputingProject = '<project>';  % --account=<ComputingProject>
c.AdditionalProperties.Partition = 'gpu';               % --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 = 'v100';                % --gres=gpu:<GPUCard>:<GPUsPerNode>
c.AdditionalProperties.GPUsPerNode = 1;
j = batch(c, @funcGPU, 1, {1000}, 'CurrentFolder', '.', 'AutoAddClientPath', false);

Esimerkissä asetamme työhakemistoksi klusterin kotihakemiston asettamalla 'CurrentFolder' arvoksi '.'. Lisäksi meidän kannattaa estää MATLABia lisäämästä paikallista MATLAB-hakupolkua etäworkereille asettamalla 'AutoAddClientPath' arvoksi false. Nämä esimerkit varaavat klusterilta 1 MATLAB Parallel Server -lisenssin työn ajaksi.

Monisolmutyöt

Warning

Monisolmutyöt eivät näytä toimivan versiossa R2025a.

Voimme myös luoda workereista rinnakkaispoolin asettamalla 'Pool'-argumentiksi niiden workereiden määrän, jotka 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:

pool.m
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 workeripoolin hallintaan. Tämä esimerkki varaa klusterilta 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 tarkastelu

Hae viite parcluster-olioon:

c = parcluster();

Hae viimeiset 5 työtä:

c.Jobs(end-4:end)

Hae työ sen tunnisteen perusteella:

j = c.findJob('ID', 11);

Voimme hakea valmiin työn funktion tulosteet seuraavasti:

result = j.fetchOutputs()

Voimme lukea työn tulosteen seuraavasti:

diary(j)

Voimme myös tarkastella työn tehokkuutta:

seff(j)

Klusterissa tiedostoihin kirjoitettu data täytyy hakea suoraan tiedostojärjestelmästä, esimerkiksi käyttämällä scp-komentoa.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta