-
Suuri läpäisykyky
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 | ||||||
| Pakkaa työt/työvaiheet | NA | |||||
| Helppo ottaa käyttöön | ||||||
| Riippuvuustuki | ||||||
| Automaattinen kontti-integraatio | ||||||
| Virheistä palautuminen | ||||||
| MPI/OpenMP-rinnakkaiset osatehtävät | ||||||
| Slurm-integraatio | ||||||
| Usean partition tuki | ? | ? |
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
- 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 suurivolyymisten 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: