از Notebook تا Kubeflow Pipelines با HP Tuning: A Data Science Journey

۱. مقدمه

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 است.

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

99b103929d928576.png

حداقل الزامات زیر را بررسی کنید:

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

برای راهنمایی بیشتر در مورد راه‌اندازی یک پروژه GCP، به مستندات GCP مراجعه کنید.

پس از تنظیم پروژه GCP خود، مستقیماً به دستورالعمل‌های نصب MiniKF بروید.

پروژه GCP از پیش تخصیص‌یافته خود را باز کنید

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

۳. نصب MiniKF

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

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

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

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.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، با کلیک روی آیکون همبرگر، منوی سمت چپ را باز کنید. روی Snapshots کلیک کنید و با استفاده از نام کاربری و رمز عبور MiniKF وارد Rok شوید.

۱۶۱۷۱f35a935a9af.png

80aad6ba5d298a7e.png

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

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

در طول این بخش، شما مثال شناسایی نژاد سگ، یک پروژه در Udacity AI Nanodegree را اجرا خواهید کرد. با دریافت تصویر یک سگ، مدل نهایی تخمینی از نژاد سگ ارائه می‌دهد.

یک سرور نوت‌بوک در کلاستر Kubeflow خود ایجاد کنید

به لینک Notebooks در داشبورد مرکزی Kubeflow بروید.

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

مطمئن شوید که تصویر داکر زیر را انتخاب کرده‌اید (توجه داشته باشید که ممکن است برچسب تصویر متفاوت باشد):

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

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

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

ab9ac96f1a1f0d09.png

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

cd data/
git clone https://github.com/kubeflow-kale/kale

مخزن شبیه‌سازی‌شده شامل مجموعه‌ای از مثال‌های گزینش‌شده به همراه داده‌ها و دفترچه‌های یادداشت‌شده است.

در نوار کناری، به پوشه data/kale/examples/dog-breed-classification/ بروید و دفترچه یادداشت dog-breed.ipynb را باز کنید.

2bc436465522f65b.png

کد ML مثال شناسایی نژاد سگ را بررسی کنید

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

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

5e2b97ab2512f139.png

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

سلول بعدی را برای نصب کتابخانه‌ی از دست رفته اجرا کنید:

c483da77943a6f01.png

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

376b5203209c2c91.png

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

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

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

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

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

fcd0fb351cfb359.png

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

۱۸f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

۲۱a9d54a57f3e20c.png

39e6fa39516d2773.png

تبریک! شما به تازگی یک خط لوله سرتاسری را در Kubeflow Pipelines اجرا کرده‌اید، که از نوت‌بوک شما شروع می‌شود!

۵. یادگیری انتقالی با تنظیم فراپارامتر

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

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

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

تنظیم هایپرپارامتر

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

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

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

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

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

از آنجایی که آزمایش کاتیب در حال تولید نسخه‌های آزمایشی است، نسخه‌های آزمایشی بیشتری را در رابط کاربری کاتیب مشاهده خواهید کرد:

3e854d3d4bb766c.png

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

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

۹۵b092180d71dc80.png

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

3b0ce47e548e5afb.png

۶. تمیز کردن

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

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

۷. تبریک

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

بعدش چی؟

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

مطالعه بیشتر