Hola, residenti di Khabrovsk. Cum'è avemu digià scrittu, stu mese OTUS lancia dui corsi d'apprendimentu di machine à una volta, vale à dì basa и avanzatu. In questu sensu, cuntinuemu à sparte materiale utile.
U scopu di stu articulu hè di parlà di a nostra prima sperienza usendu MLflow.
Avemu da principià a rivista MLflow da u so servitore di seguimentu è logu tutte e iterazioni di u studiu. Allora sparteremu a nostra sperienza di cunnette Spark cù MLflow usendu UDF.
U cuntestu
Simu in Salute Alpha Utilizemu l'apprendimentu automaticu è l'intelligenza artificiale per facultà e persone per piglià a carica di a so salute è u so benessere. Hè per quessa chì i mudelli di apprendimentu automaticu sò in u core di i prudutti di scienza di dati chì sviluppemu, è hè per quessa chì ci sò stati attratti da MLflow, una piattaforma open source chì copre tutti l'aspetti di u ciclu di vita di l'apprendimentu automaticu.
MLflow
L'obiettivu principale di MLflow hè di furnisce una strata supplementaria in cima à l'apprendimentu automaticu chì permette à i scientifichi di dati di travaglià cù quasi ogni biblioteca di apprendimentu automaticu (h2o, keras, melap, pirtorcu, sklearn и tensorflow), purtendu u so travagliu à u prossimu livellu.
MLflow furnisce trè cumpunenti:
Tracking - registrazione è richieste di esperimenti: codice, dati, cunfigurazione è risultati. U seguimentu di u prucessu di creazione di un mudellu hè assai impurtante.
Projects - Formatu di imballaggio per eseguisce nantu à qualsiasi piattaforma (es. SageMaker)
mudeli - un formatu cumuni per a presentazione di mudelli à diversi strumenti di implementazione.
MLflow (in alfa à u mumentu di a scrittura) hè una piattaforma open source chì vi permette di gestisce u ciclu di vita di l'apprendimentu di a macchina, cumprese l'esperimentazione, riutilizazione è implementazione.
Configurazione di MLflow
Per utilizà MLflow avete bisognu di prima cunfigurà u vostru ambiente Python tutale, per questu avemu aduprà PyEnv (per installà Python in Mac, verificate ccà). Questu modu pudemu creà un ambiente virtuale induve installemu tutte e biblioteche necessarie per eseguisce.
```
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
```
Nota: Avemu aduprà PyArrow per eseguisce mudelli cum'è UDF. E versioni di PyArrow è Numpy avianu bisognu à esse riparate perchè l'ultime versioni cunflittu cù l'altri.
Lanciate l'interfaccia di tracciamentu
MLflow Tracking ci permette di logà è interrugate esperimenti cù Python è REST API. Inoltre, pudete stabilisce induve almacenà l'artefatti di mudelli (localhost, Amazon S3, Azure Blob Storage, Google Cloud Storage o servitore SFTP). Siccomu usemu AWS à Alpha Health, u nostru almacenamentu di l'artefatti serà S3.
# Running a Tracking Server
mlflow server
--file-store /tmp/mlflow/fileStore
--default-artifact-root s3://<bucket>/mlflow/artifacts/
--host localhost
--port 5000
MLflow consiglia di utilizà un archiviu persistente di schedari. L'almacenamiento di u schedariu hè induve u servitore almacenerà i metadati di eseguitu è di sperimentazione. Quandu principia u servitore, assicuratevi chì punta à a tenda di schedari persistenti. Quì per l'esperimentu avemu da aduprà solu /tmp.
Ricurdativi chì se vulemu usà u servitore mlflow per eseguisce esperimenti antichi, devenu esse prisenti in l'almacenamiento di u schedariu. In ogni casu, ancu senza questu pudemu usà in l'UDF, postu chì avemu solu bisognu di u percorsu à u mudellu.
Nota: Tenite in mente chì Tracking UI è u cliente mudellu deve avè accessu à u locu di l'artefact. Questu hè, a priscinniri di u fattu chì l'UI Tracking reside in una istanza EC2, quandu eseguisce MLflow localmente, a macchina deve avè accessu direttu à S3 per scrive mudelli di artefatti.
U seguimentu di l'UI guarda artefatti in un bucket S3
Modelli di corsa
Appena u servore Tracking hè in esecuzione, pudete inizià a furmazione di mudelli.
Comu esempiu, useremu a mudificazione di u vinu da l'esempiu MLflow in Sklearn.
Cumu l'avemu digià discututu, MLflow permette di logà parametri di mudellu, metriche è artefatti per pudè seguità cumu si evoluzione nantu à iterazioni. Questa funzione hè estremamente utile perchè cusì pudemu ripruduce u megliu mudellu cuntattendu u servitore di Tracking o capisce quale codice hà cumpletu l'iterazione necessaria utilizendu i logs git hash of commits.
U servitore di seguimentu MLflow, lanciatu cù u cumandimu "servitore mlflow", hà una API REST per u seguimentu di eseguite è scrive dati à u sistema di fugliale locale. Pudete specificà l'indirizzu di u servitore di seguimentu utilizendu a variabile di l'ambiente "MLFLOW_TRACKING_URI" è l'API di seguimentu MLflow cuntattate automaticamente u servitore di seguimentu à questu indirizzu per creà / riceve infurmazione di lanciamentu, metriche di log, etc.
Per furnisce u mudellu cù un servitore, avemu bisognu di un servitore di seguimentu in esecuzione (vede l'interfaccia di lanciamentu) è l'ID Run di u mudellu.
Run 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
Per serve mudelli chì utilizanu a funziunalità MLflow serve, avemu bisognu di accessu à l'interfaccia di tracciamentu per riceve infurmazioni nantu à u mudellu solu per specificà. --run_id.
Una volta chì u mudellu cuntattate u servitore di Tracking, pudemu avè un novu mudellu endpoint.
Malgradu u fattu chì u servitore Tracking hè abbastanza putente per serve mudelli in tempu reale, furmà elli è utilizate a funziunalità di u servitore (fonte: mlflow // docs // mudelli # locale), l'usu di Spark (batch o streaming) hè una suluzione ancu più putente per a distribuzione.
Imagine chì avete solu fattu a furmazione offline è dopu appiicatu u mudellu di output à tutti i vostri dati. Hè quì chì Spark è MLflow brillanu.
Dopu avè determinatu notebook-dir, pudemu almacenà i nostri quaderni in u cartulare desideratu.
Lanciamentu di Jupyter da PySpark
Siccomu pudemu cunfigurà Jupiter cum'è un driver PySpark, pudemu avà eseguisce u notebook Jupyter in u cuntestu di 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
Cumu l'esitatu sopra, MLflow furnisce una funzione per logging artifacti di mudelli in S3. Appena avemu u mudellu sceltu in e nostre mani, avemu l'uppurtunità di impurtà cum'è UDF usendu u modulu mlflow.pyfunc.
Finu à questu puntu, avemu parlatu di cumu utilizà PySpark cù MLflow, eseguendu previsioni di qualità di vinu nantu à tuttu u set di dati di vinu. Ma chì si avete bisognu di utilizà i moduli Python MLflow da Scala Spark?
Avemu pruvatu ancu questu dividendu u cuntestu Spark trà Scala è Python. Vale à dì, avemu registratu MLflow UDF in Python, è l'utilizamu da Scala (sì, forse micca a megliu suluzione, ma ciò chì avemu).
Scala Spark + MLflow
Per questu esempiu aghjunghjemu Toree Kernel in u Jupiter esistente.
Installa 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
```
Comu pudete vede da u librettu attaccatu, l'UDF hè spartutu trà Spark è PySpark. Speremu chì sta parte serà utile à quelli chì amanu Scala è volenu implementà mudelli di machine learning in a produzzione.
Ancu s'è MLflow hè in versione Alpha à u mumentu di a scrittura, pare abbastanza promettente. Solu l'abilità di eseguisce più quadri di apprendimentu di macchina è cunsumà da un unicu endpoint porta i sistemi di raccomandazione à u prossimu livellu.
Inoltre, MLflow avvicina l'ingegneri di dati è i specialisti di scienza di dati più vicinu, mettendu una strata cumuna trà elli.
Dopu sta esplorazione di MLflow, simu cunfidenti chì andemu avanti è l'utilizaremu per i nostri pipelines Spark è sistemi di raccomandazione.
Saria bonu per sincronizà l'almacenamiento di u schedariu cù a basa di dati invece di u sistema di schedari. Questu ci duveria dà parechje endpoints chì ponu utilizà u listessu almacenamentu di schedari. Per esempiu, aduprà parechje casi Presto и Athena cù u listessu metastore Glue.
Per riassume, vogliu ringrazià a cumunità MLFlow per fà u nostru travagliu cù dati più interessanti.
Sè vo site à ghjucà cù MLflow, ùn esitate micca à scriveci è diteci cumu l'utilizate, è ancu di più s'ellu l'utilizate in a produzzione.