Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Johdatus rinnakkaisiin töihin R:llä

Tämän oppaan tavoitteena on käsitellä joitakin keskeisiä käsitteitä ja termejä, jotka liittyvät analyysin rinnakkaistamiseen R:ssä, sekä tarjota käytännön vinkkejä rinnakkaisten R-analyysien suunnitteluun CSC:n supertietokoneilla (Roihu ja Mahti). Mukana on myös linkkejä lisälukemiseen. Esimerkkieräajotiedostoja varten katso mallit rinnakkaisille R-eräajotöille.

Termi rinnakkaistaminen on laaja, ja analyysin rinnakkaistamiseen on monia tapoja. Esimerkiksi voidaan:

  • Hyödyntää useita CPU-ytimiä R-funktion nopeuttamiseen. Tämä on yleensä helpoin vaihtoehto, ja se voi perustua
    • R-paketteihin, joissa on sisäänrakennettu tuki useille ytimille, tai
    • R-pakettien, kuten future ja parallel, käyttöön täysin riippumattomien tehtävien rinnakkaistamiseksi
  • Lähettää useita samanaikaisesti suoritettavia Slurm-töitä
    • Taulukkotyöt mahdollistavat saman analyysin ajamisen useilla syötetiedostoilla tai eri asetuksilla
  • Jakaa työn useille laskenta-solmuille
    • Kun yhden solmun ytimet eivät riitä, useat solmut tarjoavat enemmän resursseja

Useiden ytimien käyttö

Rinnakkaiset R-analyysit voivat hyödyntää moniprosessointia, monisäikeistystä tai molempia. Monet R-paketit mainitsevat tuen moniydin-rinnakkaisuudelle – tämä on yleistermi, joka kattaa sekä moniprosessoinnin että monisäikeistyksen. Tarkka tapa, jolla useita ytimiä käytetään, riippuu R-paketista.

Moniprosessointi

Moniprosessointi viittaa analyyseihin, joissa käytetään useita toisistaan riippumattomia R-prosesseja. Toisin sanoen käynnistetään useita R:n kopioita, jotka yhdessä suorittavat työn. Moniprosessoinnissa kukin R-prosessi sijoitetaan omalle CPU-ytimelleen. Tämä on ehkä yleisin tapa rinnakkaistaa analyysi R:ssä.

Moniprosessointiin perustuvat analyysit sisältävät usein klusterin määrittämisen R-skriptissä. Tässä yhteydessä termi klusteri tarkoittaa R-prosessien ryhmää:

  • Esimerkiksi cl <- makeCluster(parallelly::availableCores(omit = 1)) paketissa parallel
  • Paketti future tekee määrityksen taustalla: plan(multicore), plan(multisession)

Klusteria määritettäessä voidaan määrittää, miten riippumattomien R-prosessien tulee kommunikoida keskenään. Klusterityyppejä on kaksi:

  • fork-klusterissa nykyinen R-prosessi kopioidaan ja sijoitetaan uudelle ytimelle. Fork-klustereita käyttävät analyysit ovat usein nopeampia ja muistitehokkaampia kuin socket-klustereita käyttävät analyysit, mutta niiden tuki rajoittuu POSIX-järjestelmiin (mukaan lukien Linux ja Mac). Forkkausta ei tule käyttää RStudiossa (katso alla).
  • socket-klusterissa jokaiselle ytimelle sijoitetaan täysin uusi R-prosessi, ja jokainen prosessi käynnistyy tyhjästä ympäristöstä. Vaikka socket-klusterit ovat hitaampia kuin fork-klusterit, niitä tukevat myös Windows ja RStudio.

Lisäksi R-prosessit jaetaan usein master-prosessiin ja worker-prosesseihin. Master-worker-mallissa master-prosessi vastaa työn jakamisesta ja jälkikäsittelystä, kun taas varsinainen suoritus tapahtuu worker-prosesseissa.

Monisäikeistys

R:n oletustoiminta on käyttää yhtä säiettä kerrallaan. R voidaan kuitenkin erikseen konfiguroida käyttämään BLAS/LAPACK-kirjastoja, jotka voivat hyödyntää useita ytimiä monisäikeistyksen kautta. Monisäikeistys voi auttaa nopeuttamaan tiettyjä rutiineja (esim. lineaarialgebraa). r-env:n R-asennus on linkitetty Intel® oneAPI Math Kernel Libraryyn (oneMKL), jotta monisäikeistystuki on käytettävissä.

Vaikka r-env on linkitetty OneMKL:ään, moduuli on konfiguroitu käyttämään yhtä säiettä, ellei käyttäjä määritä toisin. Monisäikeisissä analyyseissä säikeiden määrä sovitetaan tyypillisesti ytimien määrään ympäristömuuttujalla OMP_NUM_THREADS. Lisätietoja löytyy r-env-rinnakkaiseräajoesimerkeistä.

Tietyt R-paketit (kuten data.table, mgcv ja ranger) tarjoavat suoran tuen monisäikeistykselle. Myös muuntyyppisiä R-paketteja käyttävät työt voivat hyötyä monisäikeistyksestä analyysistä riippuen. On kuitenkin aina suositeltavaa testata työ yhdellä säikeellä verrattuna useisiin säikeisiin, jotta voidaan varmistaa, saadaanko nopeutusta ja että tulokset pysyvät oikeina monisäikeistystä käytettäessä.

Moniprosessoinnin ja monisäikeistyksen yhdistäminen

On myös mahdollista ajaa töitä, joissa yhdistetään moniprosessointi ja monisäikeistys. Tällöin kullekin prosessille varataan useita ytimiä. Kukin prosessi voi sitten ajaa useita säikeitä siten, että kukin säie toimii yhdellä ytimellä. Prosessien määrän kerrottuna prosessikohtaisten säikeiden määrällä tulisi olla yhtä suuri kuin työn käyttämien ytimien määrä. Esimerkiksi työ, joka käyttää yhtä solmua ja yhteensä 40 ydintä, voisi käyttää 10 prosessia ja neljää säiettä prosessia kohden.

Useita samanaikaisia töitä: taulukkotyöt

Sen sijaan, että lähettäisit useita töitä samaan aikaan, monissa tapauksissa on suositeltavaa käyttää taulukkotyötä. Esimerkkieräajotiedostoja löytyy r-env-rinnakkaiseräajoesimerkeistä ja Geocomputing-esimerkeistä. Taulukkotyöt soveltuvat saman koodin suorittamiseen eri parametreilla tai muihin tilanteisiin, joissa rinnakkaiset tehtävät ovat riippumattomia (eli niiden ei tarvitse kommunikoida keskenään).

Monisolmuanalyysit

Riippumatta siitä, ajatko moniprosessi- vai monisäikeistä R-työtä, analyysi on mahdollista jakaa useille solmuille. Tätä varten eräajotiedostoon ja R-skriptiin tarvitaan joitakin muutoksia verrattuna analyysiin, joka ajetaan yhdellä solmulla. Lisäksi sinun on käytettävä R-paketteja, jotka ovat yhteensopivia monisolmutöiden kanssa, kuten future tai snow .

Useita käytännön esimerkkejä löytyy r-env-rinnakkaiseräajoesimerkeistä. Rasteridataa käyttävien monisolmuisten R-esimerkkien lähde on myös Geocomputing-esimerkeissä.

Huomionarvoinen aihe on se, että moniprosessi- ja/tai monisäikeisten töiden määrittäminen useille solmuille (ns. hybridityöt) on oma erityistapauksensa. Vaikka olisit onnistuneesti määrittänyt rinnakkaisen R-työn yhdelle solmulle, asetelma on mietittävä uudelleen, kun sitä skaalataan useille solmuille. Vinkkejä tähän löytyy r-env-rinnakkaiseräajoesimerkeistä sekä CSC:n yleisestä hybridieräajotöiden dokumentaatiosta.

Käytännön vinkkejä

1. Mieti rinnakkaistamisstrategiaasi
Tapa, jolla analyysisi voidaan rinnakkaistaa, riippuu analyysistä, jonka aiot ajaa. Keskeisiä kysymyksiä ovat esimerkiksi:

  • Tukevatko käyttämäsi R-paketit rinnakkaistamista?
  • Ovatko rinnakkaiset tehtävät täysin riippumattomia (vai tarvitsevatko ne keskinäistä kommunikointia)?
  • Riittääkö yksi solmu vai tarvitaanko useita?

Monisolmuanalyysit antavat käyttöösi enemmän resursseja kuin yhden solmun analyysi, mutta tätä on tärkeää punnita suhteessa monisolmuanalyysin kustannuksiin (ylikuorma ja pidemmät jonotusajat). Jos voit ajaa sen yhdellä solmulla, se on aina paras vaihtoehto.

2. Aloita minimaalisesta proof of conceptista
Aloita muutamalla ytimellä tai yhdellä solmulla varmistaaksesi, että rinnakkaistamisstrategiasi toimii. Käytä ensin pientä testidatajoukkoa ja vertaa rinnakkaisen analyysisi suoritusaikaa sarjallisen (ei-rinnakkaisen) analyysin suoritusaikaan esimerkiksi R-paketilla tictoc. Kun rinnakkainen analyysisi toimii pienemmässä mittakaavassa, suurempien kokoonpanojen vianmääritys helpottuu huomattavasti.

3. Ystävysty eräajotiedostojen ja R-pakettiesi kanssa
Tämän tueksi kannattaa tutustua olemassa oleviin oppaisiin ja R-pakettien dokumentaatioon. r-env-dokumentaatio ja R-eräajoesimerkit sisältävät mallipohjia sarjallisille ja rinnakkaisille R-eräajotöille sekä ohjeet niiden käynnistämiseen CSC:n supertietokoneilla. Muita hyödyllisiä CSC Docs -sivuja ovat eräajojen perusdokumentaatio ja tiedot käytettävissä olevista eräajopartitioista.

4. Suurempien resurssien varaaminen ei välttämättä tarkoita nopeampia analyysejä
Optimaalisen ydin- ja/tai säiemäärän löytäminen on yleensä yrityksen ja erehdyksen tulosta. Usein on olemassa kynnys, jonka jälkeen saavutetaan vain marginaalisia hyötyjä suhteessa varaamiisi resursseihin. Lisäksi mitä enemmän resursseja varataan, sitä pidempi on odotusaika ennen kuin ne tulevat saataville.

5. Hyödynnä parallelly::availableCores()-funktiota
R:ssä on muutamia tapoja havaita käytettävissä olevien ytimien määrä. Supertietokoneilla yleisesti käytetty parallel::detectCores() havaitsee, kuinka monta ydintä koko solmussa on, riippumatta siitä, kuinka monta olet varannut. Useimmiten tavoitteena on kuitenkin havaita varattujen ytimien määrä. Tähän voidaan käyttää pakettia parallelly:

parallelly::availableCores()
6. Muista, että rinnakkaistamistuki on RStudiossa rajallinen Forkatut prosessit katsotaan epävakaiksi, kun R:ää ajetaan RStudiosta. Tämän vuoksi tietyt rinnakkaistamisvaihtoehdot (esim. plan(multicore) paketissa future) eivät ole käytettävissä RStudioa käytettäessä. Jos haluat käyttää moniprosessointia työskennellessäsi RStudiossa, socket-klusterit ovat vakaampi vaihtoehto. Raskaammat rinnakkaisskriptit kannattaa kuitenkin lähettää ei-interaktiivisina eräajotöinä.

Lyhyesti standardeista

Kun luet rinnakkaisesta R:stä ja rinnakkaisista eräajotöistä, törmäät todennäköisesti kahteen termiin: OpenMP ja Message Passing Interface (MPI). Molemmat ovat laajasti käytettyjä standardeja rinnakkaisuutta tukevien ohjelmistojen kirjoittamiseen. R:n käyttäjänä nämä yksityiskohdat voivat olla hyödyllisiä muistaa:

  • Moniprosessi- ja monisäikeiset R-työt perustuvat usein OpenMP:hen
  • Monisolmuiset R-työt perustuvat MPI:hin
  • Niin sanottuja "hybriditöitä" kutsutaan sellaisiksi, koska ne käyttävät sekä OpenMP:tä että MPI:tä

Lisäresursseja

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta