Työskentely CSC:n laskentaympäristön konttien kanssa
Konttien käyttö HPC-ympäristöissä lisääntyy HPC-ystävällisten teknologioiden kehittymisen myötä, kuten Singularity/Apptainer, joita voidaan käynnistää Lustre-rinnakkaistiedostojärjestelmästä ilman root-oikeuksia. Tässä on joitain etuja, joita konttil-sovellusten käytöstä voi saada:
- Lyhyemmät käynnistysajat: Koska konteilta puuttuu ylimääräinen kuormitus (ei tarvitse ladata käyttöjärjestelmää!), ne voidaan käynnistää melko nopeasti. Esimerkiksi suurien Python-ympäristöjen kanssa työskennellessä voi helposti nähdä eron käynnistysajoissa kontillotun ympäristön ja suoraan jaetulle tiedostojärjestelmälle Condalla asennetun sovelluksen välillä. Tämä koskee erityisesti HPC-järjestelmässä ajettaessa laajamittaisesti.
- Tiedosto I/O-läpäisevyys: I/O-intensiivisten töiden sijoittaminen HPC-järjestelmiin on suuri haaste Lustre-tiedostojärjestelmille. Vaikka kontei ei välttämättä tarjoa täydellistä ratkaisua, se, että konteilta käynnistyvät sovellukset alkavat yhdestä kuva-tiedostosta, johtaa huomattavasti vähempiin pyyntöihin Lustre-palvelinsolmuille (OSS ja MDS) verrattuna Conda-asennuksiin, jotka lukevat liiallisen määrän tiedostoja aina, kun sovellus käynnistetään. SquashFS-imaget voidaan myös käyttää yhdessä Apptainer-konttien kanssa, jotta datasetistä luodaan tiiviitä kuva-tiedostoja, jotka Lustre tulkitsee yhdeksi tiedostoksi.
- Siirrettävyys ja toistettavuus: Kontti-sovellukset voidaan ottaa helposti käyttöön eri laskentaympäristöissä, ja ne toimivat samalla tavalla riippumatta niiden sijoituspaikasta.
- Parempi tehokkuus: Koska konteilta ovat luonteeltaan kevyitä, CPU- ja muistinkäyttö ei ole ongelma. Siksi konteilta-sovellukset on helppo laajentaa klusterin yli.
- Helppo asennus: Kun sinulla on apptainer-kuva, kontin käynnistäminen kuvasta on erittäin helppoa. Yhtään varsinaista asennusta ei tarvita.
Jotta työskentely konttien kanssa CSC:n ympäristössä olisi mahdollisimman läpinäkyvää ja helppoa, on tarjolla konttikääreettyökalu asennuspakettien pakkaamiseen.
Epätekninen kuvaus
Aloittelijaystävällisenä johdatuksena kontteihin käytetään analogiaa lemmikin pakkaamisesta häkkiin ennen matkaa. Lemmikkieläin tarvitsee olennaisesti elinympäristön (ruokaa, vettä jne.) ja häkin elinympäristön sisällä pitämiseen. Kun lemmikki on lyöty häkkiin, matkustaja voi kuljettaa sen (esim. autolla, junalla, lentäen jne.) minne tahansa ilman, että ulkoinen ympäristö vaikuttaa lemmikin toimintaan. Tällä tavalla myös kehittäjä voi varmistaa sovelluksen samanlaisen toiminnan ympäristövaihtelusta riippumatta. Yksi ratkaisu on ajaa sovellusta eristetyssä ympäristössä (kuten häkittämällä). Toisin sanoen koko sovelluksen (prosessin) pakkaaminen riippuvuuksineen varmistaa samanlaisen ajo-ympäristön sovellukselle riippumatta isännöivästä laskentaympäristöstä. Tämä on olennaisesti konttien perusidea.
Ymmärretään nyt, miten sovellus toimii eristetyssä ympäristössä hieman teknisemmällä tasolla. Linux-ytimen prosessi hallitsee pääsyä tietokoneen laitteistoon. Kaikki muut prosessit luottavat ytimeen vuorovaikutuksessa ympäristön, muistin, levyjen, verkon ja muiden kanssa. Voidaan sanoa, että kaikki prosessit, paitsi ydin, elävät kuplassa (isäntäympäristö), jonka ydin luo. Normaalisti, kun aloitat uusia prosesseja, ydin kopioi ympäristön yläprosessista uusiin ali-prosesseihin. Näin ali-prosessit elävät samassa kuplassa. Kun kuitenkin aloitat uuden prosessin, voit pyytää ydintä näyttämään täysin erilaisen ympäristön ali-prosessille. Tätä kutsutaan "sovelluksen ajaksi kontin sisällä". Erityisesti voit pyytää ydintä näyttämään täysin erilaisen juuritiedostojärjestelmän uudelle prosessille. Tiedostojärjestelmä voi tulla yhdestä tiedostosta, "konttikuva", jota ydin näyttää uudelle prosessille normaalina tiedostojärjestelmänä. Tämä tiedostojärjestelmäkuva voi sisältää täysin erilaisia tiedostoja kuin yläprosessin tiedostojärjestelmä. Käytännössä tämä mahdollistaa kaikki tarvittavat komponentit tietystä Linux-jakelusta ja kaikki sovelluksen ohjelmistoriippuvuudet pakattuna yhdeksi tiedostoksi, jota voidaan ajaa millä tahansa Linux-koneella, jossa on sopiva ydin ja virtualisointituki. Pilviympäristöissä tämä mahdollistaa sovellusten ajamisen läpinäkyvästi riippumatta Linux-jakelusta. HPC-ympäristöissä tämä voi myös lieventää edellä mainittuja rinnakkaistiedostojärjestelmän suorituskykyyn liittyviä ongelmia.