۱. مقدمه
| Kubeflow یک جعبه ابزار یادگیری ماشین برای Kubernetes است. این پروژه به ساده، قابل حمل و مقیاسپذیر کردن استقرار گردشهای کاری یادگیری ماشین (ML) در Kubernetes اختصاص داده شده است. هدف، ارائه روشی ساده برای استقرار بهترین سیستمهای متنباز برای یادگیری ماشین در زیرساختهای متنوع است. |
استقرار Kubeflow چگونه است؟
استقرار Kubeflow به شرح زیر است:
- قابل حمل - روی هر کلاستر Kubernetes کار میکند، چه روی پلتفرم ابری گوگل (GCP)، چه در محل یا بین ارائه دهندگان.
- مقیاسپذیر - میتواند از منابع متغیر استفاده کند و فقط با تعداد منابع اختصاص داده شده به خوشه Kubernetes محدود میشود.
- Composable - شما را قادر میسازد تا مراحل مستقل را در یک گردش کار کامل ML پیکربندی کنید و از بین مجموعهای از چارچوبها و کتابخانههای ML انتخاب کنید.
Kubeflow به شما این امکان را میدهد که میکروسرویسهای با اتصال سست را به عنوان یک واحد واحد سازماندهی کنید و آنها را در مکانهای مختلفی از جمله روی لپتاپ، در محل یا در فضای ابری مستقر کنید.
این آزمایشگاه کد، شما را در ایجاد استقرار 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 یا پیکربندی پروژه GCP موجود خود، مراحل زیر را دنبال کنید. اگر قصد دارید از یک پروژه GCP موجود استفاده کنید، مطمئن شوید که پروژه حداقل الزامات شرح داده شده در زیر را برآورده میکند. اولین قدم باز کردن مدیریت منابع در کنسول GCP است.
یک پروژه جدید ایجاد کنید یا یک پروژه موجود را انتخاب کنید:

حداقل الزامات زیر را بررسی کنید:
- مطمئن شوید که نقش مالک پروژه را دارید.
- مطمئن شوید که پرداخت قبوض برای پروژه شما فعال است.
- اگر از سطح رایگان GCP یا دوره آزمایشی ۱۲ ماهه با اعتبار ۳۰۰ دلار استفاده میکنید، توجه داشته باشید که نمیتوانید نصب پیشفرض GCP در MiniKF را اجرا کنید، زیرا سطح رایگان منابع کافی را ارائه نمیدهد. باید حساب خود را به یک حساب پولی ارتقا دهید .
برای راهنمایی بیشتر در مورد راهاندازی یک پروژه GCP، به مستندات GCP مراجعه کنید.
پس از تنظیم پروژه GCP خود، مستقیماً به دستورالعملهای نصب MiniKF بروید.
پروژه GCP از پیش تخصیصیافته خود را باز کنید
برای باز کردن پروژه GCP از پیش اختصاص داده شده خود، روی دکمه زیر کلیک کنید تا به کنسول GCP بروید و پنل Home را که در منوی همبرگری در بالا سمت چپ قرار دارد، باز کنید. اگر صفحه خالی است، برای ایجاد داشبورد، روی Yes کلیک کنید.

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

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

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

روی دکمهی LAUNCH کلیک کنید و پروژهی خود را انتخاب کنید:

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

صبر کنید تا نمونه MiniKF Compute بوت شود:

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

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


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

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

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

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


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

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

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

مطمئن شوید که تصویر داکر زیر را انتخاب کردهاید (توجه داشته باشید که ممکن است برچسب تصویر متفاوت باشد):
gcr.io/arrikto/jupyter-kale:f20978e
یک درایو داده جدید و خالی به اندازه ۵ گیگابایت اضافه کنید و نام آن را data بگذارید.

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

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

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

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

کد ML مثال شناسایی نژاد سگ را بررسی کنید
فعلاً سلولهایی که مجموعه دادهها را دانلود میکنند اجرا نکنید ، زیرا قرار است از مجموعه دادههای کوچکتری که در مخزنی که اخیراً کلون کردهاید وجود دارد استفاده کنید. اگر این مثال را با سرعت دلخواه خود از خانه اجرا میکنید، میتوانید مجموعه دادهها را دانلود کنید.
سلول imports را اجرا کنید تا تمام کتابخانههای لازم وارد شوند. توجه داشته باشید که کد به دلیل فقدان یک کتابخانه با شکست مواجه میشود :

معمولاً برای اینکه بتوانید این نوتبوک را به عنوان یک خط لوله Kubeflow اجرا کنید، باید یک تصویر Docker جدید ایجاد کنید تا کتابخانههای تازه نصب شده را نیز شامل شود. خوشبختانه، Rok و Kale به لطف فناوری snapshoting Rok و نصب آن volume های snapshot شده در مراحل خط لوله، اطمینان حاصل میکنند که هر کتابخانهای که در طول توسعه نصب میکنید، راه خود را به خط لوله شما پیدا خواهد کرد.
سلول بعدی را برای نصب کتابخانهی از دست رفته اجرا کنید:

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

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

با کلیک روی اسلایدر در پنل استقرار Kale، Kale را فعال کنید :

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

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

حالا Kale کنترل را به دست میگیرد و نوتبوک شما را با تبدیل آن به یک خط لوله Kubeflow Pipelines میسازد. همچنین، از آنجایی که Kale با Rok ادغام میشود تا از حجم دادههای نوتبوک فعلی اسنپشات بگیرد، میتوانید پیشرفت اسنپشات را مشاهده کنید. Rok نسخهبندی دادهها و بازتولید کل محیط را همانطور که هنگام کلیک روی دکمه Compile and Run بود، انجام میدهد. به این ترتیب، شما یک ماشین زمان برای دادهها و کد خود دارید و خط لوله شما در همان محیطی که کد خود را توسعه دادهاید، اجرا میشود، بدون اینکه نیازی به ساخت تصاویر جدید docker باشد.

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

رابط کاربری Kubeflow Pipelines در یک تب جدید باز میشود. منتظر بمانید تا اجرا تمام شود.


تبریک! شما به تازگی یک خط لوله سرتاسری را در Kubeflow Pipelines اجرا کردهاید، که از نوتبوک شما شروع میشود!
۵. یادگیری انتقالی با تنظیم فراپارامتر
نتایج را بررسی کنید
نگاهی به گزارشهای مرحله cnn-from-scratch بیندازید. (روی مرحله در نمودار رابط کاربری Kubeflow Pipelines کلیک کنید، سپس روی تب Logs کلیک کنید.) این مرحلهای است که در آن یک شبکه عصبی کانولوشن (CNN) را از ابتدا آموزش دادهاید. توجه داشته باشید که مدل آموزش دیده دقت بسیار کمی دارد و علاوه بر آن، تکمیل این مرحله زمان زیادی طول کشیده است.

به لاگهای مرحله cnn-vgg16 نگاهی بیندازید. در این مرحله، شما از یادگیری انتقالی روی مدل از پیش آموزشدیده VGG-16 - یک شبکه عصبی آموزشدیده توسط گروه هندسه بصری (VGG) - استفاده کردید. دقت بسیار بالاتر از مدل قبلی است، اما هنوز هم میتوانیم بهتر عمل کنیم.

حالا، نگاهی به لاگهای مرحله cnn-resnet50 بیندازید. در این مرحله، شما از یادگیری انتقالی روی مدل از پیش آموزشدیده ResNet-50 استفاده کردید. دقت بسیار بالاتر است. بنابراین، این مدلی است که برای بقیه این آزمایشگاه کد استفاده خواهید کرد.

تنظیم هایپرپارامتر
به سرور نوتبوک در رابط کاربری Kubeflow خود برگردید و نوتبوکی با نام dog-breed-katib.ipynb (در مسیر data/kale/examples/dog-breed-classification/ ) را باز کنید. در این نوتبوک، قرار است با استفاده از Katib، آزمایشهای تنظیم هایپرپارامتر را روی مدل ResNet-50 اجرا کنید. توجه داشته باشید که در ابتدای نوتبوک یک سلول برای اعلام پارامترها دارید:

در پنل سمت چپ نوتبوک، HP Tuning را با Katib فعال کنید تا تنظیم هایپرپارامتر اجرا شود:

سپس برای پیکربندی کاتیب، روی تنظیم کار کاتیب کلیک کنید:

فضای جستجو را برای هر پارامتر تعریف کنید و یک هدف تعریف کنید:

روی دکمه کامپایل و اجرای کاتیب جاب کلیک کنید:

پیشرفت آزمایش کاتب را تماشا کنید:

برای دیدن آزمایش کاتب، روی «مشاهده» کلیک کنید:

برای مشاهدهی اجراها در Kubeflow Pipelines (KFP) روی Done کلیک کنید:

در صفحه آزمایش کاتب، آزمایشهای جدید را مشاهده خواهید کرد:

و در رابط کاربری KFP، اجراهای جدید را مشاهده خواهید کرد:

بیایید کمی بیشتر توضیح دهیم که چه اتفاقی افتاده است. پیش از این، کاله یک خط لوله را از یک نوتبوک اجرا میکرد و اکنون چندین خط لوله ایجاد میکند که به هر کدام ترکیبی متفاوت از آرگومانها داده میشود.
کاتیب (Katib) کامپوننت Kubeflow برای اجرای کارهای تنظیم فراپارامتر عمومی است. کاتیب چیزی در مورد کارهایی که واقعاً اجرا میکند (که در اصطلاح کاتیب به آنها آزمایش گفته میشود) نمیداند. تمام چیزی که کاله به آن اهمیت میدهد فضای جستجو، الگوریتم بهینهسازی و هدف است. کاتیب از اجرای کارهای ساده (یعنی Pods) به عنوان آزمایش پشتیبانی میکند، اما کاله یک shim پیادهسازی میکند تا آزمایشها واقعاً خطوط لوله را در Kubeflow Pipelines اجرا کنند و سپس معیارها را از اجرای خط لوله جمعآوری کنند.
از آنجایی که آزمایش کاتیب در حال تولید نسخههای آزمایشی است، نسخههای آزمایشی بیشتری را در رابط کاربری کاتیب مشاهده خواهید کرد:

و اجراهای بیشتر در رابط کاربری KFP:

وقتی آزمایش کاتیب تکمیل شد، میتوانید تمام آزمایشها را در رابط کاربری کاتیب مشاهده کنید:

و تمام اجراها در رابط کاربری KFP:

اگر به دفترچه یادداشت برگردید، یک دکمه اطلاعات درست کنار آزمایش کاتیب در پنل کاله خواهید دید:

روی آن کلیک کنید تا بهترین نتیجه و پارامترهایی که آن را تولید کردهاند را ببینید:

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