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

1. مقدمه

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

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

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

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

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

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

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

در این نرم افزار کد، شما یک خط لوله علوم داده پیچیده با تنظیم هایپرپارامتر بر روی خطوط لوله Kubeflow، بدون استفاده از هیچ دستور CLI یا SDK ایجاد خواهید کرد. شما نیازی به داشتن دانش 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 یا پیکربندی پروژه GCP موجود خود دنبال کنید. اگر قصد دارید از یک پروژه GCP موجود استفاده کنید، مطمئن شوید که پروژه حداقل الزامات توضیح داده شده در زیر را برآورده می کند. اولین قدم باز کردن مدیر منابع در کنسول GCP است.

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

99b103929d928576.png

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

  • مطمئن شوید که نقش مالک پروژه را دارید.
  • مطمئن شوید که صورتحساب برای پروژه شما فعال است.
  • اگر از GCP Free Tier یا دوره آزمایشی 12 ماهه با اعتبار 300 دلاری استفاده می کنید، توجه داشته باشید که نمی توانید نصب پیش فرض GCP MiniKF را اجرا کنید، زیرا سطح رایگان منابع کافی را ارائه نمی دهد. باید به یک حساب پولی ارتقا دهید .

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

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

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

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

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

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

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

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

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

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

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

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

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

یک سرور نوت بوک در خوشه Kubeflow خود ایجاد کنید

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

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

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

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

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/ بروید و notebook dog-breed.ipynb را باز کنید.

2bc436465522f65b.png

کد ML نمونه شناسایی نژاد سگ را کاوش کنید

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

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

5e2b97ab2512f139.png

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

برای نصب کتابخانه گمشده، سلول بعدی را اجرا کنید:

c483da77943a6f01.png

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

376b5203209c2c91.png

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

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

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

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

رابط کاربری Kubeflow Pipelines در یک برگه جدید باز می شود. صبر کنید تا اجرا به پایان برسد.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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

5. انتقال یادگیری با تنظیم هایپرپارامتر

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

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

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

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

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

سپس برای پیکربندی Katib بر روی Set up Katib Job کلیک کنید:

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

روی دکمه Compile and Run Katib Job کلیک کنید:

f9c1ab0a6a3c5e8d.png

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

f3514011876564db.png

برای دیدن آزمایش کاتب روی View کلیک کنید:

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

و در KFP UI اجراهای جدید را خواهید دید:

43dd34ee2b75018d.png

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

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

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

3e854d3d4bb766c.png

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

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

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

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

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

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

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

بعدش چی؟

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

در ادامه مطلب