از Notebook تا Kubeflow Pipelines با MiniKF و Kale

۱. مقدمه

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 که در منوی همبرگری در بالا سمت چپ قرار دارد، مراجعه کنید. اگر صفحه خالی است، برای ایجاد داشبورد، روی بله در اعلان کلیک کنید.

Open the GCP Console

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

۳. نصب MiniKF

ایجاد یک نمونه محاسبه

در بازار GCP، عبارت "MiniKF" را جستجو کنید.

ماشین مجازی MiniKF ساخته شده توسط Arrikto را انتخاب کنید.

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

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

۵۲۲۸۰۸۶caadc44c6.png

ورود به MiniKF

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

774e83c3e96cf7b3.png

ورود به کوبفلو

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

۱c6fd768d71c0a92.png

ورود به راک

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

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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

۴. یک خط لوله را از داخل نوت‌بوک خود اجرا کنید

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

ایجاد یک سرور نوت بوک

به لینک سرورهای نوت‌بوک در داشبورد مرکزی Kubeflow بروید.

4115cac8d8474d73.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

مطمئن شوید که این تصویر را انتخاب کرده‌اید:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

یک Data Volume جدید و خالی به اندازه ۵ گیگابایت اضافه کنید و نام آن را data بگذارید.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

2f06041475f45d3.png

دانلود داده‌ها و دفترچه یادداشت

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

۲۴۸۲۰۱۱۷۴f۷bc۷۵.png

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

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

این مخزن شامل مجموعه‌ای از مثال‌های برگزیده به همراه داده‌ها و دفترچه‌های یادداشت‌شده است. به پوشه data/examples/titanic-ml-dataset/ در نوار کناری بروید و دفترچه titanic_dataset_ml.ipynb را باز کنید.

c85baf68b36c63b2.png

Explore the ML code of the Titanic challenge

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

bf2451fd7407e334.png

به ترمینال برگردید و کتابخانه‌ی گمشده را نصب کنید.

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

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

نوت بوک خود را به یک خط لوله Kubeflow تبدیل کنید

با کلیک روی آیکون Kubeflow در پنل سمت چپ، Kale را فعال کنید.

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

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

bde5cef34f00e258.png

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

9408f46abb2493f5.png

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

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

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

44bee7dc0d24ec21.png

d377b6d574a4970.png

تبریک! شما به تازگی یک 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.

2a594032c2dd6ff6.png

حالت قبلی را بازتولید کنید

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

4f25ca4560711b23.png

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

e533bc781da9355a.png

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

d155d19731b5cedd.png

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

aafeab01f3ef0863.png

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

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

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

7685c3bf35fc74b2.png

مطمئن شوید که این تصویر را انتخاب کرده‌اید:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

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

28c024bcc55cc70a.png

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

۳۴۹۵۵a۶۴ae۳۱۶de۱.png

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

a1f7c81f349e0364.png

در پس‌زمینه، کاله با وارد کردن تمام کتابخانه‌ها و بارگذاری متغیرها از مراحل قبلی، وضعیت نوت‌بوک را از سر گرفته است.

اشکال‌زدایی حالت قبلی

یک دستور چاپ به این سلول اضافه کنید:

print(acc_random_forest)

سلول فعال را با فشردن Shift + Return اجرا کنید تا جنگل تصادفی دوباره آموزش داده شود و امتیاز چاپ شود. این امتیاز ۱۰۰ است.

e2a8a3b5465fcb5d.png

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

d1077f32dff9620f.png

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

train_df

۲۸۵۴۷۹۸ff01aed4e.png

اوه! ستونی که برچسب آموزشی دارد ("Survived") به اشتباه به عنوان ویژگی‌های ورودی در نظر گرفته شده است! مدل یاد گرفته است که روی ویژگی "Survived" تمرکز کند و بقیه را نادیده بگیرد و ورودی را آلوده کند. این ستون دقیقاً با هدف مدل مطابقت دارد و در طول پیش‌بینی وجود ندارد، بنابراین باید از مجموعه داده‌های آموزشی حذف شود تا مدل بتواند از سایر ویژگی‌ها یاد بگیرد.

رفع اشکال را اضافه کنید

برای حذف این ستون، سلول را ویرایش کنید تا این دستور را اضافه کنید:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Kale را فعال کنید و مطمئن شوید سلولی که برچسب‌های Survived را حذف می‌کند، بخشی از مرحله‌ی خط لوله‌ی مهندسی ویژگی باشد (باید رنگ بیرونی یکسانی داشته باشد).

با کلیک بر روی دکمه کامپایل و اجرا، خط لوله را دوباره اجرا کنید.

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

منتظر بمانید تا مرحله نتایج تکمیل شود و برای دیدن نتایج نهایی، گزارش‌ها را مشاهده کنید. اکنون نمرات پیش‌بینی واقع‌بینانه‌ای دارید!

8c6a9676b49e5be8.png

۶. تمیز کردن

ماشین مجازی MiniKF را نابود کنید

به بخش مدیریت استقرار (Deployment Manager) در کنسول GCP بروید و استقرار minikf-1 را حذف کنید.

۷. تبریک

تبریک می‌گویم، شما با موفقیت یک گردش کار علم داده سرتاسری را با استفاده از Kubeflow (MiniKF)، Kale و Rok اجرا کردید!

بعدش چی؟

به انجمن Kubeflow بپیوندید:

مطالعه بیشتر