-
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 koneoppimisopastamme.
Sen sijaan, että tarjoaisimme yhden integroidun koneoppimisen työnkulkujärjestelmän, lähestymistapamme on tukea laajaa valikoimaa ML-työvuotyö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
pytorch, 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:
-
Tallentamalla seurantadatan supertietokoneen tiedostojärjestelmään (esim.
/scratch/) ja tarkastelemalla tuloksia MLflow tracking UI:ssa selainkäyttöliittymässä. -
Käyttämällä omaa MLflow tracking serveriäsi, joka voi olla käynnissä esimerkiksi CSC:n Rahti-palvelussa.
Vaihtoehto 1 on yksinkertaisempi aloittaa – 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. Edistyneempiin käyttötapauksiin suosittelemme vaihtoehtoa 2.
Ensin selitämme, miten koodiasi muokataan MLflow-seurannan ottamiseksi käyttöön.
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ötunnusta voi käyttää nimenä.
Lopuksi siihen kohtaan koodissa, jossa lasket seurattavat metriikat, täytyy lisätä rivi niiden seuraamiseksi MLflow’lla:
Täydellinen 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 Puhdin selainkäyttöliittymässä.
Käynnistääksesi sen kirjaudu selainkäyttöliittymään osoitteessa
https://www.puhti.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 funktiona:

MLflow tracking server
Edistyneemmissä käyttötapauksissa saatat haluta käyttää MLflow remote tracking serveriä. Tähän tarkoitukseen Puhdin selainkäyttöliittymän tracking UI ei sovellu, koska siihen ei pääse verkosta, eikä se tyypillisesti olisi jatkuvasti käynnissä silloin kun sinun täytyy tallentaa siihen dataa.
Sopivampi alusta MLflow tracking serverin ajamiseen on CSC:n Rahti-palvelu. Olemme tarjonneet valmiin MLflow-mallin Rahin palvelukatalogissa, mikä tekee MLflow tracking serverin käynnistämisestä helppoa. Katso käyttöoppaamme oman MLflow tracking serverin käynnistämisestä Rahdissa. Tarjolla on jopa hieno video!.
Voit myös määrittää sen käyttämään Allasta artefaktien tallennukseen.
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öönottovaiheessa.
Muuta seuraavaksi 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.