1. مقدمة
| Kubeflow هي مجموعة أدوات لتعلُّم الآلة مخصّصة لمنصة Kubernetes. يهدف المشروع إلى تسهيل عمليات نشر مهام تعلُّم الآلة على Kubernetes، وجعلها قابلة للنقل والتوسيع. الهدف هو توفير طريقة مباشرة لنشر أفضل أنظمة مفتوحة المصدر لتعلُّم الآلة على بنى أساسية متنوعة. |
كيف يبدو نشر Kubeflow؟
عملية نشر Kubeflow هي:
- إمكانية النقل: يمكن استخدامها على أي مجموعة Kubernetes، سواء كانت مستضافة على Google Cloud Platform (GCP) أو في مقر الشركة أو على مستوى عدة موفّرين.
- قابل للتوسّع: يمكن استخدام موارد متقلّبة ولا يقتصر على عدد الموارد المخصّصة لمجموعة Kubernetes.
- قابلة للإنشاء: تتيح لك إعداد خطوات مستقلة في سير عمل كامل للتعلم الآلي، والاختيار من مجموعة منتقاة من أُطر ومكتبات التعلم الآلي.
تتيح لك Kubeflow إمكانية تنظيم الخدمات المصغّرة المرتبطة بشكل غير محكم كوحدة واحدة ونشرها في مجموعة متنوعة من المواقع، بما في ذلك على جهاز كمبيوتر محمول أو داخل المؤسسة أو في السحابة الإلكترونية.
يرشدك هذا الدرس التطبيقي حول الترميز إلى كيفية إنشاء عملية تفعيل Kubeflow باستخدام MiniKF، ثم تنفيذ سير عمل Kubeflow Pipelines مع ضبط المعلَمة الفائقة لتدريب نموذج وعرضه. يمكنك إجراء كل ذلك من داخل دفتر جوبيتر.
ما ستنشئه
في هذا الدرس العملي، ستنشئ مسارًا معقّدًا لعلوم البيانات مع ضبط المعلمات الفائقة على Kubeflow Pipelines، بدون استخدام أي أوامر CLI أو حِزم SDK. لا تحتاج إلى أي معرفة بـ Kubernetes أو Docker. عند اكتمال العملية، ستتضمّن بنيتك الأساسية ما يلي:
- آلة افتراضية (VM) من MiniKF (Mini Kubeflow) يتم تثبيتها تلقائيًا:
- Kubernetes (باستخدام Minikube)
- Kubeflow
- Kale: أداة لتحويل أوراق ملاحظات Jupyter Notebooks العامة إلى سير عمل Kubeflow Pipelines ( GitHub)
- Arrikto Rok لإصدار البيانات وإمكانية تكرارها
ما ستتعلمه
- كيفية تثبيت Kubeflow باستخدام MiniKF
- كيفية تحويل أوراق ملاحظات Jupyter إلى Kubeflow Pipelines بدون استخدام أي أوامر من واجهة سطر الأوامر أو حِزم تطوير البرامج
- كيفية تشغيل Kubeflow Pipelines مع ضبط المعلمات الفائقة من داخل دفتر ملاحظات بنقرة زر
- كيفية إنشاء إصدارات من بياناتك تلقائيًا في دفتر ملاحظات وفي كل خطوة من خطوات عملية إنشاء خطوط الأنابيب
المتطلبات
- مشروع نشط على Google Cloud Platform لديك أذونات المالك له
هذا الدرس التطبيقي حول الترميز المتقدّم يركّز على Kubeflow. لمزيد من المعلومات الأساسية ومقدمة عن المنصة، يُرجى الاطّلاع على مستندات مقدمة عن Kubeflow. يتم تجاهل المفاهيم ومجموعات الرموز غير ذات الصلة وتقديمها لك لنسخها ولصقها ببساطة.
2. إعداد البيئة
إعداد مشروعك على Google Cloud Platform
اتّبِع الخطوات التالية لإنشاء مشروع على Google Cloud Platform أو إعداد مشروعك الحالي على Google Cloud Platform. إذا كنت تخطّط لاستخدام مشروع حالي على Google Cloud Platform، تأكَّد من أنّ المشروع يستوفي الحدّ الأدنى من المتطلبات الموضّحة أدناه. الخطوة الأولى هي فتح "إدارة الموارد" في وحدة تحكّم Google Cloud Platform.
أنشِئ مشروعًا جديدًا أو اختَر مشروعًا حاليًا:

تحقَّق من الحدّ الأدنى من المتطلبات التالية:
- تأكَّد من أنّ لديك دور المالك للمشروع.
- تأكَّد من تفعيل الفوترة لمشروعك.
- إذا كنت تستخدم طبقة GCP المجانية أو الفترة التجريبية التي تبلغ 12 شهرًا مع رصيد بقيمة 300 دولار أمريكي، يُرجى العِلم أنّه لا يمكنك تشغيل عملية التثبيت التلقائية لـ MiniKF على GCP، لأنّ الطبقة المجانية لا توفّر موارد كافية. عليك الترقية إلى حساب مدفوع.
للحصول على مزيد من المساعدة بشأن إعداد مشروع على Google Cloud Platform، يُرجى الاطّلاع على مستندات Google Cloud Platform.
بعد إعداد مشروعك على GCP، انتقِل مباشرةً إلى تعليمات تثبيت MiniKF.
افتح مشروع Google Cloud Platform الذي تم تخصيصه مسبقًا
لفتح مشروع Google Cloud Platform الذي تم تخصيصه مسبقًا، انقر على الزر أدناه للانتقال إلى "وحدة تحكّم Google Cloud" وفتح لوحة "الصفحة الرئيسية" (Home) في قائمة الخطوط الثلاثة في أعلى يمين الصفحة. إذا كانت الشاشة فارغة، انقر على "نعم" في الطلب لإنشاء لوحة بيانات.

إذا لم يكن المشروع محدّدًا من قبل، انقر على اختيار مشروع:

اختَر مشروعك. يجب أن يكون لديك حساب واحد فقط:

3- تثبيت MiniKF
إنشاء آلة افتراضية في Compute Engine تتضمّن MiniKF
في GCP Marketplace، ابحث عن "MiniKF".
اختَر الجهاز الافتراضي MiniKF من Arrikto:

انقر على الزر تشغيل واختَر مشروعك:

في نافذة الإعداد والنشر (Configure & Deploy)، اختَر اسمًا ومنطقة لمثيل MiniKF واترك الخيارات التلقائية. بعد ذلك، انقر على الزر نشر:

انتظِر إلى أن يتم تشغيل مثيل MiniKF Compute:

تسجيل الدخول إلى MiniKF
عندما يكون الجهاز الافتراضي MiniKF نشطًا، اتّصِل به وسجِّل الدخول من خلال النقر على الزر SSH. اتّبِع التعليمات الظاهرة على الشاشة لتنفيذ الأمر minikf، ما سيؤدي إلى بدء نشر Minikube وKubeflow وRok. سيستغرق إكمال هذه الخطوة بضع دقائق.

تسجيل الدخول إلى Kubeflow
عند اكتمال التثبيت وتجهيز جميع الحاويات، انتقِل إلى لوحة بيانات MiniKF. سجِّل الدخول إلى Kubeflow باستخدام اسم المستخدم وكلمة المرور في MiniKF:


ستظهر لمستخدمي Chrome الشاشة التالية:

سيظهر لمستخدمي Firefox الشاشة التالية:

سيظهر لمستخدمي Safari الشاشة التالية:

تسجيل الدخول إلى Rok
بعد تسجيل الدخول إلى Kubeflow، افتح القائمة اليمنى من خلال النقر على رمز الخطوط الثلاثة. انقر على اللقطات وسجِّل الدخول إلى Rok باستخدام اسم المستخدم وكلمة المرور في MiniKF.


تهانينا! لقد تم نشر MiniKF على "منصة Google Cloud" بنجاح. يمكنك الآن إنشاء دفاتر ملاحظات وكتابة رمز تعلُّم الآلة وتشغيل Kubeflow Pipelines واستخدام Rok للتحكّم في إصدار البيانات وإمكانية تكرارها.
4. تشغيل مسار من داخل دفتر الملاحظات
خلال هذا القسم، ستنفّذ مثال "تحديد سلالة الكلاب"، وهو مشروع في برنامج Udacity AI Nanodegree. عند تقديم صورة لكلب، سيقدّم النموذج النهائي تقديرًا لسلالة الكلب.
إنشاء خادم دفتر ملاحظات في مجموعة Kubeflow
انتقِل إلى الرابط دفاتر الملاحظات في لوحة البيانات المركزية في Kubeflow.

انقر على خادم جديد.

حدِّد اسمًا لخادم دفتر الملاحظات.

تأكَّد من اختيار صورة Docker التالية (يُرجى العِلم أنّ علامة الصورة قد تختلف):
gcr.io/arrikto/jupyter-kale:f20978e
أضِف وحدة تخزين بيانات جديدة فارغة بحجم 5 غيغابايت وسمِّها data.

انقر على تشغيل لإنشاء خادم دفتر الملاحظات.

عندما يصبح خادم دفتر الملاحظات متاحًا، انقر على ربط للاتصال به.

تنزيل البيانات ودفتر الملاحظات
سيتم فتح علامة تبويب جديدة تتضمّن الصفحة المقصودة في JupyterLab. أنشئ نافذة طرفية جديدة في JupyterLab.

في نافذة الوحدة الطرفية، شغِّل الأوامر التالية للانتقال إلى المجلد data وتنزيل دفتر الملاحظات والبيانات التي ستستخدمها في بقية الدرس التطبيقي:
cd data/ git clone https://github.com/kubeflow-kale/kale
يحتوي المستودع المستنسخ على سلسلة من الأمثلة المنسّقة مع البيانات والملاحظات المشروحة.
في الشريط الجانبي، انتقِل إلى المجلد data/kale/examples/dog-breed-classification/ وافتح دفتر الملاحظات dog-breed.ipynb.

استكشاف رمز تعلُّم الآلة الخاص بمثال "التعرّف على سلالة الكلاب"
في الوقت الحالي، لا تشغِّل الخلايا التي تنزّل مجموعات البيانات، لأنّك ستستخدم بعض مجموعات البيانات الأصغر حجمًا المضمّنة في المستودع الذي استنسخته للتو. إذا كنت تنفّذ هذا المثال بالسرعة التي تناسبك من المنزل، يمكنك تنزيل مجموعات البيانات.
نفِّذ الخلية imports لاستيراد جميع المكتبات الضرورية. يجب ملاحظة أنّ الرمز البرمجي يتعذّر تنفيذه بسبب عدم توفّر مكتبة:

عادةً، يجب إنشاء صورة Docker جديدة لتتمكّن من تشغيل دفتر الملاحظات هذا كإحدى قنوات Kubeflow، وذلك لتضمين المكتبات المثبَّتة حديثًا. لحسن الحظ، يحرص كلّ من Rok وKale على أن تصل أي مكتبات تثبّتها أثناء التطوير إلى مسار العمل، وذلك بفضل تكنولوجيا أخذ اللقطات في Rok وعملية ربط Kale لهذه اللقطات في خطوات مسار العمل.
نفِّذ الخلية التالية لتثبيت المكتبة الناقصة:

أعِد تشغيل نواة دفتر الملاحظات من خلال النقر على رمز إعادة التشغيل:

أعِد تشغيل الخلية imports مرة أخرى بعد تثبيت المكتبات الصحيحة، وستلاحظ أنّها تعمل بنجاح.
تحويل دفتر ملاحظاتك إلى مسار في Kubeflow Pipelines
فعِّل Kale من خلال النقر على رمز Kubeflow في اللوحة اليمنى من دفتر الملاحظات:

فعِّل Kale من خلال النقر على شريط التمرير في لوحة نشر Kale:

استكشاف التبعيات على مستوى كل خلية في دفتر الملاحظات يمكنك الاطّلاع على كيفية إمكانية أن تكون خلايا دفاتر ملاحظات متعددة جزءًا من خطوة واحدة في سلسلة الإجراءات، كما هو موضّح من خلال أشرطة الألوان على يمين الخلايا، وكيفية اعتماد خطوة في سلسلة الإجراءات على الخطوات السابقة، كما هو موضّح من خلال تصنيفات يعتمد على أعلى الخلايا. على سبيل المثال، تعرض الصورة أدناه خلايا متعددة تشكّل جزءًا من خطوة المسار نفسها. وهي تتشارك اللون الأحمر نفسه وتعتمد على خطوة سابقة في سلسلة الإجراءات.

انقر على الزر تجميع وتشغيل:

الآن، يتولّى Kale إنشاء دفتر الملاحظات من خلال تحويله إلى مسار Kubeflow Pipelines. بالإضافة إلى ذلك، بما أنّ Kale يتكامل مع Rok لأخذ لقطات من حجم بيانات دفتر الملاحظات الحالي، يمكنك متابعة تقدّم اللقطة. يتولّى Rok مهمة تحديد إصدار البيانات وإعادة إنتاج البيئة بأكملها كما كانت عند النقر على الزر تجميع وتشغيل. بهذه الطريقة، يمكنك الرجوع إلى إصدارات سابقة من بياناتك ورموزك البرمجية، وسيتم تشغيل خط الأنابيب في البيئة نفسها التي طوّرت فيها الرمز البرمجي، بدون الحاجة إلى إنشاء صور Docker جديدة.

تم تجميع مسار العرض وتحميله إلى Kubeflow Pipelines. الآن، انقر على الرابط للانتقال إلى واجهة مستخدم Kubeflow Pipelines وعرض عملية التشغيل.

يتم فتح واجهة مستخدم Kubeflow Pipelines في علامة تبويب جديدة. انتظِر حتى ينتهي التشغيل.


تهانينا! لقد نفّذت للتو مسارًا متكاملاً في Kubeflow Pipelines، بدءًا من دفتر الملاحظات.
5- التعلّم القائم على نقل المهام مع ضبط المعلَمة الفائقة
فحص النتائج
ألقِ نظرة على سجلّات الخطوة cnn-from-scratch. (انقر على الخطوة في الرسم البياني على واجهة مستخدم Kubeflow Pipelines، ثم انقر على علامة التبويب السجلّات). هذه هي الخطوة التي درّبت فيها شبكة عصبونية التفافية (CNN) من البداية. لاحظ أنّ النموذج المُدرَّب يتميّز بدقة منخفضة جدًا، بالإضافة إلى أنّ هذه الخطوة استغرقت وقتًا طويلاً لإكمالها.

ألقِ نظرة على سجلّات خطوة cnn-vgg16. في هذه الخطوة، استخدمت التعلّم القائم على نقل المهام على نموذج VGG-16 المدرَّب مسبقًا، وهو شبكة عصبونية درّبتها مجموعة Visual Geometry Group (VGG). الدقة أعلى بكثير من النموذج السابق، ولكن لا يزال بإمكاننا تقديم أداء أفضل.

الآن، ألقِ نظرة على سجلّات خطوة cnn-resnet50. في هذه الخطوة، استخدمت التعلّم القائم على نقل المهام على نموذج ResNet-50 المدرَّب مسبقًا. الدقة أعلى بكثير. لذلك، هذا هو النموذج الذي ستستخدمه في بقية هذا الدرس التطبيقي.

ضبط المعلَمة الفائقة
ارجع إلى خادم دفتر الملاحظات في واجهة مستخدم Kubeflow، وافتح دفتر الملاحظات المسمّى dog-breed-katib.ipynb (في المسار data/kale/examples/dog-breed-classification/). في دفتر الملاحظات هذا، ستجري بعض تجارب ضبط المعلمات الفائقة على نموذج ResNet-50 باستخدام Katib. لاحظ أنّ لديك خلية واحدة في بداية دفتر الملاحظات لتحديد المَعلمات:

في اللوحة اليمنى من دفتر الملاحظات، فعِّل ضبط المعلَمة الفائقة باستخدام Katib لتنفيذ عملية ضبط المعلَمة الفائقة:

بعد ذلك، انقر على إعداد مهمة Katib لضبط إعدادات Katib:

حدِّد مساحة البحث لكل مَعلمة، وحدِّد هدفًا:

انقر على الزر تجميع وتشغيل مهمة Katib:

يمكنك متابعة مستوى تقدّم تجربة Katib باتّباع الخطوات التالية:

انقر على عرض للاطّلاع على تجربة Katib:

انقر على تم للاطّلاع على عمليات التشغيل في Kubeflow Pipelines (KFP):

في صفحة تجربة Katib، ستظهر لك التجارب الجديدة:

وفي واجهة مستخدم KFP، ستظهر عمليات التشغيل الجديدة:

لنستعرض ما حدث للتو. في السابق، كانت أداة Kale تنفّذ عملية تشغيل واحدة لسلسلة من العمليات من دفتر ملاحظات، أمّا الآن، فهي تنفّذ عمليات تشغيل متعددة لسلسلة من العمليات، ويتم تزويد كل عملية تشغيل بمجموعة مختلفة من الوسيطات.
Katib هي أحد مكونات Kubeflow لتنفيذ مهام ضبط المعلمات الفائقة للأغراض العامة. لا يعرف Katib أي شيء عن المهام التي يتم تنفيذها فعليًا (تُعرف باسم التجارب في مصطلحات Katib). كل ما يهمّ Kale هو مساحة البحث وخوارزمية التحسين والهدف. يتيح Katib تشغيل مهام بسيطة (أي وحدات Pod) كتجارب، ولكن تنفّذ Kale برنامجًا وسيطًا لتشغيل خطوط الأنابيب في Kubeflow Pipelines، ثم تجمع المقاييس من عمليات تشغيل خطوط الأنابيب.
بما أنّ تجربة Katib تنتج تجارب، ستظهر لك المزيد من التجارب في واجهة مستخدم Katib:

والمزيد من عمليات التشغيل في واجهة مستخدم KFP:

عند اكتمال تجربة Katib، يمكنك الاطّلاع على جميع المحاولات في واجهة مستخدم Katib:

وجميع عمليات التشغيل في واجهة مستخدم KFP:

إذا عدت إلى "المفكرة"، سيظهر لك زر معلومات بجانب تجربة Katib مباشرةً داخل لوحة Kale:

انقر على هذا الرمز وستظهر لك أفضل نتيجة والمَعلمات التي أدّت إلى ظهورها:

6. تَنظيم
محو الجهاز الافتراضي MiniKF
انتقِل إلى Deployment Manager في وحدة تحكّم Google Cloud Platform واحذف عملية النشر minikf-on-gcp.
7. تهانينا
تهانينا، لقد نفّذت بنجاح سير عمل شاملًا لعلم البيانات باستخدام Kubeflow (MiniKF) وKale وRok.
ما هي الخطوات التالية؟
الانضمام إلى منتدى Kubeflow:
- github.com/kubeflow
- قناة Kubeflow على Slack
- kubeflow-discuss@googlegroups.com
- المكالمة الأسبوعية مع المنتدى وSlack وتفاصيل أخرى حول المنتدى
