-
Datan tallennus koneoppimista varten
Datan tallennus koneoppimista varten
Tässä oppaassa kerrotaan, miten tallennat datasi tehokkaasti koneoppimissovelluksia varten CSC:n supertietokoneilla. Se on osa koneoppimisen opasta.
Minne data kannattaa tallentaa?
CSC:n supertietokoneissa on kolmenlaisia jaettuja levyalueita: home, projappl ja scratch. Voit lukea lisää Roihun levyalueista täältä. LUMIn osalta katso datan tallennuksen osio täältä. Yleisesti ottaen säilytä koodi ja ohjelmistot projappl-alueella sekä aineistot, lokit ja laskennan tulokset scratch-alueella. home-hakemistoa ei ole tarkoitettu data-analyysiin ja laskentaan, ja sinne tulisi tallentaa vain pieniä henkilökohtaisia tiedostoja.
Lisäksi LUMIssa on jaettu flash-tallennusalue LUMI-F, johon pääsee käsiksi nopeammin kuin scratchiin. Huomaa, että LUMI-F:n käyttö maksaa enemmän kuin tavallisen scratch-tallennuksen käyttö.
On suositeltavaa tallentaa aineistot Allas-oliosäilöön ja ladata ne projektisi scratch-hakemistoon ennen laskennan aloittamista. Esimerkiksi:
module load allas
allas-conf
cd /scratch/<your-project>
s3cmd get s3://<bucket-name>/<your-dataset>.tar
Kaikki, mitä täytyy säilyttää yli 180 päivää, tulisi kopioida takaisin Altaaseen. scratch-levyalueelta poistetaan säännöllisesti vanhoja tiedostoja, eikä sitä tule käyttää tärkeän datan pitkäaikaiseen säilytykseen.
Lopuksi, jos työskentelet muiden projektien kanssa, jotka kaikki tarvitsevat pääsyn samaan yhteiseen dataan, voit harkita aineistoprojektin hakemista Roihussa. Aineistoprojekti on hyvä tapa ylläpitää dataa, jota luetaan usein mutta kirjoitetaan harvoin.
Jaetun tiedostojärjestelmän tehokas käyttö
Koneoppimismallien opetusdata koostuu usein valtavasta määrästä tiedostoja. Tyypillinen esimerkki on neuroverkon opettaminen sadoillatuhansilla suhteellisen pienillä kuva- tai tekstitiedostoilla. Valitettavasti /scratch-, /projappl- ja käyttäjien home-hakemistoissa käytettävä Lustre-tiedostojärjestelmä ei toimi hyvin, kun tehdään satunnaishakuja suureen määrään tiedostoja tai paljon pieniä lukuoperaatioita. Laskennan hidastumisen lisäksi tämä voi ääritapauksissa aiheuttaa huomattavia hidastumisia kaikille supertietokoneen käyttäjille ja joskus tehdä koko supertietokoneesta käyttökelvottoman tuntikausiksi.
Note
Älä lue valtavaa määrää tiedostoja jaetusta tiedostojärjestelmästä. Käytä sen sijaan nopeita paikallisia levyjä tai paketoi datasi suurempiin tiedostoihin, jotta sitä voidaan lukea peräkkäisesti!
Lisätietoja saat CSC:n Lustre-tiedostojärjestelmän teknisestä kuvauksesta ja yleisestä oppaastamme paremman I/O-suorituskyvyn saavuttamisesta Lustressa.
Tehokkaampi datamuoto
Monet koneoppimiskehykset tukevat tiedostomuotoja, joilla data voidaan paketoida tehokkaammin. Yleisiä tiedostomuotoja ovat TensorFlow'n TFRecord ja WebDataset PyTorchille. Muita esimerkkejä ovat HDF5- tai LMDB-tiedostomuotojen käyttö tai jopa tavalliset ZIP-tiedostot, esimerkiksi Pythonin zipfile-kirjaston kautta.
LUMI AI Guide sisältää hyvän vertailun eri tiedostomuodoista PyTorch-käyttöön. Katso myös esimerkki TFRecord-tiedostojen luomisesta kuva-aineistosta.
Kaikkien näiden tiedostomuotojen pääajatus on se, että tuhansien pienten tiedostojen sijaan käytössä on yksi tai muutama suurempi tiedosto, joita on paljon tehokkaampaa käyttää ja lukea peräkkäisesti. Ota rohkeasti yhteyttä asiakastukeemme, jos tarvitset neuvoja datasi tehokkaampaan käyttöön.
Nopea paikallinen levy
Jos sinun todella täytyy käyttää yksittäisiä pieniä tiedostoja, voit käyttää nopeaa NVMe-paikallislevyä, joka on kaikissa Roihun laskentasolmuissa. Tälle alueelle pääsee käsiksi ympäristömuuttujan $TMPDIR määrittämässä sijainnissa, ja GPU-ajojen tapauksessa sen enimmäiskapasiteetti on 150 GiB.
Tässä on esimerkkiajo Roihulle, jossa aineiston tar-paketti puretaan $TMPDIR-hakemistoon ennen laskennan käynnistämistä:
#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gpumedium
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=72
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:gh200:1
tar xf /scratch/<your-project>/your-dataset.tar -C $TMPDIR
srun python3 myprog.py --input_data=$TMPDIR <options>
Huomaa, että sinun täytyy kertoa omalle ohjelmallesi, mistä aineisto löytyy, esimerkiksi komentoriviargumentilla. Katso myös yleiset ohjeemme nopean paikallisen tallennustilan käyttöönotosta.
Jos ajat monisolmuista työtä, sinun täytyy muokata tar-riviä niin, että se suoritetaan erikseen jokaisella solmulla:
srun --ntasks=$SLURM_NNODES --ntasks-per-node=1 \
tar xf /scratch/<your-project>/your-dataset.tar -C $TMPDIR
Hajautettu NVMe
Lopuksi, jos 150 GiB ei riitä, Roihu tukee myös hajautettua NVMe:tä. Tämä nopea tallennuskapasiteetti tarjotaan verkon yli, ja se näkyy Slurm-työn sisältä paikallisena scratch-tilana. Hajautetun NVMe-resurssin kokonaiskapasiteetti on 307,2 TB. Hajautettua NVMe:tä pidetään Roihussa edelleen kokeellisena ominaisuutena, ja se on tällä hetkellä saatavilla vain kokonaisia solmuja käyttäville töille.