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 computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Eräajotyöskriptin luominen Puhdissa

Eräajotyöskripti sisältää määrittelyt työlle varattavista resursseista sekä komennot, jotka käyttäjä haluaa suorittaa.

Puhti computing services have been retired

Puhti computing services have been retired and no new jobs are accepted or executed on its compute nodes. Any jobs sent through Slurm will be stuck in a pending state.

Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Yksinkertainen eräajotyöskripti

Esimerkki yksinkertaisesta eräajotyöskriptistä:

#!/bin/bash
#SBATCH --job-name=myTest           # Job name
#SBATCH --account=<project>         # Billing project, has to be defined!
#SBATCH --time=02:00:00             # Max. duration of the job
#SBATCH --mem-per-cpu=2G            # Memory to reserve per core
#SBATCH --partition=small           # Job queue (partition)
##SBATCH --mail-type=BEGIN          # Uncomment to enable mail

module load myprog/1.2.3            # Load required modules

srun myprog -i input -o output      # Run program using requested resources

Ensimmäinen rivi #!/bin/bash kertoo, että tiedosto tulee tulkita Bash-skriptinä.

Rivit, jotka alkavat merkinnällä #SBATCH, ovat eräajojärjestelmän argumentteja (direktiivejä). Näissä esimerkeissä käytetään vain pientä osaa valinnoista. Luettelo kaikista mahdollisista valinnoista löytyy Slurmin dokumentaatiosta.

#SBATCH-valinnan yleinen syntaksi on:

#SBATCH option_name argument

Esimerkissämme

#SBATCH --job-name=myTest

asettaa työn nimeksi myTest. Nimeä voidaan käyttää työn tunnistamiseen jonossa ja muissa listauksissa.

#SBATCH --account=<project>

asettaa työn laskutusprojektin. Korvaa <project> projektisi Unix-ryhmällä. Löydät sen MyCSC:stä välilehdeltä Projects. Lisätietoja laskutuksesta.

Muista määrittää laskutusprojekti

Laskutusprojektiargumentti on pakollinen. Jos sitä ei aseteta, seurauksena on virhe:

sbatch: error: AssocMaxSubmitJobLimit
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user's size and/or time limits)

Ajoaikavaraus asetetaan valinnalla --time:

#SBATCH --time=02:00:00

Aika annetaan muodossa hh:mm:ss (vaihtoehtoisesti d-hh:mm:ss, missä d tarkoittaa päiviä). Enimmäisajoaika riippuu valitusta jonosta. Kun aikavaraus päättyy, työ lopetetaan riippumatta siitä, onko se valmistunut vai ei, joten aikavarauksen tulee olla riittävän pitkä. Huomaa, että työ kuluttaa laskutusyksiköitä (BUs) todellisen ajoaikansa mukaan.

#SBATCH --mem-per-cpu=2G

asettaa vaaditun muistin jokaista pyydettyä CPU-ydintä kohti. Jos pyydetty muistimäärä ylittyy, työ lopetetaan.

Osio (jono) täytyy asettaa työn vaatimusten mukaisesti. Esimerkiksi:

#SBATCH --partition=small

Käyttäjälle voidaan lähettää sähköposti-ilmoitus, kun työ alkaa, käyttämällä valintaa --mail-type

##SBATCH --mail-type=BEGIN          # Uncomment to enable mail

Muita hyödyllisiä argumentteja (useat argumentit erotetaan pilkulla) ovat END ja FAIL. Oletuksena sähköposti lähetetään CSC-käyttäjätiliisi liitettyyn sähköpostiosoitteeseen. Tämän voi ohittaa valinnalla --mail-user=.

Kun kaikki tarvittavat resurssit on määritelty eräajotyöskriptissä, määritä tarvittava ympäristö lataamalla sopivat moduulit. Huomaa, että jotta moduulit ovat käytettävissä eräajotöissä, ne täytyy ladata eräajotyöskriptissä. Lisätietoja ympäristömoduuleista.

module load myprog/1.2.3

Lopuksi käynnistämme sovelluksen pyydetyillä resursseilla komennolla srun:

srun myprog -i input -o output

Sarjalliset ja jaetun muistin eräajotyöt

Sarjalliset ja jaetun muistin työt täytyy suorittaa yhden laskentasolmun sisällä. Siksi töitä rajoittavat solmuissa उपलब्ध olevat laitteistomääritykset. Puhdissa jokaisessa solmussa on kaksi prosessoria, joissa kummassakin on 20 ydintä, eli yhteensä 40 ydintä. Katso lisää Puhdin teknisiä tietoja.

#SBATCH-valintaa --cpus-per-task käytetään määrittämään, kuinka monta laskentaydintä eräajotyön tehtävä käyttää. Valinta --nodes=1 varmistaa, että kaikki varatut ytimet sijaitsevat samassa solmussa, ja --ntasks=1 osoittaa kaikki varatut laskentaytimet samalle tehtävälle.

Säiepohjaisissa töissä muistivaraukseen suositellaan valintaa --mem. Tämä valinta määrittää tarvittavan muistimäärän solmua kohti. Huomaa, että jos käytät sen sijaan valintaa --mem-per-cpu, työn kokonaismuistipyyntö on CPU-ydintä kohti pyydetty muistimäärä (--mem-per-cpu) kerrottuna varattujen ytimien määrällä (--cpus-per-task). Siksi, jos muutat ytimien määrää, tarkista myös, että muistivaraus on sopiva.

Yleensä tehokkain käytäntö on sovittaa varattujen ytimien määrä (--cpus-per-task) vastaamaan sovelluksen käyttämien säikeiden tai prosessien määrää. Tarkista kuitenkin aina sovelluskohtaiset tiedot.

Jos sovelluksessa on komentorivivalinta säikeiden/prosessien/ytimien määrän asettamiseen, sitä tulisi aina käyttää, jotta ohjelmisto toimii odotetusti. Jotkin sovellukset käyttävät oletuksena vain yhtä ydintä, vaikka useampia olisi varattu.

Toiset sovellukset saattavat yrittää käyttää kaikkia solmun ytimiä, vaikka vain osa niistä olisi varattu. Ympäristömuuttujaa $SLURM_CPUS_PER_TASK, joka sisältää valinnan --cpus-per-task arvon, voidaan käyttää numeron sijasta määritettäessä käytettävien ytimien määrää. Tämä on hyödyllistä, koska komentoa ei tarvitse muuttaa, jos --cpus-per-task muuttuu myöhemmin.

Lopuksi käytä ympäristömuuttujaa OMP_NUM_THREADS asettamaan sovelluksen käyttämien säikeiden määrä. Esimerkiksi

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

MPI-pohjaiset eräajotyöt

MPI-töissä jokaisella tehtävällä on oma muistivarauksensa. Siksi tehtävät voidaan jakaa useille solmuille.

Aseta MPI-tehtävien määrä seuraavasti:

#SBATCH --ntasks=<number_of_mpi_tasks>

Muistin pyytämiseen suositellaan valintaa --mem-per-cpu.

MPI-ohjelmien suorittaminen

  • MPI-ohjelmia ei pidä käynnistää komennoilla mpirun tai mpiexec. Käytä sen sijaan komentoa srun.
  • MPI-moduuli täytyy ladata eräajotyöskriptissä, jotta ohjelma toimii oikein.

Hybridieräajotyöt

Hybriditöissä jokaiselle tehtävälle varataan useita ytimiä. Kukin tehtävä käyttää sitten työn suorittamiseen jotakin muuta rinnakkaistusta kuin MPI:tä. Yleisin strategia on, että jokainen MPI-tehtävä käynnistää useita säikeitä OpenMP:n avulla. Jos haluat pyytää enemmän ytimiä MPI-tehtävää kohti, käytä argumenttia --cpus-per-task. Oletusarvo on yksi ydin tehtävää kohti.

Tehtävien määrän ja tehtävää kohti varattujen ytimien optimaalinen suhde vaihtelee sovelluksittain. Oikean yhdistelmän löytämiseksi sovelluksellesi tarvitaan testausta.

Säikeitä tehtävää kohti hybridi MPI/OpenMP -töissä

Aseta OpenMP-säikeiden määrä MPI-tehtävää kohti eräajotyöskriptissäsi käyttämällä ympäristömuuttujia OMP_NUM_THREADS ja SLURM_CPUS_PER_TASK:

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

Lisäresurssit eräajotöissä

Paikallinen tallennustila

Joissakin Puhdin solmuissa on töille saatavilla nopeaa paikallista tallennustilaa (NVMe). Paikallisen tallennustilan käyttöä suositellaan I/O-intensiivisille sovelluksille eli töille, jotka esimerkiksi lukevat ja kirjoittavat paljon pieniä tiedostoja. Katso lisätietoja.

Paikallista tallennustilaa on saatavilla:

  • GPU-solmuissa osioissa gpu ja gputest (enintään 3600 GB per solmu)
  • I/O-solmuissa, joita käyttävät osiot small, large, longrun ja interactive (enintään 1490/3600 GB per solmu)
  • BigMem-solmuissa osioissa hugemem ja hugemem_longrun (enintään 5960 GB per solmu)

Pyydä paikallista tallennustilaa eräajotyöskriptissä lipulla --gres:

#SBATCH --gres=nvme:<local_storage_space_per_node_in_GB>

Tilamäärä annetaan gigatavuina (tarkista enimmäiskoot yllä olevasta listasta). Esimerkiksi pyytääksesi 100 GB tallennustilaa käytä valintaa --gres=nvme:100. Paikallisen tallennustilan varaus tehdään solmukohtaisesti.

Käytä ympäristömuuttujaa $LOCAL_SCRATCH eräajotyöskripteissäsi päästäksesi käsiksi kunkin solmun paikalliseen tallennustilaan. Esimerkiksi suuren aineistopaketin purkamiseen paikalliseen tallennustilaan:

tar xf my-large-dataset.tar.gz -C $LOCAL_SCRATCH

Muista palauttaa datasi

Työllesi varattu paikallinen tallennustila tyhjennetään työn päätyttyä. Siksi, jos kirjoitat dataa paikalliselle levylle työn aikana, muista siirtää kaikki säilytettäväksi haluamasi tiedot työn lopussa jaetulle levyalueelle. Erityisesti datan siirtämiseen tarvittavat komennot on annettava eräajotyöskriptissä, koska et voi enää käyttää paikallista tallennustilaa eräajotyön päätyttyä. Esimerkiksi joidenkin tulostietojen kopioimiseksi takaisin hakemistoon, josta eräajotyö lähetettiin:

mv $LOCAL_SCRATCH/my-important-output.log $SLURM_SUBMIT_DIR

GPU:t

Puhdissa on 320 Nvidia Tesla V100 GPU:ta. GPU:t ovat saatavilla osioissa gpu ja gputest, ja niitä voidaan pyytää seuraavasti:

#SBATCH --gres=gpu:v100:<number_of_gpus_per_node>

--gres-varaus tehdään solmukohtaisesti. Kussakin GPU-solmussa on 4 GPU:ta.

Useita resursseja voidaan pyytää pilkuilla erotetulla listalla. Jos haluat pyytää sekä GPU:n että paikallista tallennustilaa:

#SBATCH --gres=gpu:v100:<number_of_gpus_per_node>,nvme:<local_storage_space_per_node>

Esimerkiksi yhden GPU:n ja 10 GB NVMe-tallennustilan pyytämiseen valinta olisi --gres=gpu:v100:1,nvme:10.

Lisätietoja

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta