Alle som har prøvd utvikling av maskinlæring forstår hvor vanskelig det er. Bortsett fra standardproblemene innen programvareutvikling, introduserer utvikling av maskinlæring (ML) en rekke ekstra hindringer.
Hundrevis av åpen kildekode-verktøy er tilgjengelig for å hjelpe med alle stadier av ML-livssyklusen, fra dataforberedelse til modellopplæring.
I motsetning til tradisjonell programvareutvikling, når team velger ett verktøy for hvert trinn, vil du med ML vanligvis utforske alle tilgjengelige verktøy (f.eks. algoritmer) for å se om det forbedrer resultatene.
Som et resultat må ML-utviklere bruke og produsere hundrevis av biblioteker.
Maskinlæringsalgoritmer inneholder tusenvis av tilpassbare parametere, og det er vanskelig å identifisere hvilke parametere, kode og data som gikk inn i hvert eksperiment for å generere en modell, enten du jobber alene eller i et team.
Uten skikkelig overvåking sliter team ofte med å få den samme koden til å fungere igjen. Enten du er en dataforsker som overfører opplæringskoden din til en ingeniør for produksjonsbruk, eller du går tilbake til ditt tidligere arbeid for å diagnostisere et problem, er det avgjørende å trekke trinnene i ML-arbeidsflyten tilbake.
Å flytte en modell til produksjon kan være vanskelig på grunn av de mange distribusjonsmetodene og miljøene som må brukes (f.eks. REST-servering, batch-inferens eller mobilapper). Det er ingen vanlig metode for å flytte modeller fra noe bibliotek til noen av disse verktøyene, og dermed introduserer hver ny distribusjon en risiko.
På grunn av disse problemene er det åpenbart at ML-utvikling må forbedres betydelig for å bli like stabil, forutsigbar og mye brukt som tradisjonell programvareutvikling.
ML utfordringer
- Det finnes en mengde forskjellige verktøy. Hundrevis av programvareløsninger er tilgjengelige for å hjelpe med alle stadier av livssyklusen for maskinlæring, fra dataforberedelse til modellopplæring. I motsetning til tradisjonell programvareutvikling, når team velger ett verktøy for hvert trinn, i maskinlæring (ML), ønsker du ofte å utforske alle tilgjengelige verktøy (f.eks. algoritmer) for å se om det forbedrer resultatene. Som et resultat må ML-utviklere bruke og produsere hundrevis av biblioteker.
- Det er vanskelig å holde styr på eksperimenter. Maskinlæringsalgoritmer inneholder tusenvis av tilpassbare parametere, og det er vanskelig å identifisere hvilke parametere, kode og data som gikk inn i hvert eksperiment for å generere en modell, enten du jobber alene eller i et team.
- Det er vanskelig å implementere maskinlæring. Å flytte en modell til produksjon kan være vanskelig på grunn av de mange distribusjonsmetodene og miljøene som må brukes (f.eks. REST-servering, batch-inferens eller mobilapper). Det er ingen vanlig metode for å flytte modeller fra et bibliotek til noen av disse verktøyene. Dermed introduserer hver ny distribusjon en risiko.
Hva er MLflow?
MLflow er en åpen kildekode-plattform for livssyklusen for maskinlæring. Den er basert på et konsept med åpent grensesnitt, og foreslår mange essensielle abstraksjoner som gjør at gjeldende infrastruktur og maskinlæringsalgoritmer lett kan integreres med systemet.
Dette innebærer at hvis du er en utvikler som ønsker å bruke MLflow, men bruker et rammeverk som ikke støttes, gjør det åpne grensesnittdesignet det relativt enkelt å integrere det rammeverket og begynne å jobbe med plattformen. I praksis innebærer dette at MLflow er ment å fungere med evt maskinlæring bibliotek eller språk.
Videre fremmer MLflow repeterbarhet, noe som betyr at den samme opplærings- eller produksjonsmaskinlæringskoden er ment å kjøre med de samme resultatene uavhengig av miljøet, enten det er i skyen, på en lokal arbeidsstasjon eller i en bærbar PC.
Endelig er MLflow bygget for skalerbarhet, slik at det kan brukes av et lite team av dataforskere så vel som et stort selskap med hundrevis av maskinlæringsutøvere.
MLflow er kompatibel med alle maskinlæringsbiblioteker, algoritmer, distribusjonsverktøy eller språk. Den har også følgende fordeler:
- Designet for å fungere med alle skytjenester.
- Skalerer til enorme data med Apache Spark.
- MLflow er kompatibel med en rekke åpen kildekode maskinlæringsrammeverk, inkludert Apache Spark, tensorflowog SciKit-Learn.
Hvis du allerede har kode, kan MLflow brukes med den. Du kan til og med dele rammeverket og modellene dine mellom bedrifter fordi det er det åpen kildekode.
MLflow-komponenter: Hvordan fungerer de?
MLflow er en gratis og åpen kildekode-plattform for å administrere ML-livssyklusen, som inkluderer eksperimentering, reproduserbarhet, distribusjon og et enkelt modellregister. For øyeblikket har MLflow fire komponenter:
1. MLflow-sporing
Jeg skal begynne med MLflow Tracking. MLflow støtter samlingen av ulike essensielle konsepter knyttet til et sentralisert treningsmetadatasporingslager. Den første ideen er en samling av kritiske hyperparametre eller konfigurasjonsknapper som påvirker modellens ytelse. Å bruke MLflows APIer og en sentralisert sporingstjeneste kan bevare alle disse.
Brukere kan også registrere ytelsesdata for å få innsikt i suksessen til maskinlæringsmodellene deres. Videre, for repeterbarhet, lar MLflow brukere logge den spesifikke kildekoden som ble brukt til å lage en modell, så vel som versjonen ved å integrere med Git for å knytte hver modell til en spesifikk commit-hash.
MLflow kan brukes til å logge artefakter, som er alle vilkårlige filer, inkludert trening, testdata og selve modellene for reproduserbarhet.
Dette betyr at hvis jeg er en utvikler som nettopp har trent en modell, kan jeg fortsette den til den sentraliserte sporingstjenesten, og en av mine kolleger kan laste den inn senere og enten fortsette å trene og eksperimentere eller produsere den modellen for å møte et spesifikt behov .
Når du kjører maskinlæringskoden din og ser på resultatene etterpå, er sporing et API som lar deg logge parametere, kodeversjoner, beregninger og utdatafiler. Den er skrevet på Python, R og Java, blant andre språk. Den er også tilgjengelig som en REST API, som kan brukes til å bygge apper på toppen av den.
Viktige funksjoner
- Mange utviklere bruker MLflow på sin lokale PC, der backend og artefaktlagring deler en katalog på platen.
- Mange brukere bruker også SQLite, en SQLAlchemy-kompatibel database, for å kjøre MLflow på sine lokale PC-er.
- MLflow støtter også distribuerte arkitekturer. Sporingsserveren, backend-butikken og artefaktbutikken er alle vert på forskjellige servere i disse.
- Hvis kjøringen ble initiert av et MLflow-prosjekt, ble git commit-hashen brukt. MLflow Python, R, Java og REST APIer kan brukes til å logge data som skal kjøres.
For mer informasjon, kan du sjekke ut den offisielle dokumentasjon.
2. MLFlow-prosjekter
Etter at vi har gått gjennom sporingskomponentene, vil jeg gjerne snakke om MLflow-prosjekter, som er en repeterbar pakkestruktur for modelltreningsøkter uavhengig av utførelseskonteksten.
Bedrifter bruker et bredt spekter av opplæringsteknologier for maskinlæring, men de bruker også disse opplæringsverktøyene i et mangfoldig sett av sammenhenger. For eksempel kan de kjøre treningskoden sin på skyen, på en lokal PC eller i en bærbar PC.
Dette fører til problemet at maskinlæringsresultater er vanskelige å replikere. Ofte kjører ikke den samme identiske treningskoden eller gir de samme resultatene på to separate steder.
Løsningen levert av MLflow er en selvstendig opplæringskodeprosjektdefinisjon som inkluderer all maskinlærings-treningskoden, så vel som versjonsbibliotekets avhengigheter, innstillinger og opplærings- og testdata.
MLflow sikrer reproduserbarhet på tvers av utførelseskontekster ved å tydelig beskrive hele settet med krav til en opplæringsprosess for maskinlæring. Den oppnår dette ved å installere alle disse bibliotekene og oppnå samme systemtilstand som koden kjører i.
MLflow-prosjektet er ikke noe mer enn en katalog. Det er en katalog som inkluderer treningskoden, bibliotekavhengighetsdefinisjonen og andre data som er nødvendige for treningsøkten, samt denne valgfrie konfigurasjonsfilen.
Disse bibliotekkravene kan defineres på en rekke måter. Brukere kan for eksempel levere en YAML-formatert anaconda-miljøspesifikasjon for å liste opp kravene til treningskodebiblioteket deres. MLflow vil utføre opplæringskoden i containeren. I et slikt tilfelle kan de også inkludere en Docker-beholder.
Til slutt har MLflow et kommandolinjegrensesnitt (CLI) for å kjøre disse prosjektene, samt Python og Java APIer. Disse prosjektene kan kjøres på brukerens lokale system så vel som i en rekke eksterne innstillinger som Databricks jobbplanlegger og Kubernetes. MLflow-prosjekter lar deg pakke datavitenskapelig kode på en repeterbar og gjenbrukbar måte, hovedsakelig basert på standarder.
Prosjektkomponenten inkluderer en API samt kommandolinjeverktøy for å administrere prosjekter. Disse egenskapene garanterer at prosjekter kan lenkes sammen for å danne maskinlæringsprosesser.
Viktige funksjoner
- MLflow støtter prosjektmiljøer, inkludert Docker containermiljø, Conda-miljø og systemmiljø.
- Ethvert Git-lager eller lokal katalog kan betraktes som et MLflow-prosjekt; som standard; du kan bruke hvilket som helst skall eller Python-manus i katalogen som et prosjektinngangspunkt.
- Ikke-Python-avhengigheter, for eksempel Java-biblioteker, kan fanges opp ved hjelp av Docker-beholdere.
- Du kan få større kontroll over et MLflow-prosjekt ved å legge til en prosjektfil i prosjektets rotkatalog, som er en tekstfil i YAML-syntaks.
For mer informasjon, kan du sjekke ut den offisielle dokumentasjon.
3. MLflow-modeller
Nå vil jeg gjerne diskutere MLflow-modeller, et generell modellformat som støtter et bredt spekter av produksjonskontekster. Årsaken til MLflow-modeller er nå ganske lik den for prosjekter.
Igjen ser vi at modeller kan genereres ved hjelp av et bredt spekter av verktøy, men de kan også produseres eller distribueres i et stort spekter av situasjoner, i motsetning til treningsmiljøer.
Disse innstillingene inkluderer verktøy for sanntidsservering, for eksempel Kubernetes eller Amazon SageMaker, samt streaming og batch-scoring, for eksempel Spark. Videre kan noen virksomheter velge å distribuere modeller som en RESTful webtjeneste som kjører på en forhåndskonfigurert skyforekomst.
En MLflow-modell, som et prosjekt, er en katalogstruktur. Den inkluderer en konfigurasjonsfil og denne gangen en serialisert modellartefakt i stedet for treningskode. Det inkluderer også dette settet med avhengigheter for repeterbarhet som et prosjekt. Denne gangen skal vi se nærmere på evalueringsavhengigheter i sammenheng med et Conda-miljø.
I tillegg inkluderer MLflow modellgenereringsverktøy for serialisering av modeller i MLflow-format fra en rekke populære rammeverk. Til slutt legger MLflow til distribusjoner, APIer for produksjon og tilkobling av enhver MLflow-modell til en rekke tjenester, og disse APIene er tilgjengelige i Python, Java, R og et CLI-format.
Modeller er en komponent med en standardstruktur for pakkemodeller som kan brukes og forstås av nedstrømsverktøy som slutningsservere eller Databaser batch inferencing plattform. Denne komponenten sparer timer med skreddersydd kode når du pakker en modell for produksjon.
MLflow-modellen er en standard for pakking av maskinlæringsmodeller i en rekke former kjent som "smaker". MLflow tilbyr mange verktøy for å hjelpe deg med å distribuere ulike typer modeller. Hver MLflow-modell holdes som en katalog som inneholder vilkårlige filer samt en ML-modellbeskrivelsesfil med en liste over smakene den kan brukes i.
Viktige funksjoner
- Alle MLflows innebygde distribusjonsverktøy tilbyr flere "standard" smaker, for eksempel en "Python-funksjon"-smak som forklarer hvordan du kjører modellen som en Python-funksjon.
- Hver MLflow-modell består av en katalog som inneholder vilkårlige filer, samt en ML-modellfil ved katalogens rot som definerer modellens mange smaker.
- Når du lagrer en modell, lar MLflow deg spesifisere en Conda-miljøparameter som inneholder modellens avhengigheter. Hvis ingen Conda-miljø er spesifisert, konstrueres et standardmiljø basert på modellens smak. Etter det lagres Conda-miljøet i conda.yaml.
For mer informasjon, kan du sjekke ut den offisielle dokumentasjon.
4. MLflow modellregister
Et modellregister er et depot for lærte maskinlæringsmodeller (ML). Model Registry består av APIer og en nettbasert applikasjon som brukes til å vedlikeholde modeller i ulike faser som et team. Model Lineage, Model Versioning, Easy Stage Transition og Annotation er bare noen av funksjonene som er tilgjengelige i Model Registry.
Et modellregister inneholder i tillegg til selve modellene informasjon (metadata) om data og opplæringsoppgaver som brukes til å konstruere modellen. Det er avgjørende å holde styr på disse nødvendige inngangene for å skape avstamning for ML-modeller. I denne forbindelse fungerer et modellregister på samme måte som konvensjonell programvare versjonskontroll systemer (f.eks. Git, SVN) og artefaktlager (f.eks. Artifactory, PyPI).
Model Registry er et rammeverk som lar dataforskere og maskinlæringsingeniører publisere, teste, overvåke, administrere og distribuere modellene deres for samarbeid med andre team. I hovedsak brukes modellregisteret når du har fullført testfasen og er klar til å dele funnene dine med teamet og interessentene.
MLflow Model Registry gir en API og et brukergrensesnitt for å administrere modellene dine og deres levetid fra et sentralt sted. Modellavstamning, modellversjon, merknader og sceneoverganger er alle tilgjengelige gjennom registeret.
I MLflow er en registrert modell den med et unikt navn og metadata, modellversjoner, overgangsfaser og en modelllinje. En eller flere modellversjoner kan finnes i en registrert modell. En ny modell regnes som versjon 1 når den er registrert i registeret. Følgende versjon legges til enhver ny modell med samme navn.
Du kan tilordne ett trinn til en hvilken som helst modellversjon når som helst. Stadier må imidlertid tildeles under MLflow-fasene som er formelt spesifisert, for eksempel iscenesettelse, produksjon og arkivering. En modellversjon kan overføres fra et trinn til et annet.
MLflow lar deg bruke markdown for å kommentere både toppnivåmodellen og hver spesifikke versjon. Du kan inkludere beskrivelser så vel som annen relevant informasjon, for eksempel algoritmeforklaringer, metodikk og datasett som brukes.
Viktige funksjoner
- For å få tilgang til modellregisteret gjennom UI eller API når du er vert for din egen MLflow-server, må du bruke en databasestøttet backend-butikk.
- Model Registry kan også nås via MLflow-modellen eller MLflow Client Tracking API-grensesnittet. Du kan for eksempel registrere en modell under en MLflow-eksperimentkjøring eller etter alle eksperimentkjøringene.
- Ikke alle vil begynne å trene modellene sine ved å bruke MLflow. Som et resultat kan du ha noen modeller trent før du bruker MLflow. I stedet for å omskolere modellene, ønsker du bare å registrere de lagrede modellene dine i modellregisteret.
For mer informasjon, kan du sjekke ut den offisielle dokumentasjon.
konklusjonen
MLflow er et utmerket og stadig voksende ML livssyklusverktøy. Du kan bruke det sammen med dine nåværende verktøy og plattformer.
Den støtter flere programmeringsspråk, inkludert Python, Java og R. Du kan også raskt spore, lagre og sammenligne forskjellige modellversjoner takket være den brukervennlige designen.
Gi MLflow en sjanse og gi oss beskjed om din erfaring!
Legg igjen en kommentar