استفاده از MLFlow برای ردیابی و تفسیر مدل‌های یادگیری ماشینی


منتشر‌شده در: towardsdatascience به تاریخ ۲۸ سپتامبر ۲۰۲۱
لینک منبع Using MLFlow to Track and Version Machine Learning Models

هنگامی که ما پارامترهای یک مدل یادگیری ماشینی را تنظیم می‌کنیم، ممکن است نیاز به آموزش آن برای چندین بار به منظور انتخاب بهترین مدل را داشته باشیم. اگر تعداد آموزش‌ها خیلی زیاد باشد، ممکن است دو مشکل داشته باشیم.

  • چگونه پارامترها و معیارهای هر مدل را ردیابی کنیم؟ نوشتن آن‌ها به صورت دستی در یک فایل اکسل؟ این کار خسته‌کننده و مستعد خطا خواهد بود.
  • چگونه می‌توانیم هر مدل را تفسیر و نسخه‌برداری کنیم؟ آن‌ها را در دیسک با یک نام متفاوت برای هر کدام ذخیره کنید؟ به یاد آوردن این که کدام مدل از کدام پارامترها می‌آید دشوار است.

چیزی که ما برای حل این مشکلات به آن نیاز داریم MLFlow است. این یک ابزار MLOps قدرتمند برای ردیابی مدل ML، تفسیر، بسته‌بندی، و غیره است. در این وبلاگ، ما بر ردیابی و به نظم درآوردن تمرکز خواهیم کرد. با توجه به ردیابی، MLFlow می‌تواند پارامترها، معیارها و مدل‌ها را ردیابی کند. با توجه به تفسیرات، MLFlow مدل‌ها را در یک لاگ مدل ذخیره می‌کند، و سپس کاربران می‌توانند به راحتی یک نسخه خاص را انتخاب کنند.

می‌توان MLFlow را به صورت محلی یا از ظرف docker اجرا کرد، و همچنین می‌تواند در kubernetes مستقر شود. همچنین دارای API هایی در پایتون، جاوا، R و REST می‌باشد.

در این وبلاگ، نحوه استفاده از mlflow را برای پی‌گیری و ویرایش مدل‌های طبقه‌بندی mnist به نمایش خواهیم گذاشت. ما ابتدا یک مثال MNIST را باtensorflow اجرا می‌کنیم و سپس کد را برای ادغام mlflow گسترش می‌دهیم.

شکل ۱: تصویر اسحاق اسمیت ازUnsplash
شکل ۱: تصویر اسحاق اسمیت ازUnsplash

مثال MNIST

اول، یک محیط مجازی ایجاد کنید، و pip tensorflow و mlflow را نصب کند.

# my version is 2.6.0
pip install tensorflow
# my version is 4.4.0
pip install tensorflow_datasets
# my version is 1.9.1
pip install mlflow

در زیر کدهایی برای اجرای طبقه‌بندی چند هسته‌ای با استفاده از tensorflow آمده‌است.

طبقه‌بندی MNIST در tensorflow

کد را اجرا کنید و باید یک لاگ مانند زیر را ببینید. این همچنین مدل‌ها را در پوشه مدل ذخیره می‌کند.

شکل ۲: لاگ mnist.py (تصویر نویسنده)
شکل ۲: لاگ mnist.py (تصویر نویسنده)
ردیابی MLFlow

اکنون، اجازه دهید پارامترها، معیارها، و همچنین مصنوعات (مدل‌ها) را ردیابی کنیم. کد زیر را ببینید (همچنین کد کامل را در پایین ببینید). اول، ما باید نام یک اجرا را انتخاب کنیم. ما حتی می‌توانیم یک آزمایش را نام ببریم (سطح بالاتری از اجرا) اگر بخواهیم. سپس از توابع log_param، log_metric و log_artifacts برای ثبت پارامترها، معیارها و مصنوعات استفاده می‌کنیم.

import mlflowwith mlflow.start_run(run_name=run_name):
mlflow.log_param("batch_size", batch_size)
mlflow.log_param("learning_rate", learning_rate)
mlflow.log_param("epochs", epochs)
mlflow.log_metric("train_loss", train_loss)
mlflow.log_metric("train_accuracy", train_acc)
mlflow.log_metric("val_loss", val_loss)
mlflow.log_metric("val_accuracy", val_acc)
mlflow.log_artifacts("./model")

پس از اجرای کدmlflow، می‌بینیم که یک پوشه جدید به نام mlruns در دیسک ما وجود دارد. این مکانی است که در آن پارامترها، معیارها، و مصنوعات به صورت محلی ذخیره می‌شوند.

سپس می‌توانیم برخی پارامترها را تنظیم کنیم، برای مثال، اندازه دسته (batch_size) و نرخ یادگیری(learning_rate) را تغییر دهیم. هر اجرا به mlflow وارد خواهد شد.

اکنون، بیایید همه چیز را در رابط کاربری mlflow مشاهده کنیم. در محیط مجازی، تایپ کنید:

mlflow ui

سپس به آدرس http://localhost:5000/ مراجعه کنید. ما می‌توانیم ببینیم که همه اجراها در آنجا ثبت شده‌اند. پارامترها، معیارها و نام‌های اجرا را می توان به وضوح در یک صفحه مشاهده کرد.

شکل ۳: سرعت در ردیابیmlflow (تصویر نویسنده)
شکل ۳: سرعت در ردیابیmlflow (تصویر نویسنده)

اگر روی یک اجرا کلیک کنیم، می‌توانیم جزئیات بیشتری در مورد این اجرا ببینیم. جدا از پارامترها و معیارها، بخش Artifacts در پایین سمت چپ مصنوعات (مدل‌ها) ما را نشان می‌دهد.

شکل ۴: جزئیات اجرایmlflow (تصویر نویسنده)
شکل ۴: جزئیات اجرایmlflow (تصویر نویسنده)

آدرس url هر اجرا فرمت زیر را دارد. شناسه‌های اجرا شده در هر آزمایش منحصر به فرد است.

http://localhost:5000/#/experiments/<experiment id>/runs/<run id>

تفسیر مدلMLFlow

رجیستری مدلMLflow یک مکان مرکزی برای ذخیره و نسخه مدل‌ها است. با استفاده از آن، یک مدل دارای یک نسخه تکراری از (برای مثال) v1، v2، …، تا است. برای هر مدل و نسخه، ما می‌توانیم یک توصیف نشانه‌گذاری (برای مثال پارامترهای دقیق) همراه با آن بنویسیم، به طوری که بعدا بدانیم که مدل چه چیزی را نشان می‌دهد. علاوه بر این، می‌توانیم نسخه‌ای را با Staging، Production یا Archived برچسب بزنیم.

برای راه‌اندازی رجیستری مدل، به پایگاه داده‌ای برای ذخیره مدل‌ها نیاز داریم. پس از آن، می‌توانیم مدل‌هایtensorflow خود را در رجیستری mlflow آپلود کنیم. در زیر یک مثال کد آورده شده‌است.

import mlflow.tensorflow
from tensorflow.python.saved_model import signature_constantstag=[tf.saved_model.tag_constants.SERVING]
key=signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEYmlflow.tensorflow.log_model(tf_saved_model_dir="./model",
tf_meta_graph_tags=tag,
tf_signature_def_key=key,
artifact_path="model",
registered_model_name="mnist")

در نتیجهMLFlow یک ابزار قدرتمند برای ردیابی و ویرایش مدل‌های یادگیری ماشینی است. استفاده از API های آن آسان است. با رابط کاربری خوب آن، می‌توانیم به وضوح نسخه‌های مختلف مدل را ردیابی، ذخیره و مقایسه کنیم.

این متن با استفاده از ربات ترجمه مقالات دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.