Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

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:

  1. Tallentamalla seurantadatan supertietokoneen tiedostojärjestelmään (esim. /scratch/) ja tarkastelemalla tuloksia MLflow tracking UI:ssa selainkäyttöliittymässä.

  2. 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:

mlflow.set_tracking_uri("sqlite:////scratch/project_2001234/mlruns.db")

Sen sijaan, että asettaisit tracking URI:n Python-koodissa, voit myös asettaa sen ympäristömuuttujalla, esimerkiksi Slurm-työskriptissä:

export MLFLOW_TRACKING_URI=/scratch/project_2001234/mlruns

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:

mlflow.log_metric("loss", loss)

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:

MLflow-etusivu, jossa näkyy luettelo ajoista

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-kuvaaja, jossa näkyy loss-metriikka 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:

mlflow.set_tracking_uri("https://your-mlflow-app.rahtiapp.fi/")

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:

 export MLFLOW_TRACKING_USERNAME=mlflow
 export MLFLOW_TRACKING_PASSWORD=secretPassword123

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.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta