Hyppää sisältöön

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

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 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.

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

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 kansallisista supertietokoneista uusin, ja se otettiin käyttöön kesäkuussa 2026. Vanhemmat supertietokoneet Puhti ja Mahti ajetaan alas kesän 2026 aikana, emmekä suosittele uusien projektien aloittamista niillä. Roihu-GPU, jolla viitataan Roihun GPU-puoleen, sisältää 528 GPU:ta (NVIDIA GH200), ja sen tavoitteena on tarjota suomalaisille tutkijoille laaja ohjelmistovalikoima.

CSC:n ylläpitämä eurooppalainen supertietokone LUMI tarjoaa valtavan GPU-resurssin, joka perustuu AMD:n GPU:ihin.

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 type GPU memory GPU nodes GPUs/node Total GPUs Notes
Roihu-GPU NVIDIA Hopper GH200 96 GB 132 4 528 Saatavilla kesäkuussa 2026
Puhti NVIDIA Volta V100 32 GB 80 4 320 Suljetaan heinäkuussa
Mahti NVIDIA Ampere A100 40 GB 24 4 96 Suljetaan elokuussa
LUMI AMD MI250x 64 (128) GB 2978 8 (4) 23824 (11912)

Huomio

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:tä). Yllä oleva taulukko näyttää GPU-die-kohtaiset luvut, ja MI250x-korttikohtaiset luvut on esitetty sulkeissa.

Lue myös GPU-solmujen käyttöehtomme. Huomioi myös, että Slurmin jonotustilanne voi vaihdella eri supertietokoneiden välillä eri aikoina, joten kaikkia vaihtoehtoja kannattaa tarkastella. Esimerkiksi LUMIssa on valtava määrä GPU:ita saatavilla, ja jonotusajat ovat tyypillisesti lyhyemmät kuin kansallisissa järjestelmissä.

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 yksityiskohtaiset ohjeet juuri siitä sovelluksesta, josta olet kiinnostunut.

Sinun täytyy 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 viitekehyksen, mutta joitakin paketteja puuttuu. 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 täytyy käyttää Roihu-GPU:ssa gpumedium-partitiota, Puhdissa gpu-partitiota tai Mahdissa gpusmall- tai gpumedium-partitiota, ja määrittää tarvittavien GPU:iden tyyppi ja määrä --gres-valitsimella.

LUMIssa sinun täytyy käyttää jotakin GPU-partitioista, 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=gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=10
#SBATCH --mem=64G
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1

# load any modules and run your program here
#!/bin/bash
#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gpusmall
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=32
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:a100:1

# 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-partitio, jonka käyttöoikeus edellyttää skaalautuvuustestiä

Mahdin gpusmall-partitio tukee vain 1–2 GPU:n ajoja. Jos tarvitset enemmän GPU:ita, käytä gpumedium-jonoa. Voit lukea lisää monen GPU:n ja monen solmun ajoista erillisestä opetusmateriaalistamme.

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

GPU:n käyttöaste

GPU:t ovat CPU:ihin verrattuna erittäin kallis resurssi, joten GPU:ita tulisi hyödyntää mahdollisimman tehokkaasti sen jälkeen, kun ne on varattu. Tarjoamme 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 matala (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 pystyt syöttämään dataa GPU:lle 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 matala, kannattaa harkita, olisiko CPU:iden käyttö kustannustehokkaampaa.

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

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

seff-komento valmiille ajolle (Puhti ja Mahti)

Helpoin tapa tarkistaa valmiin ajon GPU:n käyttöaste on käyttää seff-komentoa:

seff <job_id>

Tässä esimerkissä näemme, että suurin käyttöaste on 100 %, mutta keskiarvo on 92 % (tämä on hyvä taso):

GPU load 
     Hostname        GPU Id      Mean (%)    stdDev (%)       Max (%) 
       r01g07             0         92.18         19.48           100 
------------------------------------------------------------------------
GPU memory 
     Hostname        GPU Id    Mean (GiB)  stdDev (GiB)     Max (GiB) 
       r01g07             0         16.72          1.74         16.91 

nvidia-smi käynnissä olevalle ajolle (Roihu-GPU, Puhti ja Mahti)

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

   JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
17273947       gpu puhti-gp mvsjober  R       0:07      1 r01g06

Näet solmun isäntänimen NODELIST-sarakkeesta; tässä tapauksessa se on r01g06. 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ää jotakuinkin tältä:

Wed Jun 14 09:53:11 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.105.01   Driver Version: 515.105.01   CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| 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  Tesla V100-SXM2...  On   | 00000000:89:00.0 Off |                    0 |
| N/A   57C    P0   232W / 300W |   5222MiB / 32768MiB |    100%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A   2312753      C   /appl/soft/ai/bin/python3        5219MiB |
+-----------------------------------------------------------------------------+

Tästä näemme, että prosessimme käyttää noin 5 Gt (32 Gt:sta) GPU-muistia ja että tämänhetkinen GPU:n käyttöaste on 100 % (mikä on erittäin hyvä).

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

ssh r01g06 -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:n GPU:ita, joten komento on hieman erilainen: rocm-smi. LUMIssa sinun täytyy 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 matalaan GPU:n 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 tavallista 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 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 suoraan. Esimerkiksi TensorFlow’ssa voit käyttää tf.data-rajapintaa ja asettaa num_parallel_calls-arvoksi varattujen CPU:iden määrän sekä hyödyntää prefetch-toimintoa:

dataset = dataset.map(..., num_parallel_calls=10)
dataset = dataset.prefetch(buffer_size)

PyTorchissa voit käyttää torch.utils.DataLoader-luokkaa, joka tukee datan lataamista useilla prosesseilla:

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

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ää datan tallentamisesta ja lataamisesta koneoppimisen kannalta tehokkaimmalla tavalla erillisestä opetusmateriaalistamme.

Profilointityökalut

TensorFlow Profiler ja PyTorch 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

seff-komento valmiille ajolle (Puhti ja Mahti)

Puhdissa ja Mahdissa voit käyttää valmiille ajolle seff-työkalua:

seff <job_id>

Huomaa, että GPU:n energiankulutus lasketaan vasta ajon päätyttyä, joten sen ollessa käynnissä ei tulostu väliaikaista arvoa.

Esimerkkituloste tilanteessa, jossa on käytetty yhtä solmua ja 4 GPU🇹🇦

GPU energy
      Hostname        GPU Id   Energy (Wh)
        r01g01             0         58.30
        r01g01             1         56.63
        r01g01             2         44.87
        r01g01             3         62.21

Roihu-GPU:ssa ei vielä ole tätä sisäänrakennettua tukea GPU:n energiankulutuksen seurantaan.

gpu-energy-työkalu (LUMI)

LUMIssa ei ole seff-komentoa, mutta siellä on yksinkertainen työkalu, jolla voidaan lukea AMD:n GPU-kortilta löytyviä GPU:n 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ä se tulostaa energian vain parillisille GCD-numeroille, koska AMD:n GPU:n energialaskuri tuottaa vain yhden arvon koko MI250x-kortille.

Mittaa GPU:n käyttö aina täydelle solmulle LUMIssa!

GPU:n energian mittaus LUMIssa täytyy tehdä täydellä solmulla, jotta tulokset ovat tarkkoja. Syynä on se, että MI250x-GPU:ssa on 2 GPU-dietä (GCD:tä), mutta energialaskuri antaa yhden luvun koko MI250x:lle. Jos varaat yhden GCD:n, toinen ajo saattaa käyttää toista GCD:tä. Vaikka varaisit 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