Krijoni projekte ML të riprodhueshme dhe fleksibël

Prezantimi

A ju mërzit ndonjëherë kur njerëzit vazhdojnë të thonë se specialistët e të dhënave shpenzojnë 80% të kohës së tyre duke pastruar të dhënat? Ndërsa është e vërtetë, një pjesë tjetër e rrjedhës së punës së mësimit të makinerive meriton po aq vëmendje, dhe ky është eksperimentimi i të mësuarit me makinë.

Të mbash gjurmët e shumë modeleve të mësimit të makinerive dhe hiperparametrave të tyre është si të përpiqesh të mbash pesë qen në një vaskë. Pa ndihmë, është e pamundur të mos lejoni që njëra prej tyre t'ju rrëshqasë nga duart. Ju duhet diçka fleksibël dhe e fuqishme për të organizuar çdo eksperiment, të gjitha detajet, kodin dhe të dhënat e tyre.

Duke pasur një bazë të dhënash të së vërtetës për të gjitha sprovat tuaja, ju mundëson t'i kushtoni vëmendjen tuaj të plotë shkrimit të kodit në vend që të shqetësoheni për problemet e infrastrukturës.

Në këtë artikull, do të mësoni rreth teknikave të fuqishme për gjurmimin e eksperimenteve në mësimin e makinerive. Konkretisht:

  1. Çfarë është MLflow dhe bazat e API-së së tij të gjurmimit.
  2. Si të lidhni MLflow me DagsHub për UI më të mirë dhe ruajtje falas
  3. Zhytuni thellë në rrjedhën e punës MLflow dhe mësoni se si të aktivizoni regjistrimin automatik për kornizat e njohura të ML
  4. Përdorimi i regjistrimit të klientit DagsHub për gjurmimin e eksperimenteve të lehta duke përdorur git
  5. Përdorimi i skedës së eksperimenteve të DagsHub për të menaxhuar të gjitha eksperimentet tuaja dhe rezultatet e tyre

Çfarë është gjurmimi i eksperimentit në mësimin e makinerive?

Pas çdo modeli të suksesshëm në prodhim, fshihen shumë eksperimente dhe ide të dështuara. Ju nuk mund të përfundoni në mënyrë magjike me modelin e përsosur pa bërë përpjekje për të organizuar rrjedhën tuaj të punës dhe mënyrën se si i qaseni çdo ideje të re.

Gjurmimi i eksperimentit në mësimin e makinerive ka të bëjë me ruajtjen dhe versionimin e detajeve (meta të dhënave) përkatëse në lidhje me çdo eksperiment. Në varësi të pritshmërive dhe kërkesave tuaja të biznesit, këto detaje mund të ndryshojnë, por këtu janë ato më të rëndësishmet që ju nevojiten për pothuajse çdo projekt:

  • Metrikat e trajnimit dhe testimit
  • Hiperparametrat dhe struktura e modelit
  • Koha e ekzekutimit
  • Varësitë e modelit
  • Kodi për të riprodhuar eksperimentin
  • Të dhënat e nevojshme për të trajnuar modelin, etj.

Pa mjetet e duhura, do ta keni jashtëzakonisht të rëndë të mbani gjurmët e kaq shumë gjërave me dorë.

Pse të shqetësoheni me gjurmimin e eksperimentit?

Gjurmimi i eksperimentit nuk ka të bëjë me ruajtjen e një grumbulli të madh modelesh dhe hiperparametrash. Ka të bëjë me mbajtjen e gjurmëve të asaj që funksionon dhe çfarë jo.

Në çdo projekt serioz, do të provoni shumë lloje modelesh dhe arkitekturash, dhe është e lehtë të humbisni kuptimin e këtyre detajeve. Duke pasur një bazë të dhënash të të gjitha ideve tuaja dhe rezultateve të tyre, mund të përqendroheni në përmirësimin e prototipeve të punës në vend që të shqetësoheni për të gjitha detajet e bezdisshme të dështimeve.

Përveç kësaj, mund të ketë shumë "modele më të mira" në një projekt të vetëm. Pasja e një depoje të përbashkët për të gjitha eksperimentet tuaja e bën të lehtë renditjen e tyre sipas kërkesave të ndryshme. Në varësi të kufizimeve tuaja, ju mund të zgjidhni modelin me rezultatin më të mirë të vlefshmërisë, ose atë me kohën më të shkurtër të ekzekutimit, ose atë me më pak parametra nëse shpjegueshmëria është shqetësimi juaj kryesor.

Dhe mënyra më e mirë për të filluar me gjurmimin e eksperimenteve është duke përdorur mjete të testuara në betejë që përfshijnë të gjithë funksionalitetin që ju nevojitet në vend që të shpikni timonin.

Konfigurimi

Përpara se të fillojmë me bibliotekat e përdorura për gjurmimin e eksperimentit, le të kryejmë disa konfigurime.

Edhe pse mund ta lexoni vetë këtë artikull, është pjesa e dytë e projektit që kam bërë duke përdorur të dhënat e konkursit Pet Pawpularity nga Kaggle. Projekti synon të parashikojë rezultatin e bukurisë së një kafshe shtëpiake duke pasur parasysh imazhin dhe metadatat e saj.

pjesën e parë, shpjegova qasjen time për zgjidhjen e problemit, mjetet që kam përdorur dhe hodha shikimin e parë në imazhet dhe metadatat e tyre. Unë ju sugjeroj të lexoni seksionin EDA për t'u njohur.

Ju gjithashtu mund të ekzekutoni komandat e mëposhtme për të shkarkuar depon në mjedisin tuaj dhe për të vendosur varësitë.

Vini re se skedarët e të dhënave janë më shumë se 1 GB, kështu që komanda e fundit dvc pull kërkon pak kohë për t'u përfunduar. Gjithashtu, ka shumë varësi të rënda për t'u instaluar.

Në rast se nuk dëshironi të kryeni hapat e mësipërm, ju rekomandoj të instaloni vetëm këto biblioteka dhe të shkarkoni CSV të meta të dhënave të imazheve:

Ata do të jenë të mjaftueshëm për t'u ndjekur.



Merrni letrat më të mira dhe më të fundit të ML dhe AI ​​të zgjedhura dhe të përmbledhura nga një AI i fuqishëm - Sinjali Alfa:



Bazat e eksperimenteve të regjistrimit me MLflow

Një nga paketat më të mira me burim të hapur për eksperimentimin e mësimit të makinerive është MLflow. Megjithëse tërheqja kryesore e tij është API-ja e gjurmimit të eksperimentit, ai ka funksionalitete për të paketuar projektet ML dhe për t'i vendosur ato në prodhim. Ne do të përqendrohemi vetëm në API-në e tij të gjurmimit sot.

API-ja e gjurmimit është projektuar në mënyrën më të drejtpërdrejtë të mundshme. Pas importimit të bibliotekës, mund të filloni të regjistroni parametrat e modelit dhe rezultatet e eksperimentit menjëherë. Këtu është një shembull:

Këto dy komanda bazë gjenerojnë një cache të veçantë brenda direktorisë rrënjë të quajtur mlruns. Ja si duket:

Tani për tani, gjithçka që duhet të dini për këto drejtori është që t'i mbani gjithmonë gjurmët e tyre duke përdorur një mjet kontrolli versioni si Git ose DVC. Pasi të keni mjaft eksperimente për të krahasuar, mund të ekzekutoni komandën mlflow ui në terminal:

Por kjo ndërfaqe e serverit lokal do të jetë e dukshme vetëm për ju. Një opsion më i mirë është përdorimi i një serveri gjurmues falas në mënyrë që të gjithë skedarët MLflow të ruhen nga distanca dhe të jenë të dukshëm për të gjithë të tjerët. Këtu hyn DagsHub.

Siç u përmend në artikullin e fundit, DagsHub është GitHub për shkencëtarët e të dhënave. Përveç kodit të pritjes, ai ka sisteme të dedikuara ruajtjeje për kontrollin e versionit të të dhënave (DVC) dhe gjurmimin e eksperimentit me MLflow. Çdo depo në DagsHub ekspozon një URI gjurmimi në distancë për MLflow. Këtu është ai për "repo e projektit tim Pet Pawpularity":

Për të filluar dërgimin e detajeve të eksperimentit te ky server gjurmimi, këtu janë hapat që duhet të ndërmerrni:

Pas importimit të MLflow, vendosni URI-në e gjurmimit në lidhjen në faqen tuaj të repos. Më pas, vendosni dy variabla mjedisi për emrin e përdoruesit dhe fjalëkalimin tuaj në DagsHub, të cilat gjenden nën cilësimet e llogarisë tuaj DagsHub.

Nëse nuk doni të shtoni informacione të ndjeshme në skriptet tuaja dhe t'i angazhoni ato aksidentalisht në git, mund të krijoni variabla mjedisi nga sistemi. Ja se si e bëni atë në Windows:

Ose në MacOS:

Tani, të gjitha eksperimentet do të regjistrohen në DagsHub, i cili do të jetë i dukshëm nën skedën Eksperimente. Ja se si duket për projektin Pet Pawpularity (këtu është një link):

Të gjitha këto eksperimente u regjistruan manualisht duke përdorur hapat që kam paraqitur në fillim. Unë kam përdorur modelet XGBoost, LGBM, CatBoost, Sklearn dhe Keras.

Kjo skedë eksperimentesh ka të gjithë funksionalitetin që ka ndërfaqja origjinale e MLFlow dhe ofron shumë më tepër fleksibilitet dhe dizajn. Ne do të diskutojmë veçoritë e skedës së eksperimenteve më vonë.

Zhytje e thellë në rrjedhën e punës MLflow

Deri më tani, ne nuk e kemi parë fluksin e premtuar të automatizuar të punës të MLflow dhe API-në e tij të gjurmimit. Kemi regjistruar manualisht parametrat dhe matjet duke përdorur log_params ose log_metrics.

Kjo qasje do të bëhet e lodhshme pas një kohe, sepse ne ende po i nxjerrim vetë parametrat dhe matjet. Përveç kësaj, do të ishte më shumë punë dhe kod për të regjistruar parametra shtesë si koha e funksionimit, arkitektura e modelit për rrjetet nervore, etj.

MLflow ekspozon klasa të veçanta të regjistrimit automatik për shumë korniza të njohura ML për të zgjidhur këtë problem. Ja disa prej tyre:

Këto klasa të regjistrimit automatik regjistrojnë parametrat e një modeli, matjet e tij të trajnimit dhe, kurdoherë që janë të disponueshme, përshtaten parametrat si ndalimi i hershëm, epokat dhe të ngjashme. Në rastin e Sklearn, klasa sklearn.autolog regjistron gjithashtu rezultatet e provave të akordimit të hiperparametrave me GridSearch ose rezultatet e objekteve të Pipeline.

Le të shohim së pari një shembull të kësaj klase:

Ju nuk duhet të kuptoni gjithçka që po ndodh në kod, pasi ka disa funksione të personalizuara. Por nëse jeni kurioz, këtu është një përmbledhje e nivelit të lartë:

  • Rreshti 10: Funksioni get_metadata ngarkon CSV-në e trajnimit të meta të dhënave të Pet Pawpularity dhe kthen dy grupe.
  • Rreshti 12 inicializon një shembull RandomForestRegressor.

Pjesa kryesore fillon me rreshtin 20, kur ne telefonojmë menaxherin e kontekstit start_run. Rrjedha e punës MLflow bazohet në konceptin e drejtimeve. Një ekzekutim mund të jetë një copë kodi i shkruar nën këtë menaxher të kontekstit start_run. Meqenëse kemi thirrur funksionin sklearn.autolog() në fillim të skenarit, detajet e eksperimentit që ndodhin pas start_run do të regjistrohen, duke përfshirë:

  • Hiperparametrat e modelit
  • Metrikat e trajnimit për regresionin si MSE, R2, MAE, etj.
  • Metrikë të personalizuar nga sklearn.metrics si p.sh. RMSE

Funksioni end_run() është opsional. Duhet të keni parasysh se që regjistruesi automatik të zbulojë matjet e personalizuara nga sklearn.metrics, duhet të aktivizoni regjistrimin automatik përpara se t'i importoni ato. Këtu është eksperimenti i regjistruar në DagsHub:

Le të shohim një shembull tjetër të regjistrimit automatik me Keras:

Ja çfarë po bën kodi:

  • Rreshti 1 mundëson regjistrimin automatik të Keras
  • Rreshti 13 fillon drejtimin
  • Linja 15 ndërton një model Keras me API sekuenciale
  • Linjat 18–29 përpilojnë modelin me një kthim të ndalimit të hershëm

Le të shohim se si doli eksperimenti:

Ju mund të lexoni dokumentet për të mësuar më shumë rreth auto-loggers këtu.

Regjistrimi i eksperimenteve me Git dhe DagsHub

Nëse ky është shumë informacion, mund të zgjidhni një opsion më të lehtë si paketa e klientit DagsHub për të regjistruar eksperimentet tuaja. Me dagshub, praktikisht nuk ka kurbë mësimi. Këtu është një funksion i thjeshtë që regjistron hiperparametrat dhe metrikat e përcaktuara nga përdoruesi në git:

Sapo ta ekzekutoni këtë funksion me argumentet e dëshiruara, ai do të krijojë dy skedarë në rrënjën e projektit (nëse nuk specifikoni një vendndodhje tjetër si në funksion) - metrics.csv dhe params.yml. Pas shtimit të këtyre dy skedarëve në git dhe kryerjes së ndryshimeve, DagsHub i njeh ato dhe i vendos parametrat dhe metrikat nën skedën Eksperimente. Do të shihni që ato eksperimente do të shënohen me etiketën Git:

Edhe pse klienti DagsHub nuk ka auto-logger të zbukuruar, ai është plotësisht i riprodhueshëm. Me kusht që të përdorni DVC për të gjurmuar të dhënat, mund të kaloni në çdo eksperiment dhe gjendjen e projektit në momentin e përfundimit të eksperimentit me një git checkout të vetme.

MLflow regjistron hash-et e kryerjes, por të gjitha ekzekutimet e MLflow i bashkëngjiten kryerjes së fundit, para setë ndodhte eksperimenti. Pra, do t'ju duhet më shumë sesa thjesht një "klikim i një butoni" për t'u kthyer te kodi i eksperimentit.

Ky është një disavantazh i caktuar në krahasim me klientin DagsHub.

Duke analizuar rezultatet e eksperimentit me DagsHub

Sigurisht, skeda e eksperimenteve bën më shumë sesa thjesht të tregojë një listë. Karakteristika më e rëndësishme është krahasimi i eksperimenteve. Thjesht zgjidhni ato që dëshironi dhe DagsHub gjeneron disa metrika të dobishme krahasimi:

Ju gjithashtu mund të caktoni etiketa për eksperimentet me objektiva ose të dhëna të ndryshme. Për shembull, unë përdora etiketat meta dhe conv për të treguar se eksperimenti përdorte imazhe meta të dhënash ose konvolucione në imazhe.

Meqenëse dagshub përdor git për gjurmimin, dhe MLflow mund të konkludojë hash-in aktual të kryerjes, mund të shkoni drejtpërdrejt në gjendjen e projektit në kohën e ekzekutimit të eksperimentit.

Më në fund, mund të ekzekutoni git diffs direkt nga DagsHub. Këtu janë hapat që mund të ndërmerrni për të parë dallimet e kodit dhe skedarit midis dy eksperimenteve:

Pasi të kopjoni hash-et e kryerjes së eksperimenteve që dëshironi, shkoni te skeda e skedarëve dhe ngjitini ato në të dy fushat. Skedarët dhe drejtoritë e ndryshuara do të theksohen.

Nëse shtypni butonin "Krahaso skedarin", shihni një skicë të thellë të çdo skedari, skripti dhe fletoreje të ndryshuar:

konkluzioni

Tani, ju e dini se si t'i gjurmoni eksperimentet tuaja me Git, MLflow dhe DagsHub. Ju mund t'i regjistroni të gjitha eksperimentet tuaja automatikisht dhe të krijoni grafikë të bukur në DagsHub për krahasim. Çdokush mund të shohë dhe të mësojë nga eksperimentet tuaja, të suksesshme dhe të dështuara. Më e rëndësishmja, ju keni fituar një mjet të fuqishëm për të organizuar provat dhe idetë tuaja, gjë që është thelbësore për suksesin e projektit të mësimit të makinës.

Në këtë tutorial, ju keni mësuar:

  1. Çfarë është gjurmimi i eksperimentit dhe pse duhet të shqetësoheni me të
  2. Si duket një rrjedhë e thjeshtë gjurmimi e punës
  3. Si të lidhni MLflow me një server gjurmimi në distancë si DagsHub
  4. Si të përdorni MLflow dhe klasat e tij auto-logger
  5. Si të përdorni gjurmimin e DagsHub dhe git për eksperimente të lehta
  6. Si të analizoni rezultatet e eksperimentit tuaj duke përdorur skedën Eksperimente me DagsHub

Faleminderit që lexuat!

Mund të bëheni një anëtar premium i Mediumit duke përdorur lidhjen e mëposhtme dhe të keni akses në të gjitha historitë e mia dhe mijëra të tjera:



Ose abonohuni në listën time të emaileve: