Hyppää sisältöön

Significant changes to Puhti & Mahti authentication coming in April! Read about the SSH key and multi-factor authentication requirements.

Suuriteholaskenta ja työnkulut

Suuriteholaskenta (HTC) viittaa suureen määrään työtehtäviä, joita usein mahdollistavat automaatio, skriptit ja työnkulkumanagerit. Työnkulkujen automatisointi säästää aikaa ja vähentää manuaalisia virheitä. Työnkulut ovat usein hyvin spesifisiä, ja harvoin löytyy tapa, joka toimisi suoraan tiettyyn sovellukseen.

Tämä sivu esittelee joitakin kriittisiä asioita, jotka sinun tulisi huomioida suunnitellessasi suuritehoisia työnkulkuja. Se auttaa myös rajaamaan oikean työkalusarjan tarpeisiisi. Valitsemalla huolellisesti soveltuvimman teknologia-stackin, työtehtäväsi jonottavat vähemmän, IO-operaatiot toimivat tehokkaammin ja koko HPC-järjestelmän suorituskyky pysyy vakaan nopeana kaikille käyttäjille.

Yleiset ohjeet

Suuritehoisten työtehtävien suorittaminen ja hallinta

Sisältääkö työnkulkusi merkittävän määrän (lyhyitä) erätehtäviä? Tämä on tyypillistä suuriteholaskennalle, jota usein kutsutaan "tehtäväviljelyksi". Se aiheuttaa kuitenkin ongelmia, kuten erätehtävien suorittamisjärjestelijöille, kuten Slurmille, jota käytetään HPC-järjestelmissä. Suuri määrä tehtäviä (käynnistetty sbatch komennolla) ja tehtävävaiheita (käynnistetty srun komennolla) tuottavat liiallista lokitietoa ja hidastavat Slurmia. Lyhyillä tehtävillä on myös suuri ajoituskustannus, mikä tarkoittaa sitä, että yhä suurempi osa ajasta kuluu jonossa olemiseen laskennan sijaan.

Jotta suuriteholaskenta mahdollistuisi ilman yllä mainittuja ongelmia, pitäisi työt ja työvaiheet pakata niin, että ne voidaan suorittaa minimaalisilla sbatch- ja srun-kutsuilla. Ensimmäinen ja paras vaihtoehto on tarkistaa, onko käyttämässäsi ohjelmistossa sisäänrakennettua tukea viljelytyyppisille työkuormille. Tämä koskee muun muassa sovelluksia kuten CP2K, GROMACS, LAMMPS, Python ja R.

Jos sisäänrakennettu tuki viljelytyyppiselle työkuormalle ei ole käytettävissä ohjelmistossasi, toinen vaihtoehto on käyttää ulkoisia työkaluja kuten HyperQueue tai GNU Parallel. Huomaa, että jotkin työkalut, kuten FireWorks, voivat silti luoda paljon työvaiheita, vaikka ne sallivatkin pakata omat, mahdollisesti keskinäisriippuvat tehtäväsi suoritettavaksi yhtenä erätehtävänä.

Huom

Sinun ei tarvitse antaa srun-komentoa, jos aiot suorittaa sarjallisia tehtäviä osana HTC-työnkulkua. Paljon työvaiheita voidaan välttää yksinkertaisesti poistamalla tarpeettomat srun-kutsut.

Voit käyttää alla olevaa kaaviota karsiaksesi sopivimmat teknologiat suuriteholaskentatyönkulkusi käyttöön. Huomaa, että tämä ei ole kattava lista ja muut työkalut saattavat myös sopia tapaukseesi. Nämä työkalut toimivat yleensä hyvin HTC-käyttötapauksissa, joissa on noin 100 ala-tehtävää (tai jopa enemmän, jos alatehtävät hyödyntävät enintään yhtä solmua kerrallaan, katso HyperQueue). Jos työnkulkuusi sisältyy satoja tai tuhansia monisolmu alatehtäviä, otathan [yhteyttä CSC:n palvelupisteeseen], sillä tämä saattaa vaatia erityisratkaisuja. Älä kuitenkaan epäröi ottaa meihin yhteyttä myös, jos sinulla on muita huolenaiheita liittyen työnkulkusi toteuttamiseen.

%%{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 monisolmuisen alatehtävät?)
    E -->|Yhden| F(Riippuvuuksia alatehtävien välillä?)
    E -->|Monisolmuinen| G(<a href='/computing/running/fireworks/'>FireWorks</a>)
    F -->|Riippuvuuksia| 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 riippuvuuksia| 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>)

Kvalitatiivinen yleiskatsaus Hydra Cloud System (HTC) työkalujen ominaisuuksista ja kyvykkyyksistä, joita CSC suosittelee, on esitetty alla.

Nextflow Snakemake HyperQueue FireWorks Array jobs GNU Parallel
Ei liiallista IO:ta Osa/muistutus/epävarma Osa/muistutus/epävarma Kyllä Osa/muistutus/epävarma Kyllä Kyllä
Pakkaa työtehtävät/työvaiheet Osa/muistutus/epävarma Kyllä Osa/muistutus/epävarma Osa/muistutus/epävarma Ei NA
Helppo asettaa Kyllä Kyllä Kyllä Osa/muistutus/epävarma Kyllä Kyllä
Riippuvuuden tuki Kyllä Kyllä Ei Kyllä Ei Ei
Automaattinen konttien integraatio Kyllä Kyllä Kyllä Kyllä Ei Ei
Virheiden hallinta Kyllä Kyllä Ei Kyllä Ei Kyllä
MPI/OpenMP-paralleelia alatehtävät Osa/muistutus/epävarma Osa/muistutus/epävarma Kyllä Kyllä Kyllä Ei
Slurmin integraatio Osa/muistutus/epävarma Osa/muistutus/epävarma Osa/muistutus/epävarma Osa/muistutus/epävarma Kyllä Osa/muistutus/epävarma
Moniosainten tuki Osa/muistutus/epävarma Osa/muistutus/epävarma ? ? Ei Ei

Syöte/tulostus tehokkuus

Usein, kun ajetaan monta rinnakkaista työtehtävää, syöte/tulostus (IO:n) tehokkuuden ongelma tulee esiin. Jos teet paljon IO-operaatioita (tiedostojen lukeminen ja kirjoittaminen) suuritehoisissa työnkuluissa, sinun tulisi kiinnittää erityistä huomiota missä nämä toiminnot suoritetaan. CSC:n supertietokoneet käyttävät Lustrea rinnakkaisena hajautettuna tiedostojärjestelmänä. Se on suunniteltu suurten tiedostojen tehokkaaseen rinnakkaiseen IO:hon, mutta kun käsitellään monia pieniä tiedostoja, IO:sta tulee nopeasti pullonkaula. Tärkeää on, että intensiiviset IO-operaatiot uhkaavat heikentää tiedostojärjestelmän suorituskykyä kaikille käyttäjille, minkä vuoksi ne tulisi siirtää pois Lustresta.

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

  • [Nopeaa paikallista NVMe-levyä] Puhtilla ja Mahtilla
  • [Ramdiskia] (/dev/shm) Mahtin CPU-jakojen kanssa solmukohtaisilla allokaatioilla (vain jos tiedät mitä teet!)
  • Jos sovellustasi voidaan suorittaa [Singularity-konttina], toinen hyvä vaihtoehto on [liittää datasetit SquashFS:llä]. Luo datastasi, mahdollisesti tuhansista tiedostoista koostuva SquashFS kuva, mikä vähentää sen yhdeksi tiedostoksi Lustre:n näkökulmasta. Liittäminen kuvaan Singularity-suoritukseen tekee siitä tavanomaisen kansion kontin sisällä.
  • Jos joudut käyttämään Lustrea IO-raskaille tehtäville, varmista, että hyödynnät [tiedostojen raititus.]

Riippumatta siitä, suoritatko HTC-työnkulkuja, toinen IO-tehokkuuteen vaikuttava tärkeä seikka on se, miten sovelluksesi on asennettu. [CSC on hylännyt Conda-ympäristöjen suoran käytön] niiden tuomien valtavien tiedostomäärien vuoksi. Suuri osa näistä tiedostoista luetaan joka kerta, kun Conda-ohjelmaa suoritetaan, aiheuttaen kohtuuttoman kuormituksen Lustrelle ja järjestelmänlaajuisia hidastuksia. Conda-ympäristöt ja muut sovellukset, jotka lukevat tuhansia tiedostoja käynnistyessään, tulisi siksi konttisoida. [Kontti kääretyökalu Tykky] on tuotu käytettäväksi tämän helpottamiseksi.

Lisätietoja [kuinka työskennellä tehokkaasti Lustarella on dokumentoitu täällä]. Katso myös alla oleva kaavio ohjenuorana oikeiden teknologioiden valitsemiseen IO:lle intensiivisiin työnkulkuihin.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '0.6rem'}}}%%
graph TD
    A(Onko sovelluksesi kontisoitu?) -->|Kyllä| B(<a href='/computing/containers/run-existing/#mounting-datasets-with-squashfs'>Liitä datasetti SquashFS:llä</a>)
    A -->|Ei| C(Ajatko Conda/pip ympäristöä?)
    C -->|Kyllä| D(<a href='/computing/containers/tykky/'>Kontisoi se Tykkyllä</a>)
    D --> B
    C -->|Ei| E(Ajatko Puhtilla tai Mahtilla?)
    E -->|Mahti| F(keskikokoinen/suuri jako?)
    F -->|Kyllä| G(<a href='/computing/disk/#compute-nodes-without-local-ssd-nvme-disks'>Käytä ramdiskia</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 raititusta</a>)
    H -->|Ei, minun on käytettävä Lustrea| J

Huom

Ethän varaa GPU-solmuja pelkästään solmun NVMe-levyn hyödyntämistä varten. Suorita GPU:illa vain, jos koodisi on GPU-yhteensopiva ja saa hyötyä resurssien käytöstä, [katso käyttöpolitiikka]. Muistathan, että Puhtin CPU-solmuilla on myös NVMe-levyt. Jos sinulla on kysymyksiä työnkulkusi erityispiirteistä, otathan yhteyttä [CSC:n palvelupisteeseen].

Lisätietoa työnkuluista ja tehokkaasta IO:sta

Työkalut, jotka suorittavat useita työtehtäviä yhdellä skriptillä

  • Array jobs on natiiviratkaisu Slurmissa, joka mahdollistaa useiden itsenäisten työtehtävien lähettämisen yhdellä komennolla
  • GNU Parallel opas näyttää kuinka suorittaa tehokkaasti erittäin suuri määrä sarjallisia työtehtäviä ilman, että Slurmin lokit pursuavat. Voit myös korvata GNU Parallel:in xargs-komennolla, katso xargsjob.sh esimerkiksi.
  • FireWorks on työnkulkutyökalu monimutkaisille riippuvuuksille ja monisolmuisille alatehtäville
  • HyperQueue on työkalu tehokkaalle alasolmustehtävien ajoitukselle
  • Nextflow on suosittu työnkulkutyökalu työtehtäville, joilla on riippuvuuksia
  • Snakemake on suosittu työnkulkutyökalu työtehtäville, joilla on riippuvuuksia

Tieteelle spesifiset työnkulkutyökalut ja opit

Työnkulkutyökalut, jotka integroituvat yleisesti käytettyihin simulaatio-ohjelmistoihin

Seuraavat sisäänrakennetut työkalut mahdollistavat useiden simulaatioiden ajon rinnakkain yhdessä Slurm-työvaiheessa. Jos käytät jotakin alla mainituista sovelluksista, harkitse näitä ensisijaisena vaihtoehtona suuriteholaskentatyönkulkujen toteuttamiseen.

Yleiset työkalut ja opit tehokkaaseen IO:hon

  • [Nopeat levykokonaisuudet CSC:n laskentaympäristössä]