Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Datan tallennus koneoppimista varten

Tässä oppaassa kerrotaan, miten tallennat datasi tehokkaasti koneoppimissovelluksia varten CSC:n supertietokoneilla. Se on osa koneoppimisopastamme.

Minne data kannattaa tallentaa?

CSC:n supertietokoneissa on kolmenlaisia jaettuja levyalueita: home, projappl ja scratch. Voit lukea levyalueista lisää täältä. LUMIn osalta katso datan tallennusta käsittelevä 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, jota on nopeampi käyttää kuin scratchia. Flash on tarkoitettu vain datan väliaikaiseen säilyttämiseen käsittelyn aikana, ja flash-alueen käyttö maksaa enemmän kuin tavallisen scratch-tallennuksen käyttö.

On suositeltavaa tallentaa suuret aineistot Allas-oliotallennuspalveluun ja ladata ne projektisi scratch-hakemistoon ennen laskennan aloittamista. Esimerkiksi:

module load allas
allas-conf
cd /scratch/<your-project>
swift download <bucket-name> your-dataset.tar

Kaikki, mitä täytyy säilyttää pidempään (projektin elinkaaren ajan), tulisi kopioida takaisin Altaaseen. scratch-levyalueelta poistetaan säännöllisesti vanhoja tiedostoja, eikä sitä tule käyttää tärkeiden tiedostojen pitkäaikaiseen säilytykseen.

Joissakin Puhtin ja Mahdin CPU-solmuissa sekä kaikissa GPU-solmuissa (mutta ei LUMIssa) on myös nopeat paikalliset NVMe-levyt, joilla on vähintään 3,6 Tt levytilaa. Tämä tila on käytettävissä vain Slurm-työn suorituksen aikana, ja se siivotaan työn päätyttyä. Dataintensiivisissä töissä on usein hyödyllistä kopioida data NVMe-levylle työn alussa ja tallentaa lopulliset tulokset scratch-levylle työn lopussa. Katso alta lisätietoja nopean paikallisen NVMe-levyn käytöstä.

Jaetun tiedostojärjestelmän tehokas käyttö

Koneoppimismallien opetusdata koostuu usein valtavasta määrästä tiedostoja. Tyypillinen esimerkki on neuroverkon opettaminen kymmenillä tuhansilla suhteellisen pienillä JPEG-kuvatiedostoilla. Valitettavasti Lustre-tiedostojärjestelmä, jota käytetään hakemistoissa /scratch, /projappl ja käyttäjien kotihakemistoissa, 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 opastuksemme 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 -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ä 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 (vain Puhti ja Mahti)

Jos sinun todella täytyy käyttää yksittäisiä pieniä tiedostoja, voit käyttää nopeaa paikallista NVMe-levyä, joka on Puhtin ja Mahdin GPU-solmuissa. Lyhyesti sanottuna sinun tarvitsee vain lisätä nvme:<number-of-GB> lähetysskriptisi --gres-valitsimeen, jolloin nopea paikallinen tallennustila on käytettävissä ympäristömuuttujan $LOCAL_SCRATCH määrittämässä sijainnissa. Tässä on esimerkkiajo, joka varaa 100 Gt nopeaa paikallista levytilaa ja purkaa aineiston tar-paketin kyseiselle levylle ennen laskennan käynnistämistä:

#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gpu
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=10
#SBATCH --mem=64G
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1,nvme:100

tar xf /scratch/<your-project>/your-dataset.tar -C $LOCAL_SCRATCH

srun python3 myprog.py --input_data=$LOCAL_SCRATCH <options>

Huomaa, että sinun täytyy välittää omalle ohjelmallesi jollakin tavalla tieto siitä, 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 $LOCAL_SCRATCH

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta