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

1. مقدمه

Kubeflow یک ابزار یادگیری ماشین برای Kubernetes است. این پروژه به ایجاد استقرار گردش‌های کاری یادگیری ماشین (ML) در Kubernetes ساده، قابل حمل و مقیاس‌پذیر اختصاص دارد. هدف، ارائه راهی ساده برای استقرار بهترین سیستم‌های منبع باز برای ML در زیرساخت‌های متنوع است.

استقرار Kubeflow چگونه به نظر می رسد؟

استقرار Kubeflow عبارت است از:

  • قابل حمل - روی هر خوشه Kubernetes کار می کند، چه در Google Cloud Platform (GCP)، چه در محل یا در بین ارائه دهندگان.
  • مقیاس پذیر - می تواند از منابع نوسانی استفاده کند و فقط با تعداد منابع تخصیص یافته به خوشه Kubernetes محدود می شود.
  • Composable - با کارگران خدماتی برای کار آفلاین یا در شبکه های با کیفیت پایین بهبود یافته است.

این وسیله ای است برای سازماندهی میکروسرویس های با اتصال آزاد به عنوان یک واحد و استقرار آنها در مکان های مختلف، چه لپ تاپ یا فضای ابری.

این کد لبه شما را در ایجاد استقرار Kubeflow خود با استفاده از MiniKF و اجرای یک گردش کاری Kubeflow Pipelines از داخل یک نوت بوک Jupyter راهنمایی می کند.

چیزی که خواهی ساخت

در این کد لبه، شما بدون استفاده از دستورات CLI یا SDK، یک خط لوله علوم داده پیچیده با خط لوله Kubeflow ایجاد خواهید کرد. شما نیازی به داشتن دانش Kubernetes یا Docker ندارید. پس از تکمیل، زیرساخت شما شامل موارد زیر خواهد بود:

  • یک ماشین مجازی MiniKF (Mini Kubeflow) که به طور خودکار نصب می کند:
  • Kubernetes (با استفاده از Minikube)
  • Kubeflow
  • Kale ، ابزاری برای تبدیل نوت‌بوک‌های Jupyter با هدف عمومی به گردش‌های کاری Kubeflow Pipelines ( GitHub )
  • Arrikto Rok برای نسخه سازی و تکرارپذیری داده ها

چیزی که یاد خواهید گرفت

  • نحوه نصب Kubeflow با MiniKF
  • چگونه نوت بوک های Jupyter خود را بدون استفاده از دستورات CLI یا SDK به خط لوله Kubeflow تبدیل کنید
  • نحوه اجرای Kubeflow Pipelines از داخل یک نوت بوک با کلیک یک دکمه
  • چگونه به طور خودکار داده های خود را در یک نوت بوک و در هر مرحله خط لوله نسخه کنید

آنچه شما نیاز دارید

  • یک پروژه GCP فعال که برای آن مجوزهای مالک دارید

این یک کد آزمایشگاه پیشرفته است که بر روی Kubeflow متمرکز شده است. برای پیشینه بیشتر و معرفی پلتفرم، به مستندات مقدماتی Kubeflow مراجعه کنید. مفاهیم و بلوک‌های کد غیرمرتبط محو می‌شوند و برای شما فراهم می‌شود تا به سادگی کپی و جایگذاری کنید.

2. محیط را تنظیم کنید

شناسه پروژه GCP و نام خوشه خود را تنظیم کنید

برای یافتن شناسه پروژه خود، از پانل صفحه اصلی کنسول GCP که در منوی همبرگر در بالا سمت چپ یافت می شود، دیدن کنید. اگر صفحه خالی است، روی Yes در اعلان کلیک کنید تا داشبورد ایجاد شود.

کنسول GCP را باز کنید

3fdc4329995406a0.png

اگر پروژه از قبل انتخاب نشده است، روی Select a project کلیک کنید:

e8952c0b96067dea.png

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

fe25c1925487142.png

3. MiniKF را نصب کنید

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

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

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

d6b423c1911ea85a.png

روی دکمه Launch on Compute Engine کلیک کنید و پروژه خود را انتخاب کنید.

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

وارد MiniKF شوید

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

774e83c3e96cf7b3.png

وارد Kubeflow شوید

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

وارد Rok شوید

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

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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

4. یک Pipeline را از داخل نوت بوک خود اجرا کنید

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

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

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

4115cac8d8474d73.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

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

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

یک حجم داده جدید و خالی به اندازه 5 گیگابایت اضافه کنید و نام آن را داده بگذارید.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

2f06041475f45d3.png

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

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

2482011174f7bc75.png

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

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

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

c85baf68b36c63b2.png

کد ML چالش تایتانیک را کاوش کنید

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

bf2451fd7407e334.png

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

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

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

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

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

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

روی دکمه Compile and Run کلیک کنید.

bde5cef34f00e258.png

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

9408f46abb2493f5.png

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

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

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

44bee7dc0d24ec21.png

d377b6d574a4970.png

تبریک می گویم! شما فقط یک خط لوله Kubeflow را از نوت بوک خود شروع کردید!

5. تکرارپذیری با حجم عکس فوری

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

به گزارش‌های مربوط به نتایج مرحله دوم تا آخر خط لوله نگاهی بیندازید. توجه داشته باشید که همه پیش بینی کننده ها امتیاز 100٪ را نشان می دهند. یک دانشمند داده باتجربه بلافاصله این موضوع را مشکوک خواهد یافت. این نشانه خوبی است که مدل‌های ما تعمیم نمی‌یابند و در عوض بر روی مجموعه داده‌های آموزشی بیش از حد برازش می‌کنند. این احتمالاً به دلیل مشکل در داده های مصرف شده توسط مدل ها ایجاد می شود.

2a594032c2dd6ff6.png

بازتولید حالت قبلی

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

4f25ca4560711b23.png

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

e533bc781da9355a.png

URL Rok را کپی کنید.

d155d19731b5cedd.png

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

aafeab01f3ef0863.png

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

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

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

7685c3bf35fc74b2.png

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

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

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

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

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

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

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

print(acc_random_forest)

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

e2a8a3b5465fcb5d.png

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

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

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

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

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

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

9e76c16a862b566.png

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

با کلیک بر روی دکمه Compile and Run دوباره خط لوله را اجرا کنید.

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

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

8c6a9676b49e5be8.png

6. پاکسازی کنید

MiniKF VM را نابود کنید

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

7. تبریک می گویم

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

بعدش چی؟

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

در ادامه مطلب