Sveiki, chabrovskiečiai. Kaip jau rašėme, šį mėnesį OTUS vienu metu pradeda du mašininio mokymosi kursus, būtent bazė и pažengęs. Šiuo atžvilgiu mes ir toliau dalinamės naudinga medžiaga.
Šio straipsnio tikslas – pakalbėti apie mūsų pirmąją naudojimo patirtį MLflow.
Pradėsime peržiūrą MLflow iš savo stebėjimo serverio ir registruokite visas tyrimo iteracijas. Tada pasidalinsime savo patirtimi apie Spark sujungimą su MLflow naudojant UDF.
Kontekstas
Mes esame Alfa sveikata Mes naudojame mašininį mokymąsi ir dirbtinį intelektą, kad įgalintume žmones rūpintis savo sveikata ir gerove. Štai kodėl mašininio mokymosi modeliai yra mūsų kuriamų duomenų mokslo produktų pagrindas, todėl mus patraukė MLflow – atvirojo kodo platforma, apimanti visus mašininio mokymosi ciklo aspektus.
MLflow
Pagrindinis MLflow tikslas yra suteikti papildomą mašininio mokymosi sluoksnį, kuris leistų duomenų mokslininkams dirbti su beveik bet kokia mašininio mokymosi biblioteka (H2o, sunku, mleap, Pitorchas, sklearn и tensorflow), pakelia savo darbą į kitą lygį.
MLflow turi tris komponentus:
Sekimo – eksperimentų įrašymas ir užklausos: kodas, duomenys, konfigūracija ir rezultatai. Labai svarbu stebėti modelio kūrimo procesą.
Projektai – Pakuotės formatas, skirtas veikti bet kurioje platformoje (pvz. „SageMaker“)
modeliai – bendras modelių pateikimo įvairiems diegimo įrankiams formatas.
MLflow (rašymo metu alfa versija) yra atvirojo kodo platforma, leidžianti valdyti mašininio mokymosi gyvavimo ciklą, įskaitant eksperimentavimą, pakartotinį naudojimą ir diegimą.
MLflow nustatymas
Norėdami naudoti MLflow, pirmiausia turite nustatyti visą Python aplinką, kurią naudosime PyEnv (Norėdami įdiegti „Python“ „Mac“, patikrinkite čia). Tokiu būdu galime sukurti virtualią aplinką, kurioje įdiegsime visas jai paleisti reikalingas bibliotekas.
```
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
```
Pastaba: „PyArrow“ naudojame tokiems modeliams kaip UDF paleisti. Reikėjo pataisyti PyArrow ir Numpy versijas, nes pastarosios versijos prieštarauja viena kitai.
Paleiskite stebėjimo vartotojo sąsają
MLflow stebėjimas leidžia mums registruoti eksperimentus ir pateikti užklausas naudojant Python ir POILSIO API. Be to, galite nustatyti, kur laikyti modelio artefaktus (localhost, "Amazon" S3, „Azure Blob“ saugykla, "Google" Debesis Sandėliavimo arba SFTP serveris). Kadangi „Alpha Health“ naudojame AWS, mūsų artefaktų saugykla bus S3.
# Running a Tracking Server
mlflow server
--file-store /tmp/mlflow/fileStore
--default-artifact-root s3://<bucket>/mlflow/artifacts/
--host localhost
--port 5000
MLflow rekomenduoja naudoti nuolatinę failų saugyklą. Failų saugykla yra vieta, kur serveris saugos paleidimo ir eksperimento metaduomenis. Pradėdami serverį įsitikinkite, kad jis nurodo nuolatinę failų saugyklą. Čia mes tiesiog naudosime eksperimentui /tmp.
Atminkite, kad jei norime naudoti mlflow serverį seniems eksperimentams vykdyti, jie turi būti failų saugykloje. Tačiau net ir be to galėtume juos naudoti UDF, nes mums reikia tik kelio į modelį.
Pastaba: atminkite, kad stebėjimo vartotojo sąsaja ir modelio klientas turi turėti prieigą prie artefakto vietos. Tai yra, nepaisant to, kad stebėjimo vartotojo sąsaja yra EC2 egzemplioriuje, kai MLflow veikia vietoje, įrenginys turi turėti tiesioginę prieigą prie S3, kad galėtų rašyti artefaktų modelius.
Stebėjimo vartotojo sąsaja saugo artefaktus S3 segmente
Bėgimo modeliai
Kai tik paleidžiamas stebėjimo serveris, galite pradėti mokyti modelius.
Kaip pavyzdį naudosime vyno modifikaciją iš MLflow pavyzdžio Sklearn.
Kaip jau aptarėme, MLflow leidžia registruoti modelio parametrus, metriką ir artefaktus, kad galėtumėte stebėti, kaip jie kinta iteracijų metu. Ši funkcija yra labai naudinga, nes tokiu būdu galime atkurti geriausią modelį susisiekę su stebėjimo serveriu arba suprasdami, kuris kodas atliko reikiamą iteraciją, naudodamas įsipareigojimų git maišos žurnalus.
MLflow stebėjimo serveris, paleistas naudojant komandą „mlflow server“, turi REST API, skirtą sekti paleidimus ir įrašyti duomenis į vietinę failų sistemą. Galite nurodyti stebėjimo serverio adresą naudodami aplinkos kintamąjį „MLFLOW_TRACKING_URI“, o MLflow stebėjimo API automatiškai susisieks su stebėjimo serveriu šiuo adresu, kad sukurtų / gautų paleidimo informaciją, žurnalo metriką ir kt.
Norint pateikti modelį su serveriu, mums reikia veikiančio stebėjimo serverio (žr. paleidimo sąsają) ir modelio vykdymo ID.
Vykdyti 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
Norėdami aptarnauti modelius naudojant MLflow aptarnavimo funkciją, mums reikės prieigos prie stebėjimo vartotojo sąsajos, kad gautume informaciją apie modelį tiesiog nurodant --run_id.
Kai modelis susisieks su stebėjimo serveriu, galime gauti naują modelio galinį tašką.
Nepaisant to, kad stebėjimo serveris yra pakankamai galingas, kad galėtų aptarnauti modelius realiu laiku, mokyti juos ir naudotis serverio funkcijomis (šaltinis: mlflow // dokumentai // modeliai # vietiniai), „Spark“ naudojimas (paketinis arba srautinis perdavimas) yra dar galingesnis sprendimas dėl platinimo.
Įsivaizduokite, kad tiesiog atlikote mokymą neprisijungę ir pritaikėte išvesties modelį visiems savo duomenims. Čia šviečia Spark ir MLflow.
Nusprendęs notebook-dir, savo užrašų knygeles galime laikyti norimame aplanke.
„Jupyter“ paleidimas iš „PySpark“.
Kadangi sugebėjome sukonfigūruoti Jupiterį kaip PySpark tvarkyklę, dabar galime paleisti Jupyter nešiojamąjį kompiuterį PySpark kontekste.
(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
Kaip minėta aukščiau, MLflow suteikia S3 modelio artefaktų registravimo funkciją. Kai tik turime pasirinktą modelį savo rankose, turime galimybę jį importuoti kaip UDF naudodami modulį mlflow.pyfunc.
Iki šiol kalbėjome apie tai, kaip naudoti PySpark su MLflow, vyno kokybės prognozėmis visame vyno duomenų rinkinyje. O kas, jei jums reikia naudoti Python MLflow modulius iš Scala Spark?
Tai taip pat išbandėme padaliję „Spark“ kontekstą tarp „Scala“ ir „Python“. Tai yra, mes užregistravome MLflow UDF Python ir panaudojome jį iš Scala (taip, galbūt ne geriausias sprendimas, bet tai, ką turime).
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
```
Kaip matote iš pridedamo bloknoto, UDF dalijasi „Spark“ ir „PySpark“. Tikimės, kad ši dalis bus naudinga tiems, kurie mėgsta „Scala“ ir nori gamyboje įdiegti mašininio mokymosi modelius.
Nors rašymo metu MLflow yra Alpha versijoje, ji atrodo gana daug žadanti. Vien galimybė paleisti kelias mašininio mokymosi sistemas ir jas naudoti iš vieno galutinio taško pakelia rekomendacijų sistemas į kitą lygį.
Be to, MLflow suartina duomenų inžinierius ir duomenų mokslo specialistus, tarp jų sudarydama bendrą sluoksnį.
Po šio MLflow tyrimo esame įsitikinę, kad judėsime į priekį ir naudosime jį savo Spark vamzdynams ir rekomendacijų sistemoms.
Būtų malonu sinchronizuoti failų saugyklą su duomenų baze, o ne su failų sistema. Tai turėtų suteikti mums kelis galutinius taškus, kurie gali naudoti tą pačią failų saugyklą. Pavyzdžiui, naudokite kelis atvejus Presto и Atėnė su tuo pačiu Glue metastore.
Apibendrinant, norėčiau padėkoti MLFlow bendruomenei už tai, kad mūsų darbas su duomenimis tapo įdomesnis.
Jei žaidžiate su MLflow, nedvejodami parašykite mums ir papasakokite, kaip jį naudojate, o juo labiau, jei naudojate gamyboje.