Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Ensimmäisen työsi ajaminen Puhdissa

Kirjautuminen

Valmistellaksesi ja ajaaksesi työsi sinun täytyy ensin kirjautua Puhtiin. Voit käyttää joko komentorivisovellusta tai erillistä pääteohjelmaa. Komentorivisovellukset kuuluvat vakiona useimpiin käyttöjärjestelmiin. Pääteohjelmat voidaan joutua asentamaan erikseen, mutta ne tarjoavat yleensä enemmän vaihtoehtoja esimerkiksi fonttikoon ja kopioi-liitä-toimintojen osalta.

Avaa Linuxissa tai macOS:ssa pääte. Avaa Windows 10:ssä Powershell. Anna komento:

ssh yourcscusername@puhti.csc.fi
Missä yourcscusername on CSC:ltä saamasi käyttäjätunnus.

Löydät tarkemmat ohjeet käyttöoppaastamme: Yhteyden muodostaminen CSC:n supertietokoneisiin.

Mikä Puhti on?

Puhti on, kuten useimmat nykyaikaiset HPC-järjestelmät (High Performance Computing), klusteritietokone. Tämä tarkoittaa, että siinä on pieni määrä kirjautumissolmuja ja suuri määrä laskentasolmuja.

Kun kirjaudut sisään, päädyt jompaankumpaan kahdesta kirjautumissolmusta. Kirjautumissolmut on tarkoitettu esimerkiksi datan siirtämiseen sekä eräajotöiden valmisteluun ja hallintaan. Varsinaisia töitä ei pidä ajaa kirjautumissolmuissa. Kirjautumissolmuja on vain kaksi, ja ne ovat kaikkien yhteiskäytössä. Suurten töiden ajaminen niissä voi tehdä järjestelmästä hitaan ja huonosti reagoivan kaikille käyttäjille (lisätietoja käyttöehdoissamme).

Työt tulee ajaa laskentasolmuissa. Tämä tehdään eräajojärjestelmän avulla, jota kutsutaan myös ajastimeksi tai kuormanhallintajärjestelmäksi. Puhdissa käytössä oleva järjestelmä on nimeltään Slurm.

Ajaaksesi työsi eräajojärjestelmän kautta käytät komentoa srun tai kirjoitat eräajotyöskriptin ja käytät komentoa sbatch. Käsittelemme tätä tarkemmin myöhemmin.

Jos haluat tarkistaa, millaisia laskentasolmuja Puhdissa on saatavilla, katso käyttöopas: Puhdin tekniset tiedot.

Ohjelmistoympäristö

Puhdissa on saatavilla valikoima yleisesti käytettyjä biotieteiden ohjelmistoja. Voit tarkistaa luettelon sivulta Sovellukset.

Sovellusluettelo ei välttämättä ole täysin ajan tasalla, joten on hyvä käyttää komentoa module spider nähdäksesi, onko jokin ohjelmisto (ja mikä versio siitä) saatavilla, esim.:

module spider bowtie2

Jotta eri sovellusten ja versioiden väliset ristiriidat vältetään, suurin osa Puhdin ohjelmistoista on asennettu moduuleina. Käyttääksesi sovellusta sinun täytyy ladata moduuli, esim.:

module load bowtie2
Voit myös määrittää tietyn version, esim.:
module load bowtie2/2.3.5.1
Jos et määritä versiota, oletusversio (yleensä uusin vakaa julkaisu) ladataan.

Tarjoamme myös moduulin, joka lataa kerralla useita yleisesti käytettyjä biotieteiden sovelluksia:

module load biokit
Helpoin tapa nähdä biokit-moduulin sisältö on ladata se ja tarkistaa luettelo.
module list

Nähdäksesi, mitä moduuleja tulee ladata, katso kunkin ohjelmiston ohjesivu.

Lisätietoja moduulijärjestelmästä löytyy käyttöoppaasta: Moduulijärjestelmä.

Työn suunnittelu

Ajaaksesi työn eräajojärjestelmän kautta sinun täytyy varata työlle sopivat resurssit, ts. ytimet, muisti ja aika. Tarvittavien resurssien arvioimiseksi sinun täytyy vastata muutamiin kysymyksiin:

Kuinka monta ydintä sovellukseni voi käyttää?

Ensin lyhyt huomio terminologiasta: Kotitietokoneista puhuttaessa ihmiset käyttävät yleensä termejä "prosessori" ja "ydin". Esimerkiksi useimmissa nykyaikaisissa kotitietokoneissa on yksi prosessori, jossa on kaksi tai useampia ytimiä. HPC-koneista puhuttaessa vastaavat termit ovat "socket" ja "CPU". Esimerkiksi Puhdin laskentasolmuissa on kaksi socketia, joissa kummassakin on 20 CPU:ta. Tässä ohjeessa käytetään termejä "prosessorit/ytimet", koska ne ovat todennäköisesti tutumpia ihmisille, joilla ei ole HPC-taustaa.

Sovellukset voidaan jakaa luokkiin sen mukaan, kuinka paljon ytimiä ne voivat käyttää:

  • Sarjalliset sovellukset
    • Voivat käyttää vain yhtä ydintä
    • Monet biotieteiden sovellukset kuuluvat tähän luokkaan
    • Jos sovelluksen käyttöohjeessa ei mainita käytettävien ytimien tai säikeiden määrää, sovellus on todennäköisesti sarjallinen
    • Useamman ytimen varaaminen ei nopeuta näitä sovelluksia, koska ne voivat käyttää vain yhtä
  • Jaetun muistin / säikeistetyt / OpenMP-sovellukset
    • Voivat käyttää useampaa kuin yhtä ydintä, mutta kaikkien ytimien täytyy olla samassa solmussa (eli Puhdissa enintään 40 ydintä)
    • Useimmat biotieteiden sovellukset, jotka voivat käyttää useampaa kuin yhtä ydintä, kuuluvat tähän luokkaan
    • Muista myös kertoa sovellukselle käytettävien ytimien määrä
    • Tarkista oikeat komentorivivalinnat sovelluksen dokumentaatiosta
    • Yleensä on parasta sovittaa ytimien määrä säikeiden määrään, mutta tarkista tämä sovelluksen dokumentaatiosta
  • MPI-rinnakkaissovellukset
    • Voivat käyttää useampaa kuin yhtä ydintä, eikä ytimien tarvitse olla samassa solmussa
    • Vain hyvin harvat biotieteiden sovellukset kuuluvat tähän luokkaan
  • Hybridit rinnakkaissovellukset
    • Työ, jossa jokaiselle MPI-tehtävälle varataan useita ytimiä. Kukin tehtävä käyttää sitten jotain muuta rinnakkaistusmenetelmää kuin MPI työn tekemiseen. Yleisin strategia on, että jokainen MPI-tehtävä käynnistää useita säikeitä OpenMP:n avulla.
    • Melko harvinaisia biotieteiden sovelluksissa

Selvittääksesi, mihin luokkaan sovelluksesi kuuluu, lue dokumentaatio.

On myös hyvä huomata, että useampi ydin ei automaattisesti tarkoita lyhyempää ajoaikaa. Liian monen ytimen varaaminen voi itse asiassa saada ohjelmiston toimimaan hitaammin. Optimaalinen ytimien määrä riippuu sovelluksesta, datasta ja tehtävästä analyysistä. Tarkista sovelluksen dokumentaatiosta, antavatko kehittäjät suosituksia. On myös hyvä ajatus tehdä testejä eri ydinmäärillä nähdäksesi, kuinka hyvin sovellus skaalautuu.

Kuinka paljon muistia sovellukseni tarvitsee?

Tarvittavan muistin arvioiminen voi olla melko vaikeaa. Monissa tapauksissa siihen vaikuttavat data ja valitut sovellusasetukset. Myös käytettyjen säikeiden määrä voi usein vaikuttaa muistivaatimuksiin.

Kannattaa lukea sovelluksen dokumentaatio nähdäksesi, antavatko kehittäjät arvioita. Usein on myös hyödyllistä tarkistaa käyttäjäfoorumit, jos ohjelmistolla sellainen on.

Usein, erityisesti kun sovellusta ajetaan ensimmäistä kertaa, täytyy vain tehdä arvio. Jos saat virheilmoituksen muistin loppumisesta, kasvata muistivarausta ja yritä uudelleen. Jos työ valmistuu, voit tarkistaa todellisen muistinkäytön ja käyttää sitä tulevien varausten pohjana.

Lisätietoja löytyy tästä UKK-kohdasta: Kuinka arvioin, kuinka paljon muistia eräajotyöni tarvitsee?

Kuinka paljon aikaa minun pitäisi varata?

Ajoajan tietäminen etukäteen voi myös olla vaikeaa, jos sovellus ei ole sinulle tuttu.

Varmista, että varaat riittävästi aikaa, sillä työ pysäytetään, kun aikavaraus loppuu, riippumatta siitä onko se valmis vai ei.

Toisaalta liian suuren ajan varaaminen ei ole kovin suuri ongelma. Työ päättyy, kun työn viimeinen tehtävä päättyy. Työsi kuluttaa laskutusyksiköitä (BUs) vain todellisen kuluneen ajan mukaan, ei varauksen mukaan.

On täysin hyväksyttävää varata käytettävän osion enimmäisaika, kun ajat sovellusta ensimmäistä kertaa. Kun työ on valmis, voit tarkistaa kuluneen ajan ja tehdä seuraavalla kerralla paremmin perustellun varauksen.

Työn ajaminen

Interaktiiviset työt

Interaktiiviset työt sopivat esimerkiksi testaukseen, pienten tehtävien ajamiseen ja ohjelmistoille, joissa on graafinen käyttöliittymä.

Kuten mainittiin, töitä ei pidä ajaa kirjautumissolmussa. Sen sijaan voit käyttää komentoa sinteractive avataksesi interaktiivisen komentotulkin:

sinteractive -i
Tarkemmat ohjeet löytyvät käyttöoppaasta: Interaktiivinen käyttö

Pidemmät ja enemmän resursseja vaativat työt kannattaa ajaa eräajotöinä.

Eräajotyöt

Eräajotyön ajamiseen kuuluu yleensä kolme vaihetta: 1. Varmista, että sinulla on kaikki tarvittavat syötetiedostot 1. Ohjeet datan siirtämiseen omalta tietokoneeltasi Puhtiin löydät käyttöoppaan osiosta Data/Datan siirtäminen 2. Kirjoita eräajotyöskripti 1. Käytä skriptin kirjoittamiseen tekstieditoria, kuten nanoa, vimiä tai emacsia 2. Jos kirjoitat skriptin omalla tietokoneellasi ja siirrät sen Puhtiin, on syytä olla huolellinen. Varmista, että se on tallennettu tekstinä, ei esimerkiksi Word-dokumenttina. Huomaa myös, että Windows käsittelee rivinvaihtoja eri tavalla kuin Linux, ja tämä voi aiheuttaa ongelmia. 3. Lähetä työ

Tässä on esimerkki eräajotyöskriptistä. Se on tallennettu nimellä myjobscript

#!/bin/bash
#SBATCH --job-name=bowtie2
#SBATCH --account=project_123456
#SBATCH --ntasks=1
#SBATCH --nodes=1  
#SBATCH --cpus-per-task=16
#SBATCH --mem=16g
#SBATCH --time=04:00:00
#SBATCH --partition=small

module load biokit
bowtie2 -p $SLURM_CPUS_PER_TASK -x genome -1 reads_1.fq -2 reads_2.fq > output.sam

Kaikki rivit, jotka alkavat merkinnällä #SBATCH, välitetään eräajojärjestelmälle. Niitä käytetään tarvittavien resurssien pyytämiseen.

Työn nimeä (--job-name) käytetään pääasiassa työn tunnistamiseen, esim. kun listataan töitä komennolla squeue tai tarkistetaan aiempia töitä komennolla sacct.

On välttämätöntä ilmoittaa järjestelmälle, mitä projektia tulee laskuttaa. Tämä tehdään valinnalla --account. Voit tarkistaa projektit, joihin kuulut, MyCSC:stä tai komentoriviltä komennolla csc-projects.

Bowtie2 on jaetun muistin sovellus. Kuten aiemmin käsiteltiin, tämä tarkoittaa, että se voi käyttää useampaa kuin yhtä ydintä, mutta kaikkien ytimien täytyy olla samassa solmussa. Määritämme, että haluamme ajaa yhden tehtävän (--ntask=1) yhdessä solmussa (--nodes=1) käyttäen 16 ydintä (--cpus-per-task):

#SBATCH --ntasks=1
#SBATCH --nodes=1  
#SBATCH --cpus-per-task=16

Koska kyseessä on jaetun muistin sovellus, voimme käyttää --mem-valintaa määrittämään tehtävälle pyydetyn kokonaismuistin. MPI-työssä muisti pitäisi pyytää ydintä kohden valinnalla --mem-per-cpu.

#SBATCH --mem=16G

Aikavaraus annetaan muodossa tunnit:minuutit:sekunnit, ts. hh:mm:ss. Tässä tapauksessa varaamme neljä tuntia:

#SBATCH --time=04:00:00

Meidän täytyy myös määrittää, missä osiossa (jota kutsutaan myös jonoksi) haluamme työn ajettavan. Tämä määritetään --partition-valinnalla. Useimmille biotieteiden töille "small" on oikea valinta. Se on tarkoitettu töille, jotka ajetaan yhden solmun sisällä.

#SBATCH --partition=small

Voit tarkistaa saatavilla olevat osiot käyttöoppaasta: Saatavilla olevat eräajotöiden osiot

Oletuksena erilaiset tulosteet ja virheilmoitukset, jotka tulostuisivat näytölle, jos sovellus ajettaisiin interaktiivisesti, tallennetaan tiedostoon slurm-<jobid>.out. Joskus on selkeämpää erottaa tulosteet ja virheet toisistaan. Tämä voidaan tehdä lisäämällä valinnat --output ja --error. %j korvataan tiedostonimessä työn jobid-tunnuksella.

#SBATCH --output=output_%j.txt
#SBATCH --error=errors_%j.txt

Saatavilla on myös muita valintoja. Tarkempi selitys löytyy käyttöoppaasta: Eräajotyöskriptin luominen Puhdille

Kun olet kirjoittanut eräajotyöskriptin, voit lähettää työn jonoon:

sbatch myjobscript
Jos työ lähetettiin onnistuneesti, sinun pitäisi nähdä viesti:
Submitted batch job <jobid>

Työ on mahdollista käynnistää suoraan komennolla srun antamalla #SBATCH-riveillä annetut valinnat suoraan komentorivivalintoina, mutta eräajotyöskriptin kirjoittaminen on yleensä parempi vaihtoehto selkeyden ja uudelleenkäytettävyyden vuoksi, jos haluat esim. lähettää samanlaisen työn eri datalla tai muokatuilla parametreilla.

Taulukkotyöt

Jos haluat ajaa useita saman komennon instansseja eri syötetiedostoilla tai eri parametrijoukoilla, kannattaa harkita niiden ajamista taulukkotyönä. Taulukkotyöt tarjoavat helpon tavan käynnistää ja hallita samankaltaisten töiden ryhmää.

Taulukkotöiden ajaminen on kuvattu yksityiskohtaisesti käyttöoppaassa: Taulukkotyöt

Töiden hallinta

Voit tarkistaa nykyiset työsi, sekä käynnissä olevat että jonossa olevat:

squeue -u <username>
Tai saada hieman yksityiskohtaisemman listauksen komennolla:
squeue -l -u <username>
Voit tarkistaa työsi tilan sarakkeesta ST tai STATUS (riippuen siitä, käytetäänkö valintaa -l vai ei). R tai RUNNING tarkoittaa, että työ on parhaillaan käynnissä. P tai PENDING tarkoittaa, että se odottaa edelleen jonossa.

Jos työ on jonossa, voit nähdä syyn sarakkeesta NODELIST(REASON).

Syy:

(Resources)
tai
 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions)
tarkoittaa, että tällä hetkellä ei ole saatavilla resursseja työsi ajamiseen. Työ ajetaan heti, kun resursseja vapautuu.

Syy:

(Priority)
tarkoittaa, että eräajojärjestelmän fair share -toiminnallisuus pitää työtäsi takana: kun käyttäjä ajaa paljon töitä lyhyessä ajassa, hänen töidensä prioriteetti laskee. Nämä työt viettävät hieman pidempään jonossa, mutta ne ajetaan lopulta.

Jonotusaika riippuu järjestelmän kokonaiskuormasta (ts. kuinka monta työtä on jonossa ennen sinun työtäsi) sekä töidesi resurssivaatimuksista.

Jos tuntuu, että työsi jonottavat pitkään, kannattaa tutustua tähän UKK-kohtaan: Miksi eräajotyöni jonottaa niin pitkään?

On myös muita syitä, mutta ne ovat harvinaisempia. Ota tarvittaessa yhteyttä osoitteeseen servicedesk@csc.fi.

Voit peruuttaa lähetetyn eräajotyön komennolla:

scancel <jobid>

Resurssien käytön seuranta

Kun työ on päättynyt, voit käyttää komentoja seff ja sacct tarkistaaksesi, mitä resursseja työ todellisuudessa käytti.

seff <jobid>

Tärkeimmät tarkistettavat asiat ovat CPU-tehokkuus ja muistin käyttöaste.

Monet asiat voivat aiheuttaa heikon CPU-tehokkuuden. Se voi esimerkiksi viitata siihen, että ohjelma odottaa levyoperaatioiden valmistumista. Tällaisissa tapauksissa kannattaa harkita solmun käyttöä, jossa on nopea paikallinen levy. Lisätietoja löytyy käyttöoppaasta: Eräajotyöskriptin luominen Puhdille

Heikko tehokkuus voi johtua myös siitä, että on varattu useampi kuin yksi ydin ja sovellus skaalautuu huonosti. Tarkista erityisesti, vastaako prosenttiosuus varattujen ytimien määrää, esim. 25 % neljällä ytimellä tai 12,5 % kahdeksalla ytimellä jne. Tämä johtuu tyypillisesti siitä, että sovellus käyttää vain yhtä ydintä. Tarkista, voiko sovellus todella käyttää useampaa kuin yhtä ydintä, tai onko vastaava sovellusparametri asetettu oikein.

CPU Efficiency: 12.48% of 06:56:08 core-walltime

Tarkista myös todellinen käytetty muisti ja aseta seuraavan ajon muistivaraus sen mukaisesti, mutta jätä hieman turvamarginaalia, esimerkiksi muutama gigatavu. Esimerkiksi seuraavassa työssä muistipyyntö on ollut aivan liian suuri (92 GB pyydetty vs. 6 GB käytetty).

Memory Utilized: 5.98 GB
Memory Efficiency: 6.25% of 92.59 GB

Toinen komento aiempien töiden tilan ja resurssien käytön tarkistamiseen on sacct. Se on kätevä, kun haluat nähdä monen työn tiedot (esim. kaikki taulukkotyön alityöt). Komento seff näyttää vain yhden työn kerrallaan.

sacct
Oletuksena näytettävät tiedot sisältävät töiden tilan (PENDING/RUNNING/COMPLETED/FAILED) sekä jobid-tunnuksen.

Voit myös määrittää näytettävät kentät valinnalla -o:

sacct -o jobid,jobname,ntasks,ReqNodes,allocnodes,reqcpus,alloccpus,reqmem,maxrss,timelimit,elapsed,state -j <jobid>
Oletuksena sacct näyttää vain kuluvana päivänä ajetut työt. Voit valita aloituspäivän valinnalla -S.
sacct -S <YYYY-MM-DD>
Huomaa, että sacct-komento kuormittaa jonotusjärjestelmää paljon, joten älä rakenna skriptejä, jotka ajavat sitä toistuvasti.

Vianmääritys

Uuteen ohjelmaan tutustuminen

Tässä on muutamia hyödyllisiä vaiheita, kun tutustut uuteen ohjelmaan.

  • Lue käyttöohje
  • Voi olla hyödyllistä kokeilla ohjelman ajamista ensin interaktiivisesti oikeiden komentorivivalintojen löytämiseksi
    • Tämä mahdollistaa top-komennon käytön karkean muistinkäyttöarvion ym. saamiseksi
  • Jos kehittäjät tarjoavat testidataa tai esimerkkidataa, aja se ensin
    • Varmista, että tulokset ovat odotetunlaiset
  • Voit käyttää testiosiota eräajotyöskriptisi tarkistamiseen
    • Rajat: 15 min, 2 solmua
    • Töiden läpimenoaika on yleensä erittäin nopea
    • Tästä voi olla hyötyä kirjoitusvirheiden, puuttuvien tiedostojen jne. havaitsemisessa ennen sellaisen työn lähettämistä, joka jonottaa pitkään
  • Ennen erittäin suuria ajoja on hyvä tehdä pienempi koeaajo
    • Tarkista, että tulokset ovat odotetunlaiset
    • Tarkista resurssien käyttö testiajon jälkeen ja säädä asetuksia sen mukaisesti
    • Kokeile eri ydinmääriä ja katso, miten ohjelmisto skaalautuu

Vianmäärityksen tarkistuslista

Aloita näistä, jos työsi epäonnistuu:

  1. Loppuiko työltä aika?
  2. Loppuiko työltä muisti?
  3. Käyttikö työ todella määrittämiäsi resursseja?
    • Eräajotyöskriptin ongelmat voivat aiheuttaa sen, että parametrit ohitetaan ja niiden sijaan käytetään oletusarvoja
  4. Epäonnistuiko työ heti vai ajoiko se jonkin aikaa?
    • Heti epäonnistuvat työt johtuvat usein jostain yksinkertaisesta, kuten kirjoitusvirheistä komentorivillä, puuttuvista syötteistä, virheellisistä parametreista jne.
  5. Tarkista eräajotyöskriptin talteen ottama virhetiedosto
  6. Tarkista muut mahdolliset virhetiedostot ja lokit, joita ohjelma on voinut tuottaa
  7. Virheilmoitukset voivat joskus olla pitkiä, kryptisiä ja hieman pelottavia, mutta yritä silmäillä niitä läpi ja katsoa, löydätkö jotain ”ihmisen luettavaa” ”nörtin luettavan” sijaan
    • Usein varsinainen ongelma löytyy helposti, jos käyt koko viestin läpi. Esimerkiksi jotain tyyliin ”vaadittu syötetiedosto se-ja-se puuttuu” tai ”parametri X on sallitun alueen ulkopuolella” jne.

Jos et saa asiaa selville, älä epäröi ottaa meihin yhteyttä osoitteessa servicedesk@csc.fi. Muista liittää mukaan olennaiset tiedot, kuten mitä ohjelmaa yritit ajaa ja millä palvelimella jne.

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta