title: GPU-luotettu koneoppiminen
GPU-luotettu koneoppiminen
Tämä opas selittää GPU:iden käytön perusteet CSC:n supertietokoneissa. Se on osa Machine learning guide -opastamme.
Puhti, Mahti vai LUMI?
Puhti ja Mahti ovat CSC:n kaksi kansallista supertietokonetta. Puhtissa on enemmän GPU:ita (NVIDIA V100) ja laajin valikoima asennettua ohjelmistoa, kun taas Mahti sisältää pienemmän määrän nopeampia uuden sukupolven NVIDIA A100 GPU:ita. CSC:n isännöimä Eurooppalainen supertietokone LUMI tarjoaa valtavan GPU- resurssin, joka perustuu AMD GPU:ihin.
Pääasialliset GPU-aiheiset tilastot on kerätty alla olevaan taulukkoon.
GPU-tyyppi | GPU-muisti | GPU-solmut | GPU:ta/solmu | Yhteensä GPU:ta | |
---|---|---|---|---|---|
Puhti | NVIDIA Volta V100 | 32 GB | 80 | 4 | 320 |
Mahti | NVIDIA Ampere A100 | 40 GB | 24 | 4 | 96 |
LUMI | AMD MI250x | 64 (128) GB | 2978 | 8 (4) | 23824 (11912) |
Huomio
Jokaisessa LUMI-solmussa on 4 MI250x GPU:ta, mutta Slurmin kautta saatavilla on 8 GPU:ta, koska MI250x kortissa on 2 GPU-sirua (GCD). Taulukko näyttää GPU-siruun liittyvät numerot, MI250x korttinumerot on merkitty suluilla.
Lue GPU-solmujen käyttöpolitiikkamme. Huomioi myös, että eri supertietokoneiden välillä on erilaisia jonotustilanteita. Ota siis huomioon kaikki vaihtoehdot. Esimerkiksi LUMI:ssa on paljon GPU:ita, ja jonotusajat ovat lyhyitä (kesällä 2023).
Huomaa, että kaikissa supertietokoneissa on erilliset tiedostojärjestelmät, joten sinun on kopioitava tiedostosi manuaalisesti, jos haluat vaihtaa järjestelmää. Jos et ole varma, mitä supertietokonetta käyttää, Puhti on hyvä oletus, koska siinä on laajempi ohjelmistotuki.
Saatavilla oleva koneoppimisohjelmisto
Tuemme useita sovelluksia GPU-luotetulle koneoppimiselle CSC:n supertietokoneissa, mukaan lukien TensorFlow ja PyTorch. Lue tarkemmat ohjeet haluamasi sovelluksen kohdalla.
Sinun on käytettävä moduulijärjestelmää ladataksesi haluamasi sovellus, esimerkiksi:
Huomioithan, että moduuleihimme sisältyvät jo CUDA- ja cuDNN-kirjastot, joten cuda- ja cudnn-moduuleita ei tarvitse ladata erikseen!
LUMI:ssa sinun on ensin otettava käyttöön CSC:n asennusten moduulivarasto:
Lopuksi, Puhtissa tarjoamme joitakin erityissovelluksia, jotka eivät oletuksena näy moduulijärjestelmässä. Nämä on otettu käyttöön käyttäjien pyynnöstä, mutta niillä on rajallinen tuki. Ne voidaan ottaa käyttöön suorittamalla:
Oman ohjelmiston asentaminen
Monissa tapauksissa olemassa olevat moduulit tarjoavat tarvittavan kehyksen, mutta
jotkut paketit puuttuvat. Tässä tapauksessa voit usein ladata oikean moduulin ja
sitten asentaa lisäpaketteja henkilökohtaiseen käyttöön pip
-paketinhallinnan avulla.
Monimutkaisempia ohjelmistovaatimuksia varten suosittelemme käyttämään tykkyä tai luomaan oman Apptainer-kontin.
GPU-tehtävien suorittaminen
Lähettääksesi GPU-tehtävän Slurm-työkuorman hallintaan, sinun on käytettävä
gpu
-osuutta Puhtissa tai gpusmall
tai gpumedium
osuutta Mahtissa, ja määritä
tarvittavien GPU:iden tyyppi ja määrä --gres
-lipulla.
LUMI:ssa sinun on käytettävä yksi GPU-osuuksista, kuten dev-g
,
small-g
tai standard-g
.
Alla on esimerkki eräskripteistä yhden GPU:n ja vastaavan määrän CPU-ytimiä ja muistia varaamiseen yhdellä solmulla:
Mahtin gpusmall
-osuus tukee vain tehtäviä 1-2 GPU:lla. Jos tarvitset
lisää GPU:ita, käytä gpumedium
-jonoa. Voit lukea lisää
moni-GPU ja moni-solmu-tehtävistä opastamme.
Lisätietoja eri osuuksista löytyy sivuiltamme saatavilla olevista erätehtäväosuuksista CSC:n supertietokoneilla ja Slurm- osuudet LUMI:ssa.
GPU-käyttöaste
GPU:t ovat erittäin kallis resurssi verrattuna suorittimiin, joten GPU:ita tulisi hyödyntää mahdollisimman paljon, kun ne on varattu. Tarjoamme jotakin työkaluja suorittamaan GPU-työkuorman seuraamiseksi eri supertietokoneissa. GPU-käyttöasteen tulisi ihanteellisesti olla lähellä 100%. Jos käyttöasteesi on jatkuvasti alhainen (esimerkiksi alle 50%) se voi johtua useista syistä:
-
Sinulla saattaa olla pullonkaula prosessoinnissa, esimerkiksi sinun pitäisi käyttää tiedon latauskehystä (ja varata tarpeeksi CPU-ytimiä siihen) voidaksesi syöttää GPU:lle tietoa tarpeeksi nopeasti. Katso dokumentaatiomme moniytimisten CPU:iden käytöstä tiedon esikäsittelyyn.
-
Vaihtoehtoisesti voi yksinkertaisesti olla, että laskentaongelma on "liian pieni" GPU:lle, esimerkiksi jos hermoverkko on suhteellisen yksinkertainen. Tämä ei ole ongelma sinänsä, mutta jos käyttöasteesi on todella alhainen, voit harkita, olisiko CPU:iden käyttäminen kustannustehokkaampi ratkaisu.
Kuten aina, älä epäröi ottaa yhteyttä palvelupisteeseemme jos sinulla on kysymyksiä koskien GPU-käyttöä.
Työkalut GPU-käyttäytymisen seurantaan
seff
-komento suoritetulle työlle (Puhti ja Mahti)
Helpoin tapa tarkistaa suoritetun työn GPU-käyttöaste on
seff
-komento:
Tässä esimerkissä voimme nähdä, että maksimi käyttöaste on 100%, mutta keskimääräinen 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 työlle (Puhti ja Mahti)
Kun työ on käynnissä voit suorittaa nvidia-smi
-komennon ssh
:n
kautta solmulla, jossa se on käynnissä. Näet solmun isäntänimen
squeue --me
-komennolla. Tuloste voi näyttää 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-käytön seuraavasti
(korvaa <nodename>
oikealla solmun isäntänimelläsi):
Tuloste näyttää 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 5GB (32GB:sta) GPU-muistista, ja nykyinen GPU-käyttöaste on 100% (mikä on erittäin hyvä).
Jos haluat jatkuvasti päivittyvän näkymän:
Tämä päivittyy joka toinen sekunti, poistu painamalla Ctrl-C.
rocm-smi
käynnissä olevalle työlle (LUMI)
LUMI:ssä käytetään AMD GPU:ita, joten komento on hieman
eri: rocm-smi
. LUMI:ssä sinun on käytettävä srun
-komentoa kirjautuaksesi solmuun, jossa sinulla on käynnissä oleva työ:
Korvaa <jobid>
oikealla Slurm tehtävän tunnuksella. Voit myös käyttää
watch rocm-smi
saadaksesi jatkuvasti päivittyvän näkymän.
Usean CPU:n käyttäminen datan esikäsittelyyn
Yksi yleinen syy GPU-käytön alhaisuuteen on silloin, kun CPU ei voi ladata ja esikäsitellä tietoja tarpeeksi nopeasti, ja GPU:n on odotettava seuraavaa erää käsiteltäväksi. On tällöin yleistä käytäntöä varata enemmän CPU:ita suorittamaan tietojen lataus ja esikäsittely useissa rinnakkaisissa säikeissä tai prosesseissa. Hyvä nyrkkisääntö Puhtissa on varata 10 CPU:ta per GPU (koska jokaisessa solmussa on 4 GPU:ta ja 40 CPU:ta). Mahtissa voit varata enintään 32 ydintä, sillä se vastaa 1/4 solmusta. LUMI:ssa suosittelemme varaamaan 7 CPU-ydintä, koska siellä on 63 ydintä 8 GPU:lle. Muista, että CPU:t ovat paljon halvempia resursseja kuin GPU!
Saatat huomata, että olemme jo noudattaneet tätä neuvoa esimerkissämme työskriptit:
Ohjelmakoodisi on myös
tuettava esikäsittelyä usealla säikeellä.
Useimmat korkean tason koneoppimiskehykset tukevat tätä valmiiksi. Esimerkiksi
TensorFlow:ssä voit käyttää tf.data
ja asettaa num_parallel_calls
CPU:iden määrälle ja hyödyntää prefetch
:
PyTorch:ssa voit käyttää
torch.utils.DataLoader
,
joka tukee tietojen lataamista useilla prosesseilla:
Jos käytät useita tietolatureita, mutta datan lataus on edelleen 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ää miten tallentaa ja ladata tietoja tehokkaimmin koneoppimiseen erillisestä opastamme.
Profilointityökalut
TensorFlow Profiler ja PyTorch Profiler ovat saatavilla TensorBoard-liitännäisinä. Profiilit löytyvät PROFILE ja PYTORCH_PROFILER välilehdillä TensorBoardissa, vastaavasti. Huomaa, että välilehdet eivät välttämättä ole näkyvissä oletuksena, mutta ne löytyvät pudotusvalikosta käyttöliittymän oikeasta yläkulmasta. Profiilityökalut voidaan käyttää tunnistamaan resurssien kulutusta ja ratkomaan suorituskykyongelmia, erityisesti tiedonsyöttöputken osalta.
Katso myös:
GPU-energiankulutus
Ekologisista ja taloudellisista syistä on usein tarpeellista seurata koneoppimistehtävien energiankulutusta. Yksittäisen tehtävän, mukaan lukien CPU- ja GPU-prosessointi, verkkoyhteydet ja jäähdytys, kokonaisenergiankulutuksen mittaaminen on melko vaikeaa yleisesti, koska ne resurssit jaetaan monen tehtävän kesken ja voivat riippua useista tekijöistä, jotka eivät liity seurattavaan työhön. Onneksi vain GPU-iden energiankulutuksen mittaaminen on helpompaa, koska niitä ei yleensä jaeta monen tehtävän kesken. Koska GPU on ylivoimaisesti suurin energiankuluttaja, se antaa hyvän arvion kokonaisenergiankulutuksesta.
Työkalut GPU-energiankulutuksen seuraamiseen
seff
-komento suoritetulle työlle (Puhti ja Mahti)
Puhti- ja Mahti-järjestelmissä voit käyttää seff
työkalua
suoritetulle työlle:
Huomaa, että GPU-energiankulutus lasketaan vain työn suorituksen jälkeen, joten ajon aikana ei tulosteta välivaiheita.
Esimerkki tulosteesta, jossa olemme käyttäneet yhtä solmua neljällä GPU:lla:
gpu-energy
-työkalu (LUMI)
LUMI:lla ei ole seff
-komentoa, mutta siellä on kokeellinen
työkalu, jota voidaan käyttää lukemaan AMD GPU-kortin
löytymät energiankulutusmittarit. Työkalu ja dokumentointi
löytyvät täältä: https://github.com/mvsjober/gpu-energy-amd.
Se on esiasennettu LUMI-järjestelmään
polkuun /appl/local/csc/soft/ai/bin/gpu-energy
.
Tyypillinen käyttö Slurm-skriptissä:
Esimerkki tulosteesta:
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 parillisilla GCD-numeroilla, sillä AMD GPU-energiankulutusmittari antaa yhden luvun koko MI250x-kortille.
Mittaa aina GPU:n käyttö täyden solmun ajan LUMI:ssa!
GPU-energian mittaaminen LUMI:ssa on tehtävä täydellä solmulla, jotta tulokset saadaan tarkkoina. Syynä on, että MI250x GPU:ssa on 2 GPU-sirua (GCD), mutta energiankulutusmittari antaa yhden luvun koko MI250x:lle. Jos varaat yhden GCD:n, toinen ajo saattaa käyttää toista GCD:ta. Varaamalla 2 GCD:tä ei voida taata, että saat ne samalta kortilta.