-
Suuri läpäisykyky
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 | ||||||
| Pakkaa työt/työvaiheet | NA | |||||
| Helppo ottaa käyttöön | ||||||
| Riippuvuuksien tuki | ||||||
| Automaattinen kontti-integraatio | ||||||
| Virheistä palautuminen | ||||||
| MPI/OpenMP-rinnakkaiset alitehtävät | ||||||
| Slurm-integraatio | ||||||
| Moniosiotuki | ? | ? |
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
- Koneoppimisen datan tallennusopas selittää, missä ML-datan kanssa kannattaa työskennellä ja miten jaettua tiedostojärjestelmää käytetään tehokkaasti
- Gaussian-töiden farming HyperQueuella
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.
- GROMACSin multidir-vaihtoehto
- CP2K:n FARMING-tila (tukee alitöiden välisiä riippuvuuksia)
- LAMMPSin multi-partition-kytkin
- Amberin multi-pmemd
- Python:
- R: