۱. مقدمه
| Kubeflow یک جعبه ابزار یادگیری ماشین برای Kubernetes است. این پروژه به ساده، قابل حمل و مقیاسپذیر کردن استقرار گردشهای کاری یادگیری ماشین (ML) در Kubernetes اختصاص داده شده است. هدف، ارائه روشی ساده برای استقرار بهترین سیستمهای متنباز برای یادگیری ماشین در زیرساختهای متنوع است. |
استقرار Kubeflow چگونه است؟
استقرار Kubeflow به شرح زیر است:
- قابل حمل - روی هر کلاستر Kubernetes کار میکند، چه روی پلتفرم ابری گوگل (GCP)، چه در محل یا بین ارائه دهندگان.
- مقیاسپذیر - میتواند از منابع متغیر استفاده کند و فقط با تعداد منابع اختصاص داده شده به خوشه Kubernetes محدود میشود.
- Composable - با سرویس ورکرها بهبود یافته تا به صورت آفلاین یا در شبکههای کمکیفیت کار کند.
این ابزاری برای سازماندهی میکروسرویسهای با اتصال سست به عنوان یک واحد واحد و استقرار آنها در مکانهای مختلف، چه لپتاپ باشد و چه فضای ابری، است.
این آزمایشگاه کد، شما را در ایجاد استقرار Kubeflow خود با استفاده از MiniKF و اجرای گردش کار Kubeflow Pipelines از داخل Jupyter Notebook راهنمایی میکند.
آنچه خواهید ساخت
در این آزمایشگاه کد، شما یک خط لوله پیچیده علوم داده را با Kubeflow Pipelines، بدون استفاده از هیچ دستور CLI یا SDK، خواهید ساخت. نیازی به داشتن دانش Kubernetes یا Docker ندارید. پس از اتمام، زیرساخت شما شامل موارد زیر خواهد بود:
- یک ماشین مجازی MiniKF (Mini Kubeflow) که به طور خودکار موارد زیر را نصب میکند:
- کوبرنتس (با استفاده از مینیکوبه)
- کوبفلو
- کاله ، ابزاری برای تبدیل نوتبوکهای ژوپیتر همه منظوره به گردشهای کاری Kubeflow Pipelines ( گیتهاب )
- Arrikto Rok برای نسخهبندی دادهها و تکرارپذیری
آنچه یاد خواهید گرفت
- نحوه نصب Kubeflow با MiniKF
- چگونه بدون استفاده از دستورات CLI یا SDK ها، Jupyter Notebook های خود را به Kubeflow Pipelines تبدیل کنیم؟
- نحوه اجرای Kubeflow Pipelines از داخل یک نوت بوک با کلیک یک دکمه
- چگونه دادههای خود را در یک نوتبوک و در هر مرحله از پایپلاین، بهطور خودکار نسخهبندی کنیم؟
آنچه نیاز دارید
- یک پروژه GCP فعال که مجوزهای مالکیت آن را دارید
این یک آزمایشگاه کد پیشرفته است که بر Kubeflow تمرکز دارد. برای پیشزمینه بیشتر و آشنایی با پلتفرم، به مستندات «مقدمهای بر Kubeflow» مراجعه کنید. مفاهیم و بلوکهای کد نامربوط، حذف شده و برای کپی و پیست ساده در اختیار شما قرار گرفتهاند.
۲. محیط را آماده کنید
شناسه پروژه GCP و نام خوشه خود را تنظیم کنید
برای یافتن شناسه پروژه خود، به پنل اصلی کنسول GCP که در منوی همبرگری در بالا سمت چپ قرار دارد، مراجعه کنید. اگر صفحه خالی است، برای ایجاد داشبورد، روی بله در اعلان کلیک کنید.

اگر پروژه هنوز انتخاب نشده است، روی «انتخاب پروژه» کلیک کنید:

و پروژه خود را انتخاب کنید. شما فقط باید یکی داشته باشید:

۳. نصب MiniKF
ایجاد یک نمونه محاسبه
در بازار GCP، عبارت "MiniKF" را جستجو کنید.
ماشین مجازی MiniKF ساخته شده توسط Arrikto را انتخاب کنید.

روی دکمهی «راهاندازی روی موتور محاسبات» کلیک کنید و پروژهی خود را انتخاب کنید.

در پنجره Configure & Deploy ، یک نام برای نمونه MiniKF خود انتخاب کنید و گزینههای پیشفرض را رها کنید. سپس روی دکمه Deploy کلیک کنید.

منتظر بمانید تا نمونه MiniKF Compute بوت شود.

ورود به MiniKF
وقتی ماشین مجازی MiniKF راهاندازی شد، با کلیک بر روی دکمه SSH متصل شده و وارد سیستم شوید. دستورالعملهای روی صفحه را برای اجرای دستور minikf دنبال کنید، که باعث شروع استقرار Minikube، Kubeflow و Rok میشود. تکمیل این کار چند دقیقه طول خواهد کشید.

ورود به کوبفلو
پس از اتمام نصب و آماده شدن تمام پادها، به داشبورد MiniKF مراجعه کنید. با استفاده از نام کاربری و رمز عبور MiniKF وارد Kubeflow شوید.


کاربران کروم این صفحه را خواهند دید:

کاربران فایرفاکس این صفحه را خواهند دید:

کاربران سافاری این صفحه را خواهند دید:

ورود به راک
پس از ورود به Kubeflow، با کلیک روی آیکون همبرگر، منوی سمت چپ را باز کنید. به Snapshot Store بروید و با استفاده از نام کاربری و رمز عبور MiniKF به Rok وارد شوید.


تبریک! شما با موفقیت MiniKF را روی GCP مستقر کردید! اکنون میتوانید Notebooks ایجاد کنید، کد ML خود را بنویسید و Kubeflow Pipelines را اجرا کنید. از Rok برای نسخهبندی دادهها و تکرارپذیری استفاده کنید.
۴. یک خط لوله را از داخل نوتبوک خود اجرا کنید
در طول این بخش، شما مثال تایتانیک را اجرا خواهید کرد، یک مسابقهی کاگل که پیشبینی میکند کدام مسافران از غرق شدن کشتی تایتانیک جان سالم به در بردهاند.
ایجاد یک سرور نوت بوک
به لینک سرورهای نوتبوک در داشبورد مرکزی Kubeflow بروید.

روی سرور جدید کلیک کنید.

یک نام برای سرور نوت بوک خود تعیین کنید.

مطمئن شوید که این تصویر را انتخاب کردهاید:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
یک Data Volume جدید و خالی به اندازه ۵ گیگابایت اضافه کنید و نام آن را data بگذارید.

برای ایجاد سرور نوتبوک، روی راهاندازی کلیک کنید.

وقتی سرور نوتبوک در دسترس قرار گرفت، برای اتصال به آن روی Connect کلیک کنید.

دانلود دادهها و دفترچه یادداشت
یک برگه جدید با صفحه فرود JupyterLab باز خواهد شد. یک ترمینال جدید در JupyterLab ایجاد کنید.

در پنجره ترمینال، این دستورات را اجرا کنید تا به پوشه دادهها بروید و دفترچه یادداشت و دادههایی را که برای ادامه آزمایش استفاده خواهید کرد، دانلود کنید.
cd data/ git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples
این مخزن شامل مجموعهای از مثالهای برگزیده به همراه دادهها و دفترچههای یادداشتشده است. به پوشه data/examples/titanic-ml-dataset/ در نوار کناری بروید و دفترچه titanic_dataset_ml.ipynb را باز کنید.

Explore the ML code of the Titanic challenge
نوتبوک را گام به گام اجرا کنید. توجه داشته باشید که کد به دلیل فقدان یک کتابخانه با شکست مواجه میشود.

به ترمینال برگردید و کتابخانهی گمشده را نصب کنید.
pip3 install --user seaborn

با کلیک روی آیکون Refresh، هسته نوتبوک را مجدداً راهاندازی کنید.

سلول را دوباره با کتابخانههای صحیح نصب شده اجرا کنید و شاهد موفقیت آن باشید.
نوت بوک خود را به یک خط لوله Kubeflow تبدیل کنید
با کلیک روی آیکون Kubeflow در پنل سمت چپ، Kale را فعال کنید.

وابستگیهای هر سلول را بررسی کنید. ببینید چگونه چندین سلول میتوانند بخشی از یک مرحله خط لوله باشند و چگونه یک مرحله خط لوله ممکن است به مراحل قبلی وابسته باشد.

روی دکمه کامپایل و اجرا کلیک کنید.

پیشرفت اسنپشات را تماشا کنید.

پیشرفت عملیات لوله گذاری را تماشا کنید.

برای رفتن به رابط کاربری Kubeflow Pipelines و مشاهدهی روند اجرا، روی لینک کلیک کنید.

صبر کنید تا کامل شود.


تبریک! شما به تازگی یک Kubeflow Pipeline سرتاسری را از نوتبوک خود اجرا کردید!
۵. تکرارپذیری با عکسهای فوری حجمی
نتایج را بررسی کنید
Have a look at the logs for the second-to-last pipeline step Results . Notice that all the predictors show a score of 100%. An experienced data scientist would immediately find this suspicious. This is a good indication that our models are not generalizing and are instead overfitting on the training data set. This is likely caused by an issue with the data consumed by the models.

حالت قبلی را بازتولید کنید
خوشبختانه، Rok نسخهبندی دادهها و بازتولید کل محیط را مانند زمانی که روی دکمه Compile and Run کلیک کردید، انجام میدهد. به این ترتیب، شما یک ماشین زمان برای دادهها و کد خود دارید. بنابراین بیایید قبل از آموزش یکی از مدلها، وضعیت خط لوله را از سر بگیریم و ببینیم چه اتفاقی میافتد. به مرحله randomforest نگاهی بیندازید، سپس روی Artifacts کلیک کنید.

مراحل موجود در Markdown را دنبال کنید، یعنی با کلیک روی لینک مربوطه، snapshot را در Rok UI مشاهده کنید.

آدرس اینترنتی Rok را کپی کنید.

به لینک سرورهای نوتبوک بروید.

روی سرور جدید کلیک کنید.

آدرس اینترنتی Rok را که قبلاً کپی کردهاید، جایگذاری کنید و روی دکمه تکمیل خودکار کلیک کنید.

برای دفترچه یادداشت خود نامی تعیین کنید.

مطمئن شوید که این تصویر را انتخاب کردهاید:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
برای ایجاد سرور نوتبوک، روی راهاندازی کلیک کنید.

وقتی سرور نوتبوک در دسترس قرار گرفت، برای اتصال به آن روی Connect کلیک کنید.

توجه داشته باشید که دفترچه یادداشت دقیقاً در سلول مربوط به مرحله خط لولهای که ایجاد کردهاید، باز میشود.

در پسزمینه، کاله با وارد کردن تمام کتابخانهها و بارگذاری متغیرها از مراحل قبلی، وضعیت نوتبوک را از سر گرفته است.
اشکالزدایی حالت قبلی
یک دستور چاپ به این سلول اضافه کنید:
print(acc_random_forest)
سلول فعال را با فشردن Shift + Return اجرا کنید تا جنگل تصادفی دوباره آموزش داده شود و امتیاز چاپ شود. این امتیاز ۱۰۰ است.

اکنون وقت آن است که ببینیم آیا مورد عجیبی در دادههای آموزشی وجود دارد یا خیر. برای بررسی و رفع این مشکل، با انتخاب سلول قبلی و کلیک بر روی نماد به علاوه (+) ، یک سلول بالاتر از علامتگذاری تصادفی جنگل اضافه کنید.

متن زیر را اضافه کنید و سلول را اجرا کنید تا مجموعه آموزشی چاپ شود.
train_df

اوه! ستونی که برچسب آموزشی دارد ("Survived") به اشتباه به عنوان ویژگیهای ورودی در نظر گرفته شده است! مدل یاد گرفته است که روی ویژگی "Survived" تمرکز کند و بقیه را نادیده بگیرد و ورودی را آلوده کند. این ستون دقیقاً با هدف مدل مطابقت دارد و در طول پیشبینی وجود ندارد، بنابراین باید از مجموعه دادههای آموزشی حذف شود تا مدل بتواند از سایر ویژگیها یاد بگیرد.
رفع اشکال را اضافه کنید
برای حذف این ستون، سلول را ویرایش کنید تا این دستور را اضافه کنید:
train_df.drop('Survived', axis=1, inplace=True)
train_df

Kale را فعال کنید و مطمئن شوید سلولی که برچسبهای Survived را حذف میکند، بخشی از مرحلهی خط لولهی مهندسی ویژگی باشد (باید رنگ بیرونی یکسانی داشته باشد).
با کلیک بر روی دکمه کامپایل و اجرا، خط لوله را دوباره اجرا کنید.
برای رفتن به رابط کاربری Kubeflow Pipelines و مشاهدهی روند اجرا، روی لینک کلیک کنید.
منتظر بمانید تا مرحله نتایج تکمیل شود و برای دیدن نتایج نهایی، گزارشها را مشاهده کنید. اکنون نمرات پیشبینی واقعبینانهای دارید!

۶. تمیز کردن
ماشین مجازی MiniKF را نابود کنید
به بخش مدیریت استقرار (Deployment Manager) در کنسول GCP بروید و استقرار minikf-1 را حذف کنید.
۷. تبریک
تبریک میگویم، شما با موفقیت یک گردش کار علم داده سرتاسری را با استفاده از Kubeflow (MiniKF)، Kale و Rok اجرا کردید!
بعدش چی؟
به انجمن Kubeflow بپیوندید:
- github.com/kubeflow
- کوبفلو اسلک
- kubeflow-discuss@googlegroups.com
- تماس تلفنی با جامعه در روزهای سهشنبه
