سلام، ساکنین خابروفسک. همانطور که قبلاً نوشتیم، این ماه OTUS دو دوره یادگیری ماشینی را به طور همزمان راه اندازی می کند پایه и پیشرفته. در این راستا، ما همچنان مطالب مفیدی را به اشتراک می گذاریم.
هدف از این مقاله صحبت در مورد اولین تجربه ما در استفاده است MLflow.
ما بررسی را شروع می کنیم MLflow از سرور ردیابی خود و ثبت تمام تکرارهای مطالعه. سپس تجربه خود را از اتصال Spark با MLflow با استفاده از UDF به اشتراک خواهیم گذاشت.
متن نوشته
ما در آلفا سلامت ما از یادگیری ماشینی و هوش مصنوعی برای توانمندسازی افراد برای مراقبت از سلامت و رفاه خود استفاده می کنیم. به همین دلیل است که مدلهای یادگیری ماشینی در قلب محصولات علم دادهای هستند که توسعه میدهیم، و به همین دلیل است که ما به سمت MLflow، یک پلتفرم منبع باز که تمام جنبههای چرخه زندگی یادگیری ماشین را پوشش میدهد، جذب شدیم.
MLflow
هدف اصلی MLflow ارائه یک لایه اضافی در بالای یادگیری ماشین است که به دانشمندان داده اجازه می دهد تقریباً با هر کتابخانه یادگیری ماشینی کار کنند.h2o, کراس, کوتاهی, مارماهی, اسکلره کردن и جریان تنسور، کار او را به سطح بعدی می برد.
MLflow سه جزء را ارائه می دهد:
پیگردی - ضبط و درخواست آزمایش: کد، داده، پیکربندی و نتایج. نظارت بر فرآیند ایجاد یک مدل بسیار مهم است.
پروژه ها - قالب بسته بندی برای اجرا بر روی هر پلتفرمی (به عنوان مثال SageMaker)
مدل - یک قالب رایج برای ارسال مدل ها به ابزارهای مختلف استقرار.
MLflow (در زمان نوشتن به صورت آلفا) یک پلت فرم منبع باز است که به شما امکان می دهد چرخه زندگی یادگیری ماشین را مدیریت کنید، از جمله آزمایش، استفاده مجدد و استقرار.
راه اندازی MLflow
برای استفاده از MLflow ابتدا باید کل محیط پایتون خود را راه اندازی کنید، برای این کار ما از آن استفاده خواهیم کرد PyEnv (برای نصب پایتون در مک، بررسی کنید اینجا). به این ترتیب می توانیم یک محیط مجازی ایجاد کنیم که در آن تمام کتابخانه های لازم برای اجرای آن را نصب کنیم.
```
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
```
توجه: ما از PyArrow برای اجرای مدل هایی مانند UDF استفاده می کنیم. نسخههای PyArrow و Numpy باید اصلاح میشدند زیرا نسخههای اخیر با یکدیگر تضاد داشتند.
رابط کاربری ردیابی را راه اندازی کنید
ردیابی MLflow به ما اجازه می دهد تا آزمایشات را با استفاده از پایتون و پرس و جو کنیم REST API. علاوه بر این، شما می توانید تعیین کنید که در آن مصنوعات مدل (localhost، آمازون S3, ذخیره لکه لاجوردی, ذخیره سازی ابر گوگل یا سرور SFTP). از آنجایی که ما در Alpha Health از AWS استفاده می کنیم، ذخیره سازی مصنوع ما S3 خواهد بود.
# Running a Tracking Server
mlflow server
--file-store /tmp/mlflow/fileStore
--default-artifact-root s3://<bucket>/mlflow/artifacts/
--host localhost
--port 5000
MLflow استفاده از ذخیره سازی دائمی فایل را توصیه می کند. ذخیره سازی فایل جایی است که سرور ابرداده های اجرا شده و آزمایشی را ذخیره می کند. هنگام راه اندازی سرور، مطمئن شوید که به ذخیره فایل دائمی اشاره می کند. در اینجا برای آزمایش ما به سادگی استفاده خواهیم کرد /tmp.
به یاد داشته باشید که اگر بخواهیم از سرور mlflow برای اجرای آزمایش های قدیمی استفاده کنیم، باید در ذخیره سازی فایل ها وجود داشته باشند. با این حال، حتی بدون این نیز میتوانیم از آنها در UDF استفاده کنیم، زیرا ما فقط به مسیر مدل نیاز داریم.
توجه: به خاطر داشته باشید که Tracking UI و کلاینت مدل باید به مکان مصنوع دسترسی داشته باشند. یعنی، صرف نظر از این واقعیت که رابط کاربری Tracking در یک نمونه EC2 قرار دارد، هنگام اجرای MLflow به صورت محلی، دستگاه باید دسترسی مستقیم به S3 برای نوشتن مدلهای مصنوع داشته باشد.
Tracking UI مصنوعات را در یک سطل S3 ذخیره می کند
مدل های در حال اجرا
به محض اجرای سرور Tracking می توانید آموزش مدل ها را شروع کنید.
به عنوان مثال، ما از اصلاح شراب از مثال MLflow در استفاده خواهیم کرد چلیکون.
همانطور که قبلاً بحث کردیم، MLflow به شما امکان می دهد پارامترهای مدل، معیارها و مصنوعات را ثبت کنید تا بتوانید نحوه تکامل آنها را در طول تکرارها پیگیری کنید. این ویژگی بسیار مفید است زیرا از این طریق میتوانیم بهترین مدل را با تماس با سرور Tracking یا درک اینکه کدام کد با استفاده از گزارشهای هش git commits تکرار مورد نیاز را انجام داده است، بازتولید کنیم.
سرور ردیابی MLflow که با استفاده از دستور "mlflow server" راه اندازی شده است، دارای یک API REST برای ردیابی اجراها و نوشتن داده ها در سیستم فایل محلی است. میتوانید آدرس سرور ردیابی را با استفاده از متغیر محیطی «MLFLOW_TRACKING_URI» مشخص کنید و API ردیابی MLflow بهطور خودکار با سرور ردیابی در این آدرس تماس میگیرد تا اطلاعات راهاندازی، معیارهای گزارش و غیره را ایجاد/دریافت کند.
برای ارائه مدل به سرور، به یک سرور ردیابی در حال اجرا (به رابط راه اندازی مراجعه کنید) و Run ID مدل نیاز داریم.
اجرای 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
برای ارائه مدلها با استفاده از قابلیت سرویس MLflow، ما نیاز به دسترسی به Tracking UI داریم تا اطلاعات مربوط به مدل را به سادگی با مشخص کردن دریافت کنیم. --run_id.
هنگامی که مدل با سرور Tracking تماس می گیرد، می توانیم یک نقطه پایانی مدل جدید دریافت کنیم.
علیرغم این واقعیت که سرور Tracking به اندازه کافی قدرتمند است تا مدل ها را در زمان واقعی ارائه دهد، آنها را آموزش دهد و از عملکرد سرور استفاده کند (منبع: mlflow // docs // models # local، استفاده از Spark (بچکی یا استریم) به دلیل توزیع، راه حل قدرتمندتری است.
تصور کنید که به سادگی آموزش را به صورت آفلاین انجام داده اید و سپس مدل خروجی را روی تمام داده های خود اعمال کرده اید. اینجاست که Spark و MLflow می درخشند.
تعیین کردن notebook-dir، می توانیم نوت بوک های خود را در پوشه مورد نظر ذخیره کنیم.
پرتاب Jupyter از PySpark
از آنجایی که ما توانستیم مشتری را به عنوان یک درایور PySpark پیکربندی کنیم، اکنون می توانیم نوت بوک Jupyter را در زمینه 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
همانطور که در بالا ذکر شد، MLflow یک ویژگی برای ثبت آرتیفکت های مدل در S3 فراهم می کند. به محض اینکه مدل انتخاب شده را در دست داشته باشیم، این فرصت را داریم که با استفاده از ماژول آن را به صورت UDF وارد کنیم mlflow.pyfunc.
تا این مرحله، ما در مورد نحوه استفاده از PySpark با MLflow صحبت کردهایم که پیشبینیهای کیفیت شراب را در کل مجموعه داده شراب اجرا میکند. اما اگر نیاز به استفاده از ماژول های Python MLflow از Scala Spark داشته باشید، چه؟
ما این را نیز با تقسیم زمینه Spark بین Scala و Python آزمایش کردیم. یعنی ما MLflow UDF را در پایتون ثبت کردیم و از Scala استفاده کردیم (بله، شاید بهترین راه حل نباشد، اما آنچه که داریم).
Scala Spark + MLflow
برای این مثال اضافه می کنیم هسته توری به مشتری موجود
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
```
همانطور که از دفترچه ضمیمه مشاهده می کنید، UDF بین Spark و PySpark مشترک است. امیدواریم این بخش برای کسانی که اسکالا را دوست دارند و میخواهند مدلهای یادگیری ماشینی را در تولید پیادهسازی کنند مفید باشد.
اگرچه MLflow در زمان نگارش نسخه آلفا است، اما کاملا امیدوار کننده به نظر می رسد. فقط توانایی اجرای چندین چارچوب یادگیری ماشین و مصرف آنها از یک نقطه پایانی واحد، سیستم های توصیه گر را به سطح بعدی می برد.
علاوه بر این، MLflow مهندسان داده و متخصصان علوم داده را به هم نزدیکتر می کند و یک لایه مشترک بین آنها ایجاد می کند.
پس از این کاوش در MLflow، ما مطمئن هستیم که به جلو حرکت کرده و از آن برای خطوط لوله اسپارک و سیستمهای توصیهکننده خود استفاده خواهیم کرد.
خوب است که ذخیره سازی فایل را به جای سیستم فایل با پایگاه داده همگام کنید. این باید چندین نقطه پایانی را به ما بدهد که میتوانند از یک ذخیرهسازی فایل استفاده کنند. به عنوان مثال، از چندین نمونه استفاده کنید تند и الههء عقل و زیبایی با همان متاستور چسب.
به طور خلاصه، میخواهم از انجمن MLFlow تشکر کنم که کار ما را با دادهها جالبتر کرد.
اگر در حال بازی با MLflow هستید، دریغ نکنید که برای ما بنویسید و به ما بگویید که چگونه از آن استفاده می کنید، و حتی اگر از آن در تولید استفاده می کنید.