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 است.
یک پروژه جدید ایجاد کنید یا یک پروژه موجود را انتخاب کنید:
حداقل الزامات زیر را بررسی کنید:
- مطمئن شوید که نقش مالک پروژه را دارید.
- مطمئن شوید که صورتحساب برای پروژه شما فعال است.
- اگر از GCP Free Tier یا دوره آزمایشی 12 ماهه با اعتبار 300 دلاری استفاده می کنید، توجه داشته باشید که نمی توانید نصب پیش فرض GCP MiniKF را اجرا کنید، زیرا سطح رایگان منابع کافی را ارائه نمی دهد. باید به یک حساب پولی ارتقا دهید .
برای راهنمایی بیشتر در مورد راه اندازی یک پروژه GCP، به مستندات GCP مراجعه کنید.
پس از راه اندازی پروژه GCP خود، مستقیماً به دستورالعمل نصب MiniKF بروید.
پروژه GCP از پیش تخصیص داده شده خود را باز کنید
برای باز کردن پروژه GCP از پیش تخصیص داده شده خود، روی دکمه زیر کلیک کنید تا از کنسول GCP بازدید کنید و پانل Home را که در منوی همبرگر در بالا سمت چپ یافت می شود، باز کنید. اگر صفحه خالی است، روی Yes در اعلان کلیک کنید تا داشبورد ایجاد شود.
اگر پروژه از قبل انتخاب نشده است، روی انتخاب پروژه کلیک کنید:
پروژه خود را انتخاب کنید شما فقط باید یکی داشته باشید:
3. MiniKF را نصب کنید
یک نمونه محاسباتی از جمله MiniKF ایجاد کنید
در بازار GCP، "MiniKF" را جستجو کنید.
انتخاب ماشین مجازی MiniKF توسط Arrikto:
روی دکمه LAUNCH کلیک کنید و پروژه خود را انتخاب کنید:
در پنجره Configure & Deploy ، یک نام و یک منطقه برای نمونه MiniKF خود انتخاب کنید و گزینه های پیش فرض را رها کنید. سپس بر روی دکمه Deploy کلیک کنید:
منتظر بمانید تا نمونه MiniKF Compute بالا بیاید:
وارد MiniKF شوید
هنگامی که MiniKF VM روشن است، با کلیک بر روی دکمه SSH متصل شوید و وارد شوید. دستورالعمل های روی صفحه را دنبال کنید تا دستور minikf
را اجرا کنید، که استقرار Minikube، Kubeflow و Rok را آغاز می کند. چند دقیقه طول می کشد تا تکمیل شود.
وارد Kubeflow شوید
هنگامی که نصب کامل شد و همه پادها آماده شدند، به داشبورد MiniKF مراجعه کنید. با استفاده از نام کاربری و رمز عبور MiniKF به Kubeflow وارد شوید:
کاربران کروم این صفحه را خواهند دید:
کاربران فایرفاکس این صفحه را خواهند دید:
کاربران سافاری این صفحه را مشاهده خواهند کرد:
وارد Rok شوید
پس از ورود به Kubeflow، منوی سمت چپ را با کلیک بر روی نماد همبرگر باز کنید. بر روی Snapshots کلیک کنید و با استفاده از نام کاربری و رمز عبور MiniKF وارد Rok شوید.
تبریک می گویم! شما با موفقیت MiniKF را در GCP مستقر کرده اید. اکنون می توانید نوت بوک بسازید، کد ML خود را بنویسید، Kubeflow Pipelines را اجرا کنید و از Rok برای نسخه سازی و تکرارپذیری داده ها استفاده کنید.
4. یک خط لوله را از داخل نوت بوک خود اجرا کنید
در طول این بخش، نمونه Dog Breed Identification را اجرا می کنید، پروژه ای در Udacity AI Nanodegree. با توجه به تصویری از یک سگ، مدل نهایی تخمینی از نژاد سگ را ارائه می دهد.
یک سرور نوت بوک در خوشه Kubeflow خود ایجاد کنید
به پیوند Notebooks در داشبورد مرکزی Kubeflow بروید.
روی سرور جدید کلیک کنید.
یک نام برای سرور نوت بوک خود مشخص کنید.
مطمئن شوید که تصویر Docker زیر را انتخاب کرده اید (توجه داشته باشید که برچسب تصویر ممکن است متفاوت باشد):
gcr.io/arrikto/jupyter-kale:f20978e
یک حجم داده جدید و خالی به اندازه 5 گیگابایت اضافه کنید و نام آن را داده بگذارید.
برای ایجاد سرور نوت بوک بر روی Launch کلیک کنید.
هنگامی که سرور نوت بوک در دسترس است، روی Connect کلیک کنید تا به آن متصل شوید.
داده ها و نوت بوک را دانلود کنید
یک تب جدید با صفحه فرود JupyterLab باز می شود. یک ترمینال جدید در JupyterLab ایجاد کنید.
در پنجره ترمینال، این دستورات را اجرا کنید تا به پوشه داده بروید و نوت بوک و داده هایی را که برای بقیه آزمایشگاه استفاده خواهید کرد دانلود کنید:
cd data/ git clone https://github.com/kubeflow-kale/kale
مخزن شبیه سازی شده شامل یک سری نمونه های مدیریت شده با داده ها و نوت بوک های حاشیه نویسی شده است.
در نوار کناری، به پوشه data/kale/examples/dog-breed-classification/
بروید و notebook dog-breed.ipynb
را باز کنید.
کد ML نمونه شناسایی نژاد سگ را کاوش کنید
در حال حاضر، سلولهایی را که مجموعه دادهها را دانلود میکنند، اجرا نکنید ، زیرا قرار است از مجموعههای داده کوچکتر موجود در مخزن که به تازگی شبیهسازی کردهاید استفاده کنید. اگر این مثال را با سرعت خود از خانه اجرا می کنید، به راحتی مجموعه داده ها را دانلود کنید.
برای وارد کردن تمام کتابخانه های لازم، سلول imports
را اجرا کنید. توجه داشته باشید که کد خراب می شود زیرا یک کتابخانه وجود ندارد:
به طور معمول، شما باید یک تصویر Docker جدید ایجاد کنید تا بتوانید این نوت بوک را به عنوان خط لوله Kubeflow اجرا کنید تا کتابخانه های تازه نصب شده را نیز شامل شود. خوشبختانه، Rok و Kale اطمینان حاصل می کنند که هر کتابخانه ای که در طول توسعه نصب می کنید به خط لوله شما راه پیدا می کند، به لطف فناوری عکس برداری Rok و Kale که آن حجم های عکس فوری را در مراحل خط لوله نصب می کند.
برای نصب کتابخانه گمشده، سلول بعدی را اجرا کنید:
با کلیک بر روی آیکون Restart ، هسته نوت بوک را مجددا راه اندازی کنید:
سلول imports
را دوباره با کتابخانه های صحیح نصب شده اجرا کنید و موفقیت آن را مشاهده کنید.
نوت بوک خود را به خط لوله در Kubeflow Pipelines تبدیل کنید
Kale را با کلیک بر روی نماد Kubeflow در سمت چپ نوت بوک فعال کنید:
Kale را با کلیک بر روی نوار لغزنده در پنل استقرار Kale فعال کنید :
وابستگی های هر سلول را در نوت بوک کاوش کنید. ببینید چگونه چندین سلول نوتبوک میتوانند بخشی از یک مرحله خط لوله باشند، همانطور که با نوارهای رنگی در سمت چپ سلولها نشان داده شده است، و چگونه یک مرحله خط لوله ممکن است به مراحل قبلی بستگی داشته باشد، همانطور که با برچسبهای بالای سلولها نشان داده شده است. به عنوان مثال، تصویر زیر چندین سلول را نشان می دهد که بخشی از یک مرحله خط لوله هستند. آنها همان رنگ قرمز را دارند و به مرحله قبلی خط لوله بستگی دارند.
روی دکمه Compile and Run کلیک کنید:
اکنون Kale نوت بوک شما را با تبدیل آن به خط لوله Kubeflow Pipeline در دست می گیرد و می سازد. همچنین، از آنجا که کاله با Rok یکپارچه می شود تا از حجم داده های نوت بوک فعلی عکس بگیرد، می توانید پیشرفت عکس فوری را تماشا کنید. Rok از نسخهسازی دادهها و بازتولید کل محیط مراقبت میکند، همانطور که روی دکمه Compile and Run کلیک کردید. به این ترتیب، شما یک ماشین زمان برای داده ها و کد خود دارید، و خط لوله شما در همان محیطی که کد خود را توسعه داده اید، بدون نیاز به ساخت تصاویر داکر جدید اجرا می شود.
خط لوله گردآوری و در خطوط لوله Kubeflow آپلود شد. اکنون روی پیوند کلیک کنید تا به رابط کاربری Kubeflow Pipelines بروید و اجرا را مشاهده کنید.
رابط کاربری Kubeflow Pipelines در یک برگه جدید باز می شود. صبر کنید تا اجرا به پایان برسد.
تبریک می گویم! شما فقط یک خط لوله انتها به انتها را در خطوط لوله Kubeflow اجرا کردید، از نوت بوک خود شروع می کنید!
5. انتقال یادگیری با تنظیم هایپرپارامتر
نتایج را بررسی کنید
به گزارش های مرحله cnn-from-scratch نگاهی بیندازید. (روی مرحله در نمودار در Kubeflow Pipelines UI، سپس روی زبانه Logs کلیک کنید.) این مرحله ای است که در آن یک شبکه عصبی کانولوشنال (CNN) را از ابتدا آموزش دادید. توجه داشته باشید که مدل آموزش دیده دقت بسیار پایینی دارد و علاوه بر آن، تکمیل این مرحله زمان زیادی را به طول انجامید.
به گزارش های مرحله cnn-vgg16 نگاهی بیندازید. در این مرحله، شما از یادگیری انتقال بر روی مدل VGG-16 از پیش آموزش دیده استفاده کردید - یک شبکه عصبی آموزش دیده توسط گروه هندسه تصویری (VGG). دقت بسیار بالاتر از مدل قبلی است، اما هنوز هم می توانیم بهتر عمل کنیم.
اکنون به گزارش های مرحله cnn-resnet50 نگاهی بیندازید. در این مرحله از آموزش انتقال بر روی مدل ResNet-50 از پیش آموزش دیده استفاده کردید. دقت بسیار بالاتر است. بنابراین این مدلی است که شما برای بقیه این کد لبه استفاده خواهید کرد.
تنظیم فراپارامتر
به سرور نوت بوک در رابط کاربری Kubeflow خود برگردید و نوت بوک با نام dog-breed-katib.ipynb
را باز کنید (در path data/kale/examples/dog-breed-classification/
). در این نوت بوک، شما قصد دارید با استفاده از Katib چند آزمایش تنظیم هایپرپارامتر را بر روی مدل ResNet-50 اجرا کنید. توجه داشته باشید که یک سلول در ابتدای نوت بوک برای اعلام پارامترها دارید:
در قسمت سمت چپ نوت بوک، HP Tuning with Katib را برای اجرای تنظیم هایپرپارامتر فعال کنید:
سپس برای پیکربندی Katib بر روی Set up Katib Job کلیک کنید:
فضای جستجو را برای هر پارامتر تعریف کنید و یک هدف را تعریف کنید:
روی دکمه Compile and Run Katib Job کلیک کنید:
پیشرفت آزمایش کاتب را تماشا کنید:
برای دیدن آزمایش کاتب روی View کلیک کنید:
برای مشاهده اجراها در Kubeflow Pipelines (KFP) روی Done کلیک کنید:
در صفحه آزمایش کاتب، آزمایشات جدید را مشاهده خواهید کرد:
و در KFP UI اجراهای جدید را خواهید دید:
بیایید آنچه را که اتفاق افتاده باز کنیم. پیش از این، Kale یک خط لوله اجرا شده از یک نوت بوک تولید می کرد و اکنون در حال ایجاد چندین اجرای خط لوله است که در آن هر یک با ترکیب متفاوتی از آرگومان ها تغذیه می شود.
Katib جزء Kubeflow برای اجرای کارهای تنظیم فراپارامتر با هدف عمومی است. کاتب چیزی در مورد مشاغلی که در واقع انجام می دهد (که در اصطلاح کاتب آزمایش نامیده می شود) نمی داند. تمام چیزی که کاله به آن اهمیت می دهد فضای جستجو، الگوریتم بهینه سازی و هدف است. Katib از اجرای Jobs ساده (یعنی Pods) به عنوان آزمایشی پشتیبانی می کند، اما Kale یک شیم را پیاده سازی می کند تا آزمایش ها در واقع خطوط لوله را در خطوط لوله Kubeflow اجرا کنند و سپس معیارها را از اجرای خط لوله جمع آوری کند.
از آنجایی که آزمایش Katib در حال تولید آزمایش است، آزمایشهای بیشتری را در رابط کاربری Katib مشاهده خواهید کرد:
و اجراهای بیشتر در رابط کاربری KFP:
وقتی آزمایش Katib کامل شد، میتوانید تمام آزمایشها را در Katib UI مشاهده کنید:
و همه اجراها در رابط کاربری KFP:
اگر به Notebook برگردید، یک دکمه اطلاعات را درست در کنار آزمایش Katib در پانل Kale خواهید دید:
بر روی آن کلیک کنید و بهترین نتیجه و پارامترهایی که آن را ایجاد کرده است را مشاهده خواهید کرد:
6. پاکسازی کنید
MiniKF VM را نابود کنید
به Deployment Manager در کنسول GCP بروید و استقرار minikf-on-gcp
را حذف کنید.
7. تبریک می گویم
تبریک میگوییم، شما با استفاده از Kubeflow (MiniKF)، Kale و Rok یک گردش کار علم داده سرتاسر را با موفقیت اجرا کردید!
بعدش چی؟
به انجمن Kubeflow بپیوندید:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- تماس هفتگی جامعه، Slack و سایر جزئیات انجمن