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 | ||||||
Pakkaa työtehtävät/työvaiheet | NA | |||||
Helppo asettaa | ||||||
Riippuvuuden tuki | ||||||
Automaattinen konttien integraatio | ||||||
Virheiden hallinta | ||||||
MPI/OpenMP-paralleelia alatehtävät | ||||||
Slurmin integraatio | ||||||
Moniosainten tuki | ? | ? |
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
- Data storage guide for machine learning selittää, missä kannattaa työskennellä ML datojen kanssa, ja kuinka käyttää jaettua tiedostojärjestelmää tehokkaasti
- Farming Gaussian jobs with HyperQueue
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.
- GROMACS monisuunta vaihtoehto
- CP2K:n FARMING -tila (tukee alatehtävien riippuvuuksia)
- LAMMPS monijaetun kytkin
- Amber monipmemd
- Python:
- R:
Yleiset työkalut ja opit tehokkaaseen IO:hon
- [Nopeat levykokonaisuudet CSC:n laskentaympäristössä]