Hyppää sisältöön

A new version of SD Connect and SD Desktop will be available from Monday, September 28. The major upgrade will introduce significant improvements, but also includes changes that are not compatible with the current version of the service. Click here to review the available support materials.

Warning!

Puhti and Mahti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti and Mahti login nodes and storage services are planned to remain available until 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

GPU-kiihdytetty koneoppiminen

Tässä oppaassa selitetään GPU:iden käytön perusteet CSC:n supertietokoneissa. Se on osa koneoppimisen opastamme.

Roihu-GPU vai LUMI?

Roihu on CSC:n kansallinen supertietokone, joka on tarkoitettu pääasiassa Suomessa toimiville tutkijoille ja joka avattiin kesäkuussa 2026. Roihu-GPU, jolla viitataan Roihun GPU-puoleen, sisältää 528 GPU:ta (NVIDIA GH200), ja sen tavoitteena on tarjota tutkijoille laaja ja helppokäyttöinen ohjelmistovalikoima.

CSC ylläpitää myös eurooppalaista supertietokonetta LUMI, joka tarjoaa valtavan AMD GPU -suorittimiin perustuvan GPU-resurssin.

Roihu-GPU:ssa on laaja ohjelmistovalikoima eri tieteenaloille, ja käyttöoikeuden saaminen on suomalaisiin organisaatioihin kuuluville tutkijoille erittäin helppoa. LUMI puolestaan tarjoaa valtavan GPU-resurssin ja mahdollistaa paljon suuremmat ajot.

Keskeiset GPU:ihin liittyvät tilastot on koottu alla olevaan taulukkoon.

GPU-tyyppi GPU-muisti GPU-solmut GPU:ta/solmu GPU:ita yhteensä
Roihu-GPU NVIDIA Hopper GH200 96 GB 132 4 528
LUMI AMD MI250x 64 (128) GB 2978 8 (4) 23824 (11912)

Huom.

Jokaisessa LUMI-solmussa on 4 MI250x-GPU:ta, mutta Slurmin kautta käytettävissä on 8 GPU:ta, koska MI250x-kortissa on 2 GPU-dietä (GCD). Yllä oleva taulukko näyttää GPU-die-kohtaiset luvut, ja MI250x-korttikohtaiset luvut on esitetty sulkeissa.

Lue myös GPU-solmujen käyttöehdot. Huomioi myös, että Slurmin jonotustilanne voi vaihdella eri supertietokoneiden välillä eri aikoina, joten kaikki vaihtoehdot kannattaa tarkistaa.

Huomaa, että kaikissa supertietokoneissa on erilliset tiedostojärjestelmät, joten tiedostot on kopioitava käsin, jos haluat vaihtaa järjestelmää.

Saatavilla olevat koneoppimisohjelmistot

Tuemme CSC:n supertietokoneissa GPU-kiihdytettyyn koneoppimiseen useita sovelluksia, mukaan lukien PyTorch, JAX ja TensorFlow. Lue tarkemmat ohjeet siitä sovelluksesta, josta olet kiinnostunut.

Sinun tulee käyttää moduulijärjestelmää ladataksesi haluamasi sovelluksen, esimerkiksi:

module load python-pytorch/2.10

Huomaa, että moduulimme sisältävät jo CUDA- ja cuDNN-kirjastot, joten cuda- ja cudnn-moduuleja ei tarvitse ladata erikseen.

LUMIssa suosittelemme käyttämään LUMI AI Factoryn tarjoamaa AI Software Environmentia.

Oman ohjelmiston asentaminen

Monissa tapauksissa olemassa olevat moduulimme tarjoavat tarvittavan ohjelmistokehyksen, mutta joitakin paketteja voi puuttua. Tällöin voit usein ladata sopivan moduulin ja sitten asentaa lisäpaketteja omaan käyttöön pip-paketinhallinnalla.

Monimutkaisempia ohjelmistotarpeita varten suosittelemme käyttämään tykkyä tai luomaan oman Apptainer-säiliön.

GPU-ajojen suorittaminen

Jotta voit lähettää GPU-ajon Slurm-työkuormanhallintaan, sinun tulee käyttää Roihu-GPU:ssa gpumedium-osiota ja määrittää tarvittavien GPU:iden tyyppi ja määrä --gres-valitsimella.

LUMIssa sinun tulee käyttää jotakin GPU-osioista, kuten dev-g, small-g tai standard-g.

Alla on esimerkkieräajokomennostot yhden GPU:n ja sitä vastaavan osuuden yhden solmun CPU-ytimistä ja muistista varaamiseen:

#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gpumedium
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=72
#SBATCH --gres=gpu:gh200:1
#SBATCH --time=1:00:00

# load any modules and run your program here
#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=small-g
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=7
#SBATCH --gpus-per-node=1
#SBATCH --mem=60G
#SBATCH --time=1:00:00

# load any modules and run your program here

Roihu-GPU:ssa on myös gpularge-osio, jonka käyttöoikeus edellyttää skaalautuvuustestiä

Tarkempia tietoja eri osioista löydät sivuiltamme CSC:n supertietokoneiden käytettävissä olevista eräajo-osioista ja LUMIn Slurm-osioista.

GPU:n käyttöaste

GPU:t ovat CPU:ihin verrattuna erittäin kallis resurssi, joten GPU:t tulisi hyödyntää mahdollisimman tehokkaasti sen jälkeen, kun ne on varattu. Tarjoamme joitakin työkaluja GPU-ajojen käyttöasteen seurantaan eri supertietokoneissa. GPU:n käyttöasteen tulisi ihannetapauksessa olla lähellä 100 %:a. Jos käyttöasteesi on jatkuvasti alhainen (esimerkiksi alle 50 %), siihen voi olla useita syitä:

  • Sinulla voi olla käsittelyn pullonkaula. Esimerkiksi sinun tulisi käyttää datan latauskehystä (ja varata sille riittävästi CPU-ytimiä), jotta GPU:lle voidaan syöttää dataa riittävän nopeasti. Katso dokumentaatiomme useiden CPU-ytimien käytöstä datan esikäsittelyyn.

  • Vaihtoehtoisesti voi yksinkertaisesti olla niin, että laskennallinen ongelma on GPU:lle "liian pieni", esimerkiksi jos neuroverkko on suhteellisen yksinkertainen. Tämä ei sinänsä ole ongelma, mutta jos käyttöasteesi on todella alhainen, kannattaa harkita, olisiko CPU:iden käyttö kustannustehokkaampaa.

Kuten aina, älä epäröi ottaa yhteyttä palvelutiskeemme, jos sinulla on kysyttävää GPU:n käyttöasteesta.

Työkalut GPU:n käyttöasteen seurantaan

nvidia-smi käynnissä olevalle ajolle (Roihu-GPU)

Kun ajo on käynnissä, voit suorittaa nvidia-smi-komennon ssh:n kautta sillä solmulla, jossa ajo on käynnissä. Voit tarkistaa solmun isäntänimen komennolla squeue --me. Tuloste voi näyttää esimerkiksi tältä:

  JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
1341095   gputest roihu-gp mvsjober  R       0:24      1 rg2101

Näet solmun isäntänimen NODELIST-sarakkeesta, tässä tapauksessa se on rg2101. Voit nyt tarkistaa GPU:n käyttöasteen komennolla (korvaa <nodename> oman tapauksesi todellisella solmun isäntänimellä):

ssh <nodename> nvidia-smi

Tuloste näyttää suunnilleen tältä:

Tue Sep 15 16:04:42 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.71.05              Driver Version: 595.71.05      CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GH200 120GB             On  |   00000019:01:00.0 Off |                    0 |
| N/A   51C    P0            396W /  680W |    4964MiB /  97871MiB |     96%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A         1753915      C   ...rch/wrappers/2.13/bin/python3       4950MiB |
+-----------------------------------------------------------------------------------------+

Tästä näemme, että prosessimme käyttää noin 5 GB:tä (96 GB:stä) GPU-muistia ja että tämänhetkinen GPU:n käyttöaste on 96 % (mikä on varsin hyvä).

Jos haluat jatkuvasti päivittyvän näkymän:

ssh <nodename> -t watch nvidia-smi

Tämä päivittyy 2 sekunnin välein. Poistu painamalla Ctrl-C.

rocm-smi käynnissä olevalle ajolle (LUMI)

LUMI-supertietokone käyttää AMD GPU -suorittimia, joten komento on hieman erilainen: rocm-smi. LUMIssa sinun tulee käyttää srun-komentoa kirjautuaksesi solmulle, jossa sinulla on käynnissä oleva ajo:

srun --interactive --pty --jobid=<jobid> rocm-smi

Korvaa <jobid> todellisella Slurm-ajon tunnuksella. Voit myös käyttää komentoa watch rocm-smi saadaksesi jatkuvasti päivittyvän näkymän.

Useiden CPU:iden käyttö datan esikäsittelyyn

Yksi yleinen syy GPU:n alhaiseen käyttöasteeseen on se, että CPU ei pysty lataamaan ja esikäsittelemään dataa riittävän nopeasti, jolloin GPU joutuu odottamaan seuraavaa käsiteltävää erää. Tällöin on yleinen käytäntö varata enemmän CPU:ita datan lataamiseen ja esikäsittelyyn useissa rinnakkaisissa säikeissä tai prosesseissa. Esimerkiksi Roihu-GPU:ssa voit varata kutakin GPU:ta kohden enintään 72 CPU-ydintä.

LUMIssa suosittelemme käyttämään 7 CPU-ydintä, koska 8 GPU:lle on käytettävissä 63 ydintä.

Olet ehkä huomannut, että olemme jo noudattaneet tätä ohjetta esimerkkiajoskripteissämme.

Myös koodisi täytyy tukea rinnakkaista esikäsittelyä. Useimmat korkean tason koneoppimiskehykset tukevat tätä kuitenkin valmiiksi. Esimerkiksi PyTorchissa voit käyttää torch.utils.DataLoader-luokkaa, joka tukee datan lataamista useilla prosesseilla:

train_loader = torch.utils.data.DataLoader(..., num_workers=10)

Työntekijöiden optimaalinen määrä riippuu aineistosta ja muista tekijöistä. Roihu-GPU:ssa kaikkien 72 ytimen käyttö on useimmissa tapauksissa luultavasti liikaa, mutta 10 voi olla hyvä lähtökohta.

Jos käytät useita datalataajia mutta datan lataaminen on silti hidasta, on myös mahdollista, että käytät jaettua tiedostojärjestelmää tehottomasti. Yleinen virhe on lukea valtava määrä pieniä tiedostoja. Voit lukea lisää siitä, miten data kannattaa tallentaa ja ladata mahdollisimman tehokkaasti koneoppimista varten erillisestä oppaastamme.

Profilointityökalut

PyTorch Profiler ja TensorFlow Profiler ovat saatavilla TensorBoard-liitännäisinä. Profilointityökalut löytyvät TensorBoardin PROFILE- ja PYTORCH_PROFILER-välilehdiltä. Huomaa, että välilehdet eivät välttämättä näy oletuksena, vaan ne löytyvät käyttöliittymän oikeassa reunassa olevasta pudotusvalikosta. Profilointityökaluja voidaan käyttää resurssien kulutuksen tunnistamiseen ja suorituskyvyn pullonkaulojen ratkaisemiseen, erityisesti datan syöttöputkessa.

Katso myös:

GPU:n energiankulutus

Ekologisista ja taloudellisista syistä koneoppimisajojen energiankulutusta on usein tarpeen seurata. Yksittäisen ajon koko energiankulutuksen mittaaminen, mukaan lukien CPU- ja GPU-käsittely, verkkoliikenne ja jäähdytys, on yleisessä tapauksessa melko vaikeaa, koska nämä resurssit jakautuvat monien ajojen kesken ja voivat riippua useista seurattavasta ajosta riippumattomista tekijöistä. Onneksi pelkästään GPU:iden energiankulutuksen mittaaminen on helpompaa, koska niitä ei yleensä jaeta monien ajojen kesken. Koska GPU on ylivoimaisesti suurin energian kuluttaja, se antaa hyvän arvion kokonaisenergiankulutuksesta.

Työkalut GPU:n energiankulutuksen seurantaan

Roihu-GPU:ssa ei vielä ole sisäänrakennettua tukea GPU:n energiankulutuksen seurantaan. Sillä välin käyttäjät voivat käyttää NVIDIA Management Librarya tai vastaavia Python-sidoksia pyNVML:ssä GPU:n energiatietojen hakemiseen.

gpu-energy-työkalu (LUMI)

LUMIa varten on olemassa yksinkertainen työkalu, jolla voidaan lukea AMD GPU -kortista löytyviä GPU-energialaskureita. Työkalu ja sen dokumentaatio löytyvät täältä: https://github.com/mvsjober/gpu-energy-amd.

Se on esiasennettu LUMIin polkuun /appl/local/csc/soft/ai/bin/gpu-energy.

Tyypillinen käyttö Slurm-skriptissä:

gpu-energy --save

# run job here

gpu-energy --diff

Esimerkkituloste:

GPU 0: 46.64 Wh, avg power: 377.81 W (444.43 s)
GPU 2: 46.47 Wh, avg power: 376.46 W (444.43 s)
GPU 4: 46.18 Wh, avg power: 374.04 W (444.43 s)
GPU 6: 46.62 Wh, avg power: 377.62 W (444.43 s)
TOTAL: 185.91 Wh

Huomaa, että työkalu tulostaa energian vain parillisille GCD-numeroille. Tämä johtuu siitä, että AMD GPU:n energialaskuri tuottaa vain yhden arvon koko MI250x-kortille.

Mittaa GPU:n käyttö aina täydellä solmulla LUMIssa!

GPU:n energian mittaus LUMIssa on tehtävä täydellä solmulla, jotta tulokset ovat tarkkoja. Syynä on se, että MI250x-GPU:ssa on 2 GPU-dietä (GCD), mutta energialaskuri antaa yhden luvun koko MI250x:lle. Jos varaat yhden GCD:n, toinen ajo saattaa käyttää toista GCD:tä. Jos varaat 2 GCD:tä, ei ole mahdollista taata, että saat ne samalta kortilta.

Katso lisää käyttöesimerkkejä README.md-tiedostosta.

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta