Hyppää sisältöön

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

Warning!

Puhti and Mahti will be decommissioned after Roihu becomes available. Users should clean up unnecessary files and move any required data by the end of August 2026. See the Roihu data preparation instructions for details.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

Datan tallennus koneoppimista varten

Tässä oppaassa kerrotaan, miten datasi kannattaa tallentaa 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 levyalueista lisää täältä. Katso LUMIn osalta datan tallennuksen osio täältä. Yleisesti ottaen säilytä koodisi ja ohjelmistosi projappl-alueella ja 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, johon pääsee käsiksi nopeammin kuin scratch-alueeseen. Flash on tarkoitettu vain datan väliaikaiseen tallentamiseen käsittelyä varten, ja flash-alueen käyttö maksaa enemmän kuin tavallisen scratch-tallennuksen käyttö.

On suositeltavaa tallentaa suuret aineistot Allas-objektitallennukseen 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ärkeän datan pitkäaikaiseen säilytykseen.

Joissakin CPU-solmuissa sekä kaikissa Puhtin ja Mahdin GPU-solmuissa (mutta ei LUMIssa) on myös nopeat paikalliset NVMe-asemat, 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 kannattavaa kopioida data NVMe-asemalle työn alussa ja tallentaa sitten lopulliset tulokset scratch-levylle työn lopussa. Katso alta lisätietoja nopean paikallisen NVMe-aseman 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 myös äärimmäisissä tapauksissa aiheuttaa huomattavia hidastumisia kaikille supertietokoneen käyttäjille ja joskus tehdä koko supertietokoneesta käyttökelvottoman tunneiksi.

Note

Älä lue valtavaa määrää tiedostoja jaetusta tiedostojärjestelmästä. Käytä sen sijaan nopeita paikallisia asemia tai paketoi datasi suurempiin tiedostoihin peräkkäistä käyttöä varten!

Lisälukemiseksi katso CSC:n Lustre-tiedostojärjestelmän tekninen kuvaus sekä yleinen opastuksemme siitä, miten Lustrella saavutetaan parempi I/O-suorituskyky.

Tehokkaampi datamuoto

Monet koneoppimiskehykset tukevat tiedostomuotoja, joilla datasi voidaan paketoida tehokkaammin. Yleisiä muotoja ovat TensorFlown TFRecord ja WebDataset PyTorchille. Muita esimerkkejä ovat HDF5- tai LMDB-muotojen käyttö tai jopa tavalliset ZIP-tiedostot, esimerkiksi Pythonin zipfile-kirjaston kautta.

LUMI AI -oppaassa on hyvä vertailu eri muodoista PyTorchin kanssa käytettäväksi. Katso myös esimerkki TFRecord-tiedostojen luomisesta kuva-aineistosta.

Kaikkien näiden muotojen pääajatus on se, että monien 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 siitä, miten voit käyttää dataasi tehokkaammin.

Nopea paikallinen levy (vain Puhti ja Mahti)

Jos sinun todella täytyy käyttää yksittäisiä pieniä tiedostoja, voit käyttää nopeaa paikallista NVMe-asemaa, joka on Puhtin ja Mahdin GPU-solmuissa. Lyhyesti sanottuna sinun tarvitsee vain lisätä nvme:<number-of-GB> --gres-valitsimeen julkaisuskriptissäsi, 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 tälle asemalle 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 jokaisella solmulla:

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