-
GPU-kiihdytetty koneoppiminen
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:
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:
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:
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ä):
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:
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:
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:
PyTorchissa voit käyttää torch.utils.DataLoader-luokkaa, joka tukee datan lataamista useilla prosesseilla:
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:
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
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ä:
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.