-
Koneoppimisen työnkulkujen hallinta CSC:n supertietokoneilla
Koneoppimisen työnkulkujen hallinta CSC:n supertietokoneilla
Tässä oppaassa käsitellään erilaisia tapoja hallita koneoppimisen työvuoita CSC:n supertietokoneilla. Se on osa koneoppimisen opastamme.
Sen sijaan, että tarjoaisimme yhden integroidun koneoppimisen työnkulkujärjestelmän, lähestymistapamme on tukea laajaa valikoimaa koneoppimisen työnkulkutyökaluja, jotta käyttäjät voivat valita tarpeisiinsa parhaiten sopivat ratkaisut.
MLflow
MLflow on avoimen lähdekoodin työkalu kokeiden ja mallien
seurantaan koneoppimisprojekteissa. Se sisältyy useimpiin valmiiksi
asennettuihin koneoppimisen moduuleihimme, kuten
python-pytorch, python-tensorflow ja python-data. Voit myös
helposti asentaa MLflow'n itse pip:llä (katso ohjeemme Python-pakettien
asentamisesta).
Dokumentoimme kaksi tapaa käyttää MLflow'ta CSC:n supertietokoneilla:
-
Tallennetaan seurantadata supertietokoneen tiedostojärjestelmään (esim.
/scratch/) ja tarkastellaan tuloksia MLflow tracking UI:ssa selainkäyttöliittymässä. -
Käytetään omaa MLflow tracking serveriä, joka voi olla käynnissä esimerkiksi CSC:n Rahti-palvelussa.
Vaihtoehto 1 on yksinkertaisempi ottaa käyttöön – lisää vain muutama rivi koodiisi ja avaa MLflow UI selainkäyttöliittymässä – mutta se ei välttämättä skaalaudu kovin hyvin satoihin ajoihin tai useille käyttäjille. Kehittyneempiin käyttötapauksiin suosittelemme vaihtoehtoa 2.
Ensin selitämme, miten koodiasi muokataan MLflow-seurannan käyttöönottoa varten.
Ajojen seuranta
MLflow-seurannan käyttöönotto Python-koodissa on helppoa. Jotkin kirjastot tukevat automaattista lokitusta MLflow'lla, mutta vaikka käyttämäsi kirjasto ei tukisi sitä, lokituksen voi lisätä vain muutamalla koodirivillä. Esimerkiksi:
import mlflow
mlflow.set_tracking_uri("/scratch/project_2001234/mlruns")
mlflow.start_run(run_name=os.getenv("SLURM_JOB_ID"))
Komennolla mlflow.set_tracking_uri() asetetaan sijainti, johon MLflow-tiedostot
tallennetaan; korvaa esimerkin polku oman projektisi sopivalla polulla.
Jos et aseta sijaintia, se luo hakemiston nimeltä mlruns nykyiseen
työhakemistoosi.
Hakemiston sijaan voit käyttää myös SQLite-tietokantaa; aloita tällöin
seurantasijainti merkkijonolla sqlite://, esimerkiksi:
Sen sijaan, että asettaisit tracking URI:n Python-koodissa, voit myös asettaa sen ympäristömuuttujalla, esimerkiksi Slurm-työskriptissä:
Ajolle ei ole pakollista asettaa nimeä, mutta yllä olevassa esimerkissä näytämme, miten Slurm-työn tunnusta voi käyttää nimenä.
Lopuksi siihen kohtaan koodissa, jossa lasket seurattavia metriikoita, täytyy lisätä rivi niiden seuraamiseksi MLflow'lla:
Täysi PyTorch-esimerkki löytyy tiedostosta mnist_ddp_mlflow.py tai PyTorch Lightningille tiedostosta mnist_lightning_ddp.py.
Metriikoiden lisäksi voit kirjata myös parametreja ja artefakteja. Katso MLflow-dokumentaatiosta lokitusfunktioiden luettelo.
MLflow tracking UI
Ajojen visualisointia ja seurantaa varten voit käynnistää MLflow tracking UI:n Roihun selainkäyttöliittymässä.
Käynnistääksesi sen kirjaudu selainkäyttöliittymään osoitteessa
https://www.roihu.csc.fi/ ja valitse "Apps"-valikosta "MLflow".
Lähetyslomakkeessa sinun täytyy valita, missä MLflow-tiedostot
sijaitsevat. Tämä on sama polku, jota käytit
mlflow.set_tracking_uri()-metodissa, eli tyypillisesti:
- hakemisto kuten
/scratch/<project>/mlruns/, tai - SQLite-tietokanta kuten
sqlite:////scratch/<project>/mlruns.db
Oletusresurssiasetukset sopivat useimpiin tapauksiin.
Kun istunto on käynnistynyt, sinun pitäisi nähdä luettelo ajoistasi, joka muistuttaa tätä kuvakaappausta:

Jos valitset ajon (tässä nimetty Slurm-tunnuksen perusteella), voit esimerkiksi napsauttaa "Metrics"-kenttää ja valita "loss", jolloin näet kuvaajan kyseisestä metriikasta ajan kuluessa:

MLflow tracking server
Kehittyneempiä käyttötapauksia varten voit haluta käyttää MLflow remote tracking serveriä. Tähän Roihun selainkäyttöliittymän tracking UI ei sovellu, koska siihen ei pääse verkon yli, eikä se yleensä olisi jatkuvasti käynnissä silloin kun sinun täytyy tallentaa siihen dataa.
Sopivampi alusta MLflow tracking serverin ajamiseen on CSC:n Rahti-palvelu. MLflow löytyy Rahti Software Catalogista. Katso käyttöoppaamme oman MLflow tracking serverin käynnistämisestä Rahdissa.
Kun palvelimesi on käynnissä Rahdissa, voit käyttää selainkäyttöliittymää.
Osoite löytyy Rahdista (Applications → Routes → mlflow-ui-route), ja se
on jotakin tämän kaltaista:
https://your-mlflow-app.rahtiapp.fi, riippuen siitä, minkä nimen annoit
sovellukselle käyttöönoton yhteydessä. Myös käyttäjätunnus ja salasana
ovat samat, jotka annoit käyttöönoton aikana.
Seuraavaksi muuta Python-skriptisi osoittamaan uuteen MLflow tracking serveriin:
Jälleen URL-osoite riippuu siitä, minkä nimen annoit sovellukselle Rahdissa. Lisäksi sinun täytyy asettaa kaksi ympäristömuuttujaa niillä käyttäjätunnuksella ja salasanalla, jotka annoit Rahti-sovellusta luodessasi, esimerkiksi:
Salasanan tallentaminen selväkieliseen tiedostoon, kuten Slurm-työskriptiin, ei ole kovin turvallista. Yksi vaihtoehto on antaa salasana komentorivillä ennen työn käynnistämistä. Jos lisäät export-komennon eteen yhden välilyönnin (kuten yllä), bash-komentotulkki ei tallenna komentoa (mukaan lukien salasanaa) historiaansa.