Hyppää sisältöön

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ä koodisi ja ohjelmistosi 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, jota on nopeampi käyttää kuin scratchia. Huomaa, että LUMI-F:n kustannus on suurempi kuin tavallisen scratch-tallennuksen käytön.

On suositeltavaa tallentaa aineistot Allas-objektitallennuspalveluun 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ää minkään tärkeän 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 käytetään satunnaishakua suureen määrään tiedostoja tai tehdään 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 peräkkäistä käyttöä varten!

Lisälukemiseksi katso CSC:n Lustre-tiedostojärjestelmän tekninen kuvaus ja yleinen ohjeemme paremman I/O-suorituskyvyn saavuttamisesta Lustressa.

Tehokkaampi tiedostomuoto

Monet koneoppimiskehykset tukevat tiedostomuotoja, joilla datasi voidaan paketoida tehokkaammin. Yleisiä tiedostomuotoja ovat TensorFlow'n TFRecord ja WebDataset PyTorchille. Muita esimerkkejä ovat HDF5- tai LMDB-tiedostomuotojen käyttö tai jopa yksinkertaiset ZIP-tiedostot, esimerkiksi Pythonin zipfile-kirjaston kautta.

LUMI AI -oppaassa on hyvä vertailu eri tiedostomuodoista PyTorchin kanssa käytettäväksi. 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äsi on yksi tai muutama suurempi tiedosto, joita on paljon tehokkaampaa käyttää ja lukea peräkkäisesti. Älä epäröi ottaa 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 paikallista NVMe-levyä, joka on kaikissa Roihun laskentasolmuissa. Tätä aluetta voidaan käyttää ympäristömuuttujan $TMPDIR määrittämässä sijainnissa, ja GPU-töissä 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 monisolmutyötä, sinun täytyy muokata tar-riviä niin, että se suoritetaan erikseen jokaisessa solmussa:

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.

Onko tämä sivu hyödyllinen?
Kiitos palautteestasi!
Kiitos! Arvostamme palautettasi.

Kerro meille miten voisimme parantaa tätä sivua ottamalla meihin yhteyttä .