Hyppää sisältöön

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

Warning!

Puhti and Mahti will be decommissioned after Roihu becomes available. Users should clean up unnecessary files and move any required data by the end of August 2026. See the Roihu data preparation instructions for details.

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

Suuren läpimenon laskenta ja työnkulut

Suuren läpimenon laskenta (high-throughput computing, HTC) tarkoittaa suuren työmäärän ajamista, usein automatisoinnin, skriptien ja työnkulunhallintatyökalujen avulla. Työnkulkujen automatisointi säästää ihmisten aikaa ja vähentää manuaalisia virheitä. Työnkulut ovat usein hyvin sovelluskohtaisia, eikä tiettyyn käyttötapaukseen useinkaan löydy menetelmää, joka toimisi suoraan sellaisenaan.

Tällä sivulla esitellään joitakin keskeisiä asioita, jotka kannattaa ottaa huomioon suuren läpimenon työnkulkuja suunniteltaessa, ja autetaan rajaamaan oikea työkalukokonaisuus omaan käyttötapaukseesi. Valitsemalla huolellisesti sopivimman teknologiapinon työsi odottavat vähemmän jonossa, IO-operaatiot ovat tehokkaampia ja koko HPC-järjestelmän suorituskyky pysyy vakaana ja nopeana kaikille käyttäjille.

Yleiset ohjeet

Suuren läpimenon töiden ajaminen ja hallinta

Sisältääkö työnkulkusi huomattavan määrän (lyhyitä) eräajoja? Tämä on suuren läpimenon laskennan tyypillinen piirre, josta käytetään usein nimitystä "task farming". Se aiheuttaa kuitenkin ongelmia eräajojen ajastimille, kuten HPC-järjestelmissä käytettävälle Slurmille. Suuri määrä töitä (sbatch-komennolla käynnistettynä) ja työvaiheita (srun-komennolla käynnistettynä) tuottaa liikaa lokidataa ja hidastaa Slurmia. Lyhyissä töissä on myös suuri ajastuksen yleiskustannus, mikä tarkoittaa, että kasvava osa ajasta kuluu todellisuudessa jonossa laskennan sijaan.

Jotta suuren läpimenon laskenta olisi mahdollista ilman yllä kuvattuja ongelmia, työt ja työvaiheet tulisi pakata niin, että ne voidaan suorittaa mahdollisimman vähillä sbatch- ja srun-kutsuilla. Ensimmäinen ja paras vaihtoehto on tarkistaa, onko käyttämässäsi ohjelmistossa sisäänrakennettu vaihtoehto farming-tyyppisille kuormille. Tämä koskee esimerkiksi sovelluksia CP2K, GROMACS, LAMMPS, Python ja R.

Jos ohjelmistossasi ei ole integroitua tukea farming-tyyppisille kuormille, toinen vaihtoehto on käyttää ulkoisia työkaluja, kuten HyperQueue tai GNU Parallel. Huomaa, että jotkin työkalut, esimerkiksi FireWorks, luovat edelleen paljon työvaiheita, vaikka ne saattavatkin mahdollistaa kätevän tavan pakata mahdollisesti toisistaan riippuvat alitehtäväsi suoritettavaksi yhtenä eräajona.

Huomio

Sinun ei tarvitse käyttää srun-komentoa, jos aiot ajaa sarjallisia töitä osana HTC-työnkulkuasi. Monia työvaiheita voidaan välttää yksinkertaisesti poistamalla tarpeettomat srun-kutsut.

Voit käyttää alla olevaa vuokaaviota sopivimpien teknologioiden rajaamiseen suuren läpimenon laskennan työnkulkuasi varten. Huomaa, että tämä ei ole täydellinen lista, ja myös muut työkalut voivat sopia käyttötapaukseesi. Nämä työkalut toimivat yleensä hyvin HTC-käyttötapauksissa, joissa on noin 100 alitehtävää (tai jopa enemmän, jos alitehtävät käyttävät enintään yhtä solmua kukin, ks. HyperQueue). Jos työnkulkusi sisältää satoja tai tuhansia monisolmuisia alitehtäviä, ota yhteyttä CSC:n asiakastukeen, sillä tämä voi vaatia erityisratkaisuja. Älä kuitenkaan epäröi ottaa meihin yhteyttä myös muissa työnkulun toteutukseen liittyvissä kysymyksissä.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '0.6rem'}}}%%
graph TD
    C(Does your software have a built-in HTC option?) -->|Yes| D("Use if suitable for use case:<br><a href='/support/tutorials/gromacs-throughput/'>GROMACS</a>, <a href='/apps/cp2k/#high-throughput-computing-with-cp2k'>CP2K</a>, <a href='/apps/lammps/#high-throughput-computing-with-lammps'>LAMMPS</a>, <a href='/apps/amber/#high-throughput-computing-with-amber'>Amber</a>,<br> Python, R ")
    C -->|No| E(Single- or multi-node subtasks?)
    E -->|Single| F(Dependencies between subtasks?)
    E -->|Multi-node| G(<a href='/computing/running/fireworks/'>FireWorks</a>)
    F -->|Yes| J(<a href='https://snakemake.readthedocs.io/en/stable/'>Snakemake</a><br><a href='/support/tutorials/nextflow-tutorial/'>Nextflow</a><br><a href='/computing/running/fireworks/'>FireWorks</a>)
    F -->|No| K(<a href='/support/tutorials/many/'>GNU Parallel</a><br><a href='/computing/running/array-jobs/'>Array jobs</a><br><a href='/apps/hyperqueue/'>HyperQueue</a>)

Alla esitetään laadullinen yleiskuva joidenkin CSC:n suosittelemien HTC-työkalujen ominaisuuksista ja kyvykkyyksistä.

Nextflow Snakemake HyperQueue FireWorks Array jobs GNU Parallel
Ei liiallista IO:ta Partial/caveat/uncertain Partial/caveat/uncertain Yes Partial/caveat/uncertain Yes Yes
Pakkaa työt/työvaiheet Partial/caveat/uncertain Yes Partial/caveat/uncertain Partial/caveat/uncertain No NA
Helppo ottaa käyttöön Yes Yes Yes Partial/caveat/uncertain Yes Yes
Riippuvuuksien tuki Yes Yes No Yes No No
Automaattinen kontti-integraatio Yes Yes Yes Yes No No
Virheistä palautuminen Yes Yes No Yes No Yes
MPI/OpenMP-rinnakkaiset alitehtävät Partial/caveat/uncertain Partial/caveat/uncertain Yes Yes Yes No
Slurm-integraatio Partial/caveat/uncertain Partial/caveat/uncertain Partial/caveat/uncertain Partial/caveat/uncertain Yes Partial/caveat/uncertain
Moniosiotuki Partial/caveat/uncertain Partial/caveat/uncertain ? ? No No

Syöte-/tulostustehokkuus

Usein monia rinnakkaisia töitä ajettaessa esiin nousee syöte-/tulostustehokkuuden (IO) ongelma. Jos teet paljon IO-operaatioita (tiedostojen lukemista ja kirjoittamista) suuren läpimenon työnkuluissasi, sinun kannattaa kiinnittää erityistä huomiota siihen, missä nämä operaatiot suoritetaan. CSC:n supertietokoneissa käytetään Lustre-järjestelmää rinnakkaisena hajautettuna tiedostojärjestelmänä. Se on suunniteltu suurten tiedostojen tehokkaaseen rinnakkaiseen IO:hon, mutta monien pienten tiedostojen kanssa IO:sta tulee nopeasti pullonkaula. On tärkeää huomata, että intensiiviset IO-operaatiot voivat heikentää tiedostojärjestelmän suorituskykyä kaikille käyttäjille, ja siksi ne tulisi siirtää pois Lustresta.

Jos sinun täytyy lukea ja kirjoittaa tuhansia tiedostoja HTC-työnkulussasi, käytä:

  • Nopea paikallinen NVMe-levy Puhdissa ja Mahdissa
  • Ramdisk (/dev/shm) Mahdin CPU-osioilla, kun käytössä on solmukohtainen varaus (vain jos tiedät mitä teet!)
  • Jos sovelluksesi voidaan ajaa Singularity-konttina, toinen hyvä vaihtoehto on liittää aineistosi SquashFS:llä. SquashFS-kuvan luominen aineistostasi, joka voi koostua tuhansista tiedostoista, vähentää sen Lustren näkökulmasta yhdeksi tiedostoksi. Kuvan liittäminen Singularity-suoritukseen saa sen kuitenkin näkymään tavallisena hakemistona kontin sisällä.
  • Jos sinun on pakko käyttää Lustrea paljon IO:ta vaativiin tehtäviin, varmista että hyödynnät tiedostojen stripeausta

Ajoitpa HTC-työnkulkuja tai et, toinen tärkeä IO-tehokkuuteen vaikuttava tekijä on se, miten sovelluksesi on asennettu. CSC on poistanut käytöstä Conda-ympäristöjen suoran käytön niiden tuottaman valtavan tiedostomäärän vuoksi. Suuri osa näistä tiedostoista luetaan aina, kun Conda-sovellus käynnistetään, mikä aiheuttaa liiallista kuormaa Lustrelle ja hidastumisia koko järjestelmässä. Conda-ympäristöt ja muut sovellukset, jotka lukevat käynnistyessään tuhansia tiedostoja, tulisi siksi kontittaa. Tämän helpottamiseksi käyttöön on tarjottu konttikääretyökalu Tykky.

Lisätietoja Lustren tehokkaasta käytöstä on dokumentoitu täällä. Katso myös alla olevaa vuokaaviota ohjeena sopivimpien teknologioiden valintaan paljon IO:ta vaativiin työnkulkuihisi.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '0.6rem'}}}%%
graph TD
    A(Is your application containerized?) -->|Yes| B(<a href='/computing/containers/run-existing/#mounting-datasets-with-squashfs'>Mount your dataset with SquashFS</a>)
    A -->|No| C(Are you running a Conda/pip environment?)
    C -->|Yes| D(<a href='/computing/containers/tykky/'>Containerize it with Tykky</a>)
    D --> B
    C -->|No| E(Are you running on Puhti or Mahti?)
    E -->|Mahti| F(medium/large partition?)
    F -->|Yes| G(<a href='/computing/disk/#compute-nodes-without-local-ssd-nvme-disks'>Use ramdisk</a>)
    F -->|No| H(<a href='/computing/disk/#compute-nodes-with-local-ssd-nvme-disks'>Use fast local NVMe disk</a>)
    E -->|Puhti| H
    B -->|No| E
    B -->|Yes| I(Done)
    I -.-> E
    G -->|No, I have to use Lustre| J(<a href='/computing/lustre/#file-striping-and-alignment'>Use file striping</a>)
    H -->|No, I have to use Lustre| J

Huomio

Älä varaa GPU-solmuja vain hyödyntääksesi solmun NVMe-levyä. GPU:illa ajamiseen koodisi on tuettava GPU:ita ja sen on hyödynnettävä näitä resursseja, katso käyttöehdot. Muista, että myös Puhdin CPU-solmuissa on NVMe-levyt. Jos sinulla on kysyttävää omasta työnkulustasi, ota yhteyttä CSC:n asiakastukeen.

Lisätietoa työnkuluista ja tehokkaasta IO:sta

Yleiset työkalut useiden töiden ajamiseen yhdellä skriptillä

  • Array jobs ovat Slurmin oma työkalu useiden riippumattomien töiden lähettämiseen yhdellä komennolla
  • GNU Parallel -ohje näyttää, miten erittäin suuri määrä sarjallisia töitä voidaan ajaa tehokkaasti ilman, että Slurmin loki paisuu. Voit myös korvata GNU Parallelin xargs-komennolla, ks. esimerkki xargsjob.sh.
  • FireWorks on työnkulutyökalu monimutkaisille riippuvuuksille ja monisolmuisille alitehtäville
  • HyperQueue on työkalu tehokkaaseen osasolmutason tehtävien ajastukseen
  • Nextflow on suosittu työnkulutyökalu töille, joilla on riippuvuuksia
  • Snakemake on suosittu työnkulutyökalu töille, joilla on riippuvuuksia

Tieteenalakohtaiset työnkulkutyökalut ja ohjeet

Yleisiin simulointiohjelmistoihin integroidut työnkulkutyökalut

Seuraavat sisäänrakennetut työkalut mahdollistavat useiden simulaatioiden ajamisen rinnakkain yhden Slurm-työvaiheen sisällä. Jos käytät jotakin alla olevista sovelluksista, harkitse näitä ensisijaisena vaihtoehtona suuren läpimenon työnkulkujesi toteuttamiseen.

Yleiset työkalut ja ohjeet tehokkaaseen IO:hon

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta