Përshëndetje, banorë të Khabrovsk. Siç kemi shkruar tashmë, këtë muaj OTUS po lançon dy kurse të mësimit të makinerive njëherësh, domethënë baze и i avancuar. Në këtë drejtim, ne vazhdojmë të ndajmë materiale të dobishme.
Qëllimi i këtij artikulli është të flasim për përvojën tonë të parë duke përdorur MLflow.
Ne do të fillojmë rishikimin MLflow nga serveri i tij gjurmues dhe regjistroni të gjitha përsëritjet e studimit. Më pas do të ndajmë përvojën tonë të lidhjes së Spark me MLflow duke përdorur UDF.
Kontekst
Ne jemi në Shëndeti Alfa Ne përdorim mësimin e makinerive dhe inteligjencën artificiale për të fuqizuar njerëzit që të marrin përgjegjësinë për shëndetin dhe mirëqenien e tyre. Kjo është arsyeja pse modelet e mësimit të makinerive janë në qendër të produkteve të shkencës së të dhënave që ne zhvillojmë, dhe kjo është arsyeja pse ne u tërhoqëm nga MLflow, një platformë me burim të hapur që mbulon të gjitha aspektet e ciklit jetësor të mësimit të makinerive.
MLflow
Qëllimi kryesor i MLflow është të sigurojë një shtresë shtesë në krye të mësimit të makinerisë që do t'i lejonte shkencëtarët e të dhënave të punojnë me pothuajse çdo bibliotekë të mësimit të makinerive (h2o, keras, zbavitje, pytorch, sklearin и tensorflow), duke e çuar punën e saj në një nivel tjetër.
MLflow ofron tre komponentë:
Ndjekja – regjistrimi dhe kërkesat për eksperimente: kodi, të dhënat, konfigurimi dhe rezultatet. Monitorimi i procesit të krijimit të një modeli është shumë i rëndësishëm.
projektet – Formati i paketimit për të ekzekutuar në çdo platformë (p.sh. SageMaker)
Modele – një format i zakonshëm për paraqitjen e modeleve në mjete të ndryshme vendosjeje.
MLflow (në alfa në kohën e shkrimit) është një platformë me burim të hapur që ju lejon të menaxhoni ciklin jetësor të mësimit të makinerive, duke përfshirë eksperimentimin, ripërdorimin dhe vendosjen.
Vendosja e MLflow
Për të përdorur MLflow, së pari duhet të konfiguroni të gjithë mjedisin tuaj Python, për këtë ne do të përdorim PyEnv (për të instaluar Python në Mac, shikoni këtu). Në këtë mënyrë ne mund të krijojmë një mjedis virtual ku do të instalojmë të gjitha bibliotekat e nevojshme për ta ekzekutuar atë.
```
pyenv install 3.7.0
pyenv global 3.7.0 # Use Python 3.7
mkvirtualenv mlflow # Create a Virtual Env with Python 3.7
workon mlflow
```
Shënim: Ne përdorim PyArrow për të ekzekutuar modele të tilla si UDF. Versionet e PyArrow dhe Numpy duhej të rregulloheshin sepse versionet e fundit ishin në konflikt me njëri-tjetrin.
Hap ndërfaqen e gjurmimit
Ndjekja e MLflow na lejon të regjistrojmë dhe të kërkojmë eksperimente duke përdorur Python dhe Rest API. Përveç kësaj, ju mund të përcaktoni se ku të ruani objektet e modelit (localhost, Amazon S3, Magazinimi Azure Blob, Google Cloud Storage ose Serveri SFTP). Meqenëse ne përdorim AWS në Alpha Health, ruajtja jonë e objekteve do të jetë S3.
# Running a Tracking Server
mlflow server
--file-store /tmp/mlflow/fileStore
--default-artifact-root s3://<bucket>/mlflow/artifacts/
--host localhost
--port 5000
MLflow rekomandon përdorimin e ruajtjes së vazhdueshme të skedarëve. Ruajtja e skedarëve është vendi ku serveri do të ruajë të dhënat meta të ekzekutuara dhe eksperimentale. Kur nisni serverin, sigurohuni që ai të tregojë te ruajtja e skedarëve të vazhdueshëm. Këtu për eksperimentin ne thjesht do të përdorim /tmp.
Mos harroni se nëse duam të përdorim serverin mlflow për të ekzekutuar eksperimente të vjetra, ato duhet të jenë të pranishme në ruajtjen e skedarëve. Sidoqoftë, edhe pa këtë ne mund t'i përdorim ato në UDF, pasi na duhet vetëm rruga drejt modelit.
Shënim: Kini parasysh se ndërfaqja e përdoruesit të gjurmimit dhe klienti i modelit duhet të kenë akses në vendndodhjen e objektit. Kjo do të thotë, pavarësisht nga fakti që UI-ja e gjurmimit ndodhet në një shembull EC2, kur ekzekutohet MLflow në nivel lokal, makina duhet të ketë qasje të drejtpërdrejtë në S3 për të shkruar modele artifakte.
Ndërfaqja e përdoruesit e gjurmimit ruan objekte në një kovë S3
Modele vrapimi
Sapo serveri i gjurmimit të funksionojë, mund të filloni trajnimin e modeleve.
Si shembull, ne do të përdorim modifikimin e verës nga shembulli MLflow in Mësoj.
Siç e kemi diskutuar tashmë, MLflow ju lejon të regjistroni parametrat e modelit, metrikat dhe artefaktet në mënyrë që të mund të gjurmoni se si ato evoluojnë gjatë përsëritjeve. Kjo veçori është jashtëzakonisht e dobishme sepse në këtë mënyrë ne mund të riprodhojmë modelin më të mirë duke kontaktuar serverin e gjurmimit ose duke kuptuar se cili kod ka kryer përsëritjen e kërkuar duke përdorur regjistrat git hash të commits.
Serveri i gjurmimit MLflow, i nisur duke përdorur komandën "mlflow server", ka një API REST për gjurmimin e ekzekutimeve dhe shkrimin e të dhënave në sistemin lokal të skedarëve. Mund të specifikoni adresën e serverit gjurmues duke përdorur variablin e mjedisit "MLFLOW_TRACKING_URI" dhe API-ja e gjurmimit MLflow do të kontaktojë automatikisht me serverin gjurmues në këtë adresë për të krijuar/marrë informacione për nisjen, metrikat e regjistrave, etj.
Për t'i siguruar modelit një server, na duhet një server gjurmues që funksionon (shih ndërfaqen e nisjes) dhe Run ID-në e modelit.
ID-ja e ekzekutimit
# Serve a sklearn model through 127.0.0.0:5005
MLFLOW_TRACKING_URI=http://0.0.0.0:5000 mlflow sklearn serve
--port 5005
--run_id 0f8691808e914d1087cf097a08730f17
--model-path model
Për të shërbyer modele duke përdorur funksionalitetin e shërbimit MLflow, do të na duhet qasje në ndërfaqen e përdoruesit të gjurmimit për të marrë informacione rreth modelit thjesht duke specifikuar --run_id.
Pasi modeli të kontaktojë serverin e gjurmimit, ne mund të marrim një pikë përfundimtare të modelit të ri.
Përkundër faktit se serveri Tracking është mjaft i fuqishëm për të shërbyer modele në kohë reale, për t'i trajnuar ato dhe për të përdorur funksionalitetin e serverit (burimi: mlflow // docs // modele # local), përdorimi i Spark (batch ose streaming) është një zgjidhje edhe më e fuqishme për shkak të shpërndarjes.
Imagjinoni që thjesht e keni bërë trajnimin jashtë linje dhe më pas keni aplikuar modelin e daljes në të gjitha të dhënat tuaja. Këtu shkëlqejnë Spark dhe MLflow.
Për të treguar se si aplikojmë modelet MLflow në kornizat e të dhënave Spark, duhet të konfigurojmë fletoret e Jupyter për të punuar së bashku me PySpark.
Filloni duke instaluar versionin më të fundit të qëndrueshëm Apache Spark:
cd ~/Downloads/
tar -xzf spark-2.4.3-bin-hadoop2.7.tgz
mv ~/Downloads/spark-2.4.3-bin-hadoop2.7 ~/
ln -s ~/spark-2.4.3-bin-hadoop2.7 ~/spark̀
Instaloni PySpark dhe Jupyter në mjedisin virtual:
Duke vendosur notebook-dir, ne mund t'i ruajmë fletoret tona në dosjen e dëshiruar.
Nisja e Jupyter nga PySpark
Meqenëse ne ishim në gjendje të konfiguronim Jupiterin si një drejtues PySpark, tani mund të ekzekutojmë fletoren Jupyter në kontekstin e PySpark.
(mlflow) afranzi:~$ pyspark
[I 19:05:01.572 NotebookApp] sparkmagic extension enabled!
[I 19:05:01.573 NotebookApp] Serving notebooks from local directory: /Users/afranzi/Projects/notebooks
[I 19:05:01.573 NotebookApp] The Jupyter Notebook is running at:
[I 19:05:01.573 NotebookApp] http://localhost:8888/?token=c06252daa6a12cfdd33c1d2e96c8d3b19d90e9f6fc171745
[I 19:05:01.573 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 19:05:01.574 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=c06252daa6a12cfdd33c1d2e96c8d3b19d90e9f6fc171745
Siç u përmend më lart, MLflow ofron një veçori për regjistrimin e objekteve të modelit në S3. Sapo të kemi në dorë modelin e përzgjedhur, kemi mundësinë ta importojmë si UDF duke përdorur modulin mlflow.pyfunc.
PySpark - Paraqitja e parashikimeve të cilësisë së verës
Deri në këtë pikë, ne kemi folur se si të përdorim PySpark me MLflow, duke ekzekutuar parashikime të cilësisë së verës në të gjithë grupin e të dhënave të verës. Por çfarë nëse duhet të përdorni module Python MLflow nga Scala Spark?
Ne e testuam këtë gjithashtu duke ndarë kontekstin Spark midis Scala dhe Python. Kjo do të thotë, ne regjistruam MLflow UDF në Python dhe e përdorëm atë nga Scala (po, ndoshta jo zgjidhja më e mirë, por ajo që kemi).
Scala Spark + MLflow
Për këtë shembull do të shtojmë Kernel Toree në Jupiterin ekzistues.
Instaloni Spark + Toree + Jupyter
pip install toree
jupyter toree install --spark_home=${SPARK_HOME} --sys-prefix
jupyter kernelspec list
```
```
Available kernels:
apache_toree_scala /Users/afranzi/.virtualenvs/mlflow/share/jupyter/kernels/apache_toree_scala
python3 /Users/afranzi/.virtualenvs/mlflow/share/jupyter/kernels/python3
```
Siç mund ta shihni nga fletorja e bashkangjitur, UDF ndahet midis Spark dhe PySpark. Shpresojmë që kjo pjesë të jetë e dobishme për ata që e duan Scala-n dhe duan të vendosin modele të mësimit të makinerive në prodhim.
Edhe pse MLflow është në versionin Alpha në kohën e shkrimit, duket mjaft premtues. Vetëm aftësia për të ekzekutuar korniza të shumta të mësimit të makinerive dhe për t'i konsumuar ato nga një pikë përfundimtare e vetme i çon sistemet e rekomanduesve në nivelin tjetër.
Për më tepër, MLflow afron inxhinierët e të dhënave dhe specialistët e shkencës së të dhënave, duke vendosur një shtresë të përbashkët mes tyre.
Pas këtij eksplorimi të MLflow, ne jemi të sigurt se do të ecim përpara dhe do ta përdorim atë për tubacionet tona Spark dhe sistemet rekomanduese.
Do të ishte mirë të sinkronizoni ruajtjen e skedarëve me bazën e të dhënave në vend të sistemit të skedarëve. Kjo duhet të na japë disa pika fundore që mund të përdorin të njëjtin ruajtje të skedarëve. Për shembull, përdorni shembuj të shumtë pasazh i shpejtë и Athinë me të njëjtin metastor Glue.
Për ta përmbledhur, do të doja të falënderoja komunitetin MLFlow që e bëri punën tonë me të dhënat më interesante.
Nëse jeni duke luajtur me MLflow, mos hezitoni të na shkruani dhe të na tregoni se si e përdorni atë, dhe aq më tepër nëse e përdorni në prodhim.