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.

Suurivolyymilaskenta ja työnkulut

Suurivolyymilaskenta (high-throughput computing, HTC) tarkoittaa suuren työmäärän ajamista, usein automatisoinnin, skriptien ja työnkulunhallintatyökalujen avulla. Työnkulkujen automatisointi säästää aikaa ja vähentää manuaalisia virheitä. Työnkulut ovat usein hyvin tapauskohtaisia, eikä tiettyyn sovellukseen yleensä löydy menetelmää, joka toimisi suoraan sellaisenaan.

Tällä sivulla esitellään joitakin keskeisiä asioita, jotka kannattaa ottaa huomioon suurivolyymisten työnkulkujen suunnittelussa, ja autetaan rajaamaan käyttötapaukseesi sopiva työkalukokonaisuus. Valitsemalla teknologiapinon huolellisesti työsi viettävät vähemmän aikaa jonossa, IO-operaatiot toimivat tehokkaammin ja koko HPC-järjestelmän suorituskyky pysyy vakaana ja nopeana kaikille käyttäjille.

Yleiset ohjeet

Suurivolyymisten töiden ajaminen ja hallinta

Sisältääkö työnkulkusi suuren määrän (lyhyitä) eräajoja? Tämä on suurivolyymilaskennan tyypillinen piirre, josta käytetään usein nimitystä "task farming". Se aiheuttaa kuitenkin ongelmia HPC-järjestelmissä käytettäville eräajojen ajastimille, kuten 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ä myös ajastuksen yleiskustannus on suuri, mikä tarkoittaa, että yhä suurempi osa ajasta kuluu laskennan sijaan jonossa.

Jotta suurivolyymilaskenta olisi mahdollista ilman edellä 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, tarjoaako käyttämäsi ohjelmisto sisäänrakennetun vaihtoehdon 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 mahdollisesti toisistaan riippuvaisten osatehtävien kätevän pakkaamisen suoritettavaksi yhtenä eräajona.

Huomio

Sinun ei tarvitse käyttää srun-komentoa, jos aiot ajaa sarjallisia töitä osana HTC-työnkulkuasi. Suuri määrä työvaiheita voidaan välttää yksinkertaisesti jättämällä tarpeettomat srun-kutsut pois.

Voit käyttää alla olevaa vuokaaviota rajataksesi suurivolyymilaskennan työnkulkuusi parhaiten sopivat teknologiat. Huomaa, että tämä ei ole täydellinen luettelo, 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 osatehtävää (tai jopa enemmän, jos osatehtävät käyttävät enintään yhtä solmua kukin, ks. HyperQueue). Jos työnkulkusi sisältää satoja tai tuhansia monisolmuosatehtäviä, ota yhteyttä CSC:n asiakastukeen, sillä tämä voi vaatia erityisratkaisuja. Ota kuitenkin yhteyttä myös kaikissa muissa työnkulun toteutukseen liittyvissä kysymyksissä.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '0.6rem'}}}%%
graph TD
    C(Onko ohjelmistossasi sisäänrakennettu HTC-vaihtoehto?) -->|Kyllä| D("Käytä, jos sopii käyttötapaukseen:<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 -->|Ei| E(Yhden vai usean solmun osatehtäviä?)
    E -->|Yksi| F(Riippuvuuksia osatehtävien välillä?)
    E -->|Usean solmun| G(<a href='/computing/running/fireworks/'>FireWorks</a>)
    F -->|Kyllä| 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 -->|Ei| K(<a href='/support/tutorials/many/'>GNU Parallel</a><br><a href='/computing/running/array-jobs/'>Taulukkotyöt</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
Riippuvuustuki 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 osatehtä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
Usean partition tuki Partial/caveat/uncertain Partial/caveat/uncertain ? ? No No

Syöte-/tulostetehokkuus

Usein monia rinnakkaisia töitä ajettaessa esiin nousee syöte-/tulostetehokkuuden (IO) ongelma. Jos teet paljon IO-operaatioita (tiedostojen lukemista ja kirjoittamista) suurivolyymisissä työnkuluissasi, sinun tulee kiinnittää erityistä huomiota siihen, missä nämä operaatiot suoritetaan. CSC:n supertietokoneet käyttävät rinnakkaista hajautettua tiedostojärjestelmää Lustre. 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, joten 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-partitioissa, 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. Kun kuva liitetään Singularity-suoritukseen, se näkyy kuitenkin kontin sisällä tavallisena hakemistona.
  • Jos sinun on käytettävä Lustrea paljon IO:ta vaativiin tehtäviin, varmista että hyödynnät tiedostojen stripeausta

Riippumatta siitä ajatko HTC-työnkulkuja vai et, toinen tärkeä IO-tehokkuuteen vaikuttava tekijä on se, miten sovelluksesi on asennettu. CSC ei enää suosittele Conda-ympäristöjen suoraa käyttöä 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 hidastaa koko järjestelmää. 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 Tykky-konttikääretyökalu.

Lisätietoja Lustren tehokkaasta käytöstä on dokumentoitu täällä. Käytä myös alla olevaa vuokaaviota ohjeena valitessasi sopivimpia teknologioita paljon IO:ta vaativiin työnkulkuihisi.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '0.6rem'}}}%%
graph TD
    A(Onko sovelluksesi kontitettu?) -->|Kyllä| B(<a href='/computing/containers/run-existing/#mounting-datasets-with-squashfs'>Liitä aineistosi SquashFS:llä</a>)
    A -->|Ei| C(Ajatko Conda/pip-ympäristöä?)
    C -->|Kyllä| D(<a href='/computing/containers/tykky/'>Kontita se Tykyllä</a>)
    D --> B
    C -->|Ei| E(Ajatko Puhdissa vai Mahdissa?)
    E -->|Mahti| F(keskikokoinen/suuri partitio?)
    F -->|Kyllä| G(<a href='/computing/disk/#compute-nodes-without-local-ssd-nvme-disks'>Käytä ramdiskiä</a>)
    F -->|Ei| H(<a href='/computing/disk/#compute-nodes-with-local-ssd-nvme-disks'>Käytä nopeaa paikallista NVMe-levyä</a>)
    E -->|Puhti| H
    B -->|Ei| E
    B -->|Kyllä| I(Valmis)
    I -.-> E
    G -->|Ei, minun on käytettävä Lustrea| J(<a href='/computing/lustre/#file-striping-and-alignment'>Käytä tiedostojen stripeausta</a>)
    H -->|Ei, minun on käytettävä Lustrea| J

Huomio

Älä varaa GPU-solmuja vain hyödyntääksesi solmun NVMe-levyä. Jotta voit ajaa GPU:illa, koodisi on tuettava GPU:ita ja sen on hyödynnettävä niitä, 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, joilla ajetaan useita töitä yhdellä skriptillä

  • Taulukkotyöt 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 komennolla xargs, katso esimerkki tiedostosta xargsjob.sh.
  • FireWorks on työnkulkutyökalu monimutkaisille riippuvuuksille ja usean solmun osatehtäville
  • HyperQueue on työkalu tehokkaaseen osasolmutason tehtävien ajastukseen
  • Nextflow on suosittu työnkulkutyökalu töille, joissa on riippuvuuksia
  • Snakemake on suosittu työnkulkutyökalu töille, joissa 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 suurivolyymisten 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