Sveiki, Habrovskas iedzÄ«votÄji. KÄ jau rakstÄ«jÄm, Å”omÄnes OTUS uzsÄk uzreiz divus maŔīnmÄcÄ«bas kursus, proti bÄze Šø uzlabotas. Å ajÄ sakarÄ mÄs turpinÄm dalÄ«ties ar noderÄ«gu materiÄlu.
Å Ä« raksta mÄrÄ·is ir pastÄstÄ«t par mÅ«su pirmo pieredzi, izmantojot MLflow.
MÄs sÄksim pÄrskatÄ«Å”anu MLflow no sava izsekoÅ”anas servera un reÄ£istrÄt visas pÄtÄ«juma iterÄcijas. PÄc tam mÄs dalÄ«simies pieredzÄ par Spark savienoÅ”anu ar MLflow, izmantojot UDF.
Konteksts
Mes esam ieksa Alfa veselÄ«ba MÄs izmantojam maŔīnmÄcÄ«Å”anos un mÄkslÄ«go intelektu, lai dotu cilvÄkiem iespÄju uzÅemties atbildÄ«bu par savu veselÄ«bu un labklÄjÄ«bu. TÄpÄc maŔīnmÄcÄ«Å”anÄs modeļi ir mÅ«su izstrÄdÄto datu zinÄtnes produktu pamatÄ, un tÄpÄc mÅ«s piesaistÄ«ja MLflow ā atvÄrtÄ pirmkoda platforma, kas aptver visus maŔīnmÄcÄ«Å”anÄs dzÄ«ves cikla aspektus.
MLflow
MLflow galvenais mÄrÄ·is ir nodroÅ”inÄt papildu slÄni maŔīnmÄcÄ«bai, kas ļautu datu zinÄtniekiem strÄdÄt ar gandrÄ«z jebkuru maŔīnmÄcÄ«Å”anÄs bibliotÄku (h2o, keras, mleap, pitors, sklearn Šø tensora plÅ«sma), paceļot viÅas darbu uz nÄkamo lÄ«meni.
MLflow nodroŔina trīs komponentus:
IzsekoÅ”ana ā eksperimentu ierakstÄ«Å”ana un pieprasÄ«jumi: kods, dati, konfigurÄcija un rezultÄti. Modeļa izveides procesa uzraudzÄ«ba ir ļoti svarÄ«ga.
AKTIVITÄTES ā Iepakojuma formÄts, kas darbojas jebkurÄ platformÄ (piem. SageMaker)
MLflow (rakstÄ«Å”anas laikÄ alfa versijÄ) ir atvÄrtÄ pirmkoda platforma, kas ļauj pÄrvaldÄ«t maŔīnmÄcÄ«Å”anÄs dzÄ«ves ciklu, tostarp eksperimentÄÅ”anu, atkÄrtotu izmantoÅ”anu un izvietoÅ”anu.
MLflow iestatīŔana
Lai izmantotu MLflow, vispirms ir jÄiestata visa Python vide, ko mÄs izmantosim PyEnv (Lai instalÄtu Python operÄtÄjsistÄmÄ Mac, pÄrbaudiet Å”eit). TÄdÄ veidÄ mÄs varam izveidot virtuÄlo vidi, kurÄ instalÄsim visas tÄs palaiÅ”anai nepiecieÅ”amÄs bibliotÄkas.
```
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
```
PiezÄ«me. MÄs izmantojam PyArrow, lai palaistu tÄdus modeļus kÄ UDF. PyArrow un Numpy versijas bija jÄlabo, jo pÄdÄjÄs versijas konfliktÄja viena ar otru.
Palaidiet izsekoÅ”anas lietotÄja saskarni
MLflow izsekoÅ”ana ļauj reÄ£istrÄt eksperimentus un veikt vaicÄjumus, izmantojot Python un ATPÅŖTA API. TurklÄt varat noteikt, kur glabÄt modeļu artefaktus (localhost, Amazon S3, Azure Blob krÄtuve, Google Cloud Storage vai SFTP serveris). TÄ kÄ Alpha Health izmantojam AWS, mÅ«su artefaktu krÄtuve bÅ«s S3.
# Running a Tracking Server
mlflow server
--file-store /tmp/mlflow/fileStore
--default-artifact-root s3://<bucket>/mlflow/artifacts/
--host localhost
--port 5000
MLflow iesaka izmantot pastÄvÄ«gu failu krÄtuvi. Failu krÄtuve ir vieta, kur serveris glabÄs palaiÅ”anas un eksperimentu metadatus. StartÄjot serveri, pÄrliecinieties, vai tas norÄda uz pastÄvÄ«go failu krÄtuvi. Å eit mÄs vienkÄrÅ”i izmantosim eksperimentu /tmp.
Atcerieties, ka, ja mÄs vÄlamies izmantot mlflow serveri veco eksperimentu veikÅ”anai, tiem ir jÄatrodas failu krÄtuvÄ. TomÄr pat bez tÄ mÄs varÄtu tos izmantot UDF, jo mums ir nepiecieÅ”ams tikai ceļŔ uz modeli.
PiezÄ«me. Å emiet vÄrÄ, ka izsekoÅ”anas lietotÄja saskarnei un modeļa klientam ir jÄbÅ«t piekļuvei artefakta atraÅ”anÄs vietai. Tas nozÄ«mÄ, ka neatkarÄ«gi no tÄ, ka izsekoÅ”anas lietotÄja saskarne atrodas EC2 instancÄ, lokÄli palaižot MLflow, iekÄrtai ir jÄbÅ«t tieÅ”ai piekļuvei S3, lai rakstÄ«tu artefaktu modeļus.
KÄ mÄs jau apspriedÄm, MLflow ļauj reÄ£istrÄt modeļa parametrus, metriku un artefaktus, lai varÄtu izsekot, kÄ tie attÄ«stÄs iterÄciju laikÄ. Å Ä« funkcija ir ÄrkÄrtÄ«gi noderÄ«ga, jo tÄdÄ veidÄ mÄs varam reproducÄt labÄko modeli, sazinoties ar izsekoÅ”anas serveri vai saprotot, kurÅ” kods veica nepiecieÅ”amo iterÄciju, izmantojot git jaukÅ”anas žurnÄlus.
MLflow izsekoÅ”anas serverim, kas palaists, izmantojot komandu āmlflow serverā, ir REST API, lai izsekotu darbÄ«bas un ierakstÄ«tu datus vietÄjÄ failu sistÄmÄ. Varat norÄdÄ«t izsekoÅ”anas servera adresi, izmantojot vides mainÄ«go āMLFLOW_TRACKING_URIā, un MLflow izsekoÅ”anas API automÄtiski sazinÄsies ar izsekoÅ”anas serveri Å”ajÄ adresÄ, lai izveidotu/saÅemtu palaiÅ”anas informÄciju, žurnÄla metriku utt.
Lai modelim nodroÅ”inÄtu ar serveri, mums ir nepiecieÅ”ams darbojoÅ”s izsekoÅ”anas serveris (skatiet palaiÅ”anas saskarni) un modeļa palaiÅ”anas ID.
Palaist ID
# 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
Lai apkalpotu modeļus, izmantojot MLflow apkalpoÅ”anas funkcionalitÄti, mums bÅ«s nepiecieÅ”ama piekļuve izsekoÅ”anas lietotÄja saskarnei, lai saÅemtu informÄciju par modeli, vienkÄrÅ”i norÄdot --run_id.
Kad modelis sazinÄs ar izsekoÅ”anas serveri, mÄs varam iegÅ«t jaunu modeļa galapunktu.
Neskatoties uz to, ka izsekoÅ”anas serveris ir pietiekami jaudÄ«gs, lai apkalpotu modeļus reÄllaikÄ, apmÄcÄ«tu tos un izmantotu servera funkcionalitÄti (avots: mlflow // dokumenti // modeļi # lokÄli), Spark izmantoÅ”ana (paketÄ vai straumÄÅ”ana) ir vÄl jaudÄ«gÄks risinÄjums izplatÄ«Å”anas dÄļ.
IedomÄjieties, ka jÅ«s vienkÄrÅ”i veicÄt apmÄcÄ«bu bezsaistÄ un pÄc tam lietojÄt izvades modeli visiem saviem datiem. Å eit spÄ«d Spark un MLflow.
(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
KÄ minÄts iepriekÅ”, MLflow nodroÅ”ina funkciju modeļa artefaktu reÄ£istrÄÅ”anai S3. TiklÄ«dz izvÄlÄtais modelis ir mÅ«su rokÄs, mums ir iespÄja to importÄt kÄ UDF, izmantojot moduli mlflow.pyfunc.
LÄ«dz Å”im mÄs esam runÄjuÅ”i par to, kÄ izmantot PySpark ar MLflow, veicot vÄ«na kvalitÄtes prognozes visÄ vÄ«na datu kopÄ. Bet ko darÄ«t, ja jums ir jÄizmanto Python MLflow moduļi no Scala Spark?
MÄs arÄ« to pÄrbaudÄ«jÄm, sadalot Spark kontekstu starp Scala un Python. Tas ir, mÄs reÄ£istrÄjÄm MLflow UDF programmÄ Python un izmantojÄm to no Scala (jÄ, iespÄjams, tas nav labÄkais risinÄjums, bet tas, kas mums ir).
Scala Spark + MLflow
Å im piemÄram mÄs pievienosim Toree kodols esoÅ”ajÄ JupiterÄ.
InstalÄjiet 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
```
KÄ redzat pievienotajÄ piezÄ«mju grÄmatiÅÄ, UDF tiek koplietots starp Spark un PySpark. MÄs ceram, ka Ŕī daļa bÅ«s noderÄ«ga tiem, kam patÄ«k Scala un kuri vÄlas ražoÅ”anÄ izmantot maŔīnmÄcÄ«Å”anÄs modeļus.
Lai gan rakstÄ«Å”anas laikÄ MLflow ir Alpha versijÄ, tas izskatÄs diezgan daudzsoloÅ”i. Tikai iespÄja palaist vairÄkas maŔīnmÄcÄ«Å”anÄs ietvaras un patÄrÄt tÄs no viena galapunkta paceļ ieteikumu sistÄmas uz nÄkamo lÄ«meni.
TurklÄt MLflow tuvina datu inženierus un datu zinÄtnes speciÄlistus, veidojot tiem kopÄ«gu slÄni.
PÄc Ŕīs MLflow izpÄtes esam pÄrliecinÄti, ka virzÄ«simies uz priekÅ”u un izmantosim to saviem Spark cauruļvadiem un ieteikumu sistÄmÄm.
BÅ«tu jauki failu krÄtuvi sinhronizÄt ar datu bÄzi, nevis failu sistÄmu. Tam vajadzÄtu iegÅ«t vairÄkus galapunktus, kas var izmantot vienu un to paÅ”u failu krÄtuvi. PiemÄram, izmantojiet vairÄkus gadÄ«jumus Presto Šø Athena ar to paÅ”u Glue metastore.
RezumÄjot, es vÄlos pateikties MLFlow kopienai, kas padarÄ«ja mÅ«su darbu ar datiem interesantÄku.
Ja spÄlÄjaties ar MLflow, nevilcinieties un pastÄstiet mums, kÄ to izmantojat, un vÄl jo vairÄk, ja to izmantojat ražoÅ”anÄ.