من Notebook وKubeflow Pipelines باستخدام MiniKF وKale

1. مقدمة

Kubeflow هي مجموعة أدوات لتعلُّم الآلة مخصّصة لمنصة Kubernetes. يهدف المشروع إلى تسهيل عمليات نشر مهام تعلُّم الآلة على Kubernetes، وجعلها قابلة للنقل والتوسيع. الهدف هو توفير طريقة مباشرة لنشر أفضل أنظمة مفتوحة المصدر لتعلُّم الآلة على بنى أساسية متنوعة.

كيف يبدو نشر Kubeflow؟

عملية نشر Kubeflow هي:

  • إمكانية النقل: يمكن استخدامها على أي مجموعة Kubernetes، سواء كانت مستضافة على Google Cloud Platform (GCP) أو في مقر الشركة أو على مستوى عدة موفّرين.
  • قابل للتوسيع: يمكنه الاستفادة من الموارد المتقلبة ولا يقتصر على عدد الموارد المخصّصة لمجموعة Kubernetes.
  • قابلة للإنشاء - محسّنة باستخدام عاملي الخدمة للعمل بلا إنترنت أو على شبكات منخفضة الجودة

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

سيرشدك هذا الدرس التطبيقي حول الترميز إلى كيفية إنشاء عملية نشر Kubeflow باستخدام MiniKF، وتشغيل سير عمل Kubeflow Pipelines من داخل دفتر ملاحظات Jupyter.

ما ستنشئه

في هذا الدرس التطبيقي، ستنشئ مسارًا معقّدًا لعلوم البيانات باستخدام 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 من داخل دفتر ملاحظات بنقرة زر
  • كيفية إنشاء إصدارات تلقائية من بياناتك في دفتر ملاحظات وفي كل خطوة من خطوات مسار البيانات

المتطلبات

هذا الدرس التطبيقي حول الترميز المتقدّم يركّز على Kubeflow. لمزيد من المعلومات الأساسية ومقدمة عن المنصة، يُرجى الاطّلاع على مستندات مقدمة عن Kubeflow. يتم تجاهل المفاهيم ومجموعات الرموز غير ذات الصلة وتقديمها لك لنسخها ولصقها ببساطة.

2. إعداد البيئة

ضبط رقم تعريف مشروع Google Cloud Platform واسم المجموعة

للعثور على رقم تعريف مشروعك، انتقِل إلى لوحة "الصفحة الرئيسية" في وحدة تحكّم Google Cloud Platform، والتي يمكنك العثور عليها في قائمة الخطوط الثلاثة في أعلى يمين الصفحة. إذا كانت الشاشة فارغة، انقر على "نعم" في الطلب لإنشاء لوحة بيانات.

افتح "وحدة تحكّم Google Cloud Platform"

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3- تثبيت MiniKF

إنشاء آلة افتراضية في Compute Engine

في GCP Marketplace، ابحث عن "MiniKF".

اختَر الجهاز الافتراضي MiniKF من Arrikto.

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

تسجيل الدخول إلى MiniKF

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

774e83c3e96cf7b3.png

تسجيل الدخول إلى Kubeflow

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

تسجيل الدخول إلى Rok

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

a683198ac4ba900d.png

80aad6ba5d298a7e.png

تهانينا! لقد تم نشر MiniKF على Google Cloud Platform بنجاح. يمكنك الآن إنشاء دفاتر وكتابة رمز تعلُّم الآلة وتشغيل Kubeflow Pipelines. استخدِم Rok لتحديد إصدارات البيانات وضمان إمكانية تكرار النتائج.

4. تشغيل مسار من داخل دفتر الملاحظات

خلال هذا القسم، ستنفّذ مثال "تايتانيك"، وهو مسابقة على Kaggle تتوقّع الركاب الذين نجوا من غرق السفينة.

إنشاء خادم دفتر ملاحظات

انتقِل إلى الرابط خوادم دفاتر الملاحظات في لوحة التحكّم المركزية في Kubeflow.

4115cac8d8474d73.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

تأكَّد من اختيار هذه الصورة:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

أضِف وحدة تخزين بيانات جديدة فارغة بحجم 5 غيغابايت وسمِّها data.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

2f06041475f45d3.png

تنزيل البيانات ودفتر الملاحظات

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

2482011174f7bc75.png

في نافذة "الوحدة الطرفية"، شغِّل الأوامر التالية للانتقال إلى مجلد البيانات وتنزيل دفتر الملاحظات والبيانات التي ستستخدمها في بقية الدرس التطبيقي.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

يحتوي هذا المستودع على سلسلة من الأمثلة المنسّقة مع البيانات ودفاتر الملاحظات المشروحة. انتقِل إلى المجلد data/examples/titanic-ml-dataset/ في الشريط الجانبي وافتح دفتر الملاحظات titanic_dataset_ml.ipynb.

c85baf68b36c63b2.png

استكشاف رمز تعلُّم الآلة الخاص بتحدّي Titanic

تشغيل دفتر الملاحظات خطوة بخطوة يُرجى العِلم أنّ الرمز البرمجي يتعذّر تنفيذه بسبب عدم توفّر مكتبة.

bf2451fd7407e334.png

ارجع إلى "الوحدة الطرفية" وثبِّت المكتبة الناقصة.

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

أعِد تشغيل الخلية بعد تثبيت المكتبات الصحيحة وستنجح العملية.

تحويل دفتر ملاحظاتك إلى Kubeflow Pipeline

فعِّل Kale من خلال النقر على رمز Kubeflow في اللوحة اليمنى.

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

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

bde5cef34f00e258.png

يمكنك متابعة مستوى تقدّم اللقطة.

9408f46abb2493f5.png

تابِع مستوى تقدّم عملية تنفيذ البنية الأساسية.

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

انتظِر إلى أن تكتمل العملية.

44bee7dc0d24ec21.png

d377b6d574a4970.png

تهانينا! لقد نفّذت للتوّ عملية Kubeflow Pipeline شاملة بدءًا من دفتر الملاحظات.

5- إمكانية إعادة الإنتاج باستخدام "لقطات المجلد"

فحص النتائج

ألقِ نظرة على السجلات الخاصة بخطوة المسار قبل الأخيرة النتائج. لاحظ أنّ جميع المؤشرات التنبؤية تعرض نتيجة %100. سيرصد عالم البيانات المتمرّس هذا النشاط المريب على الفور. وهذا مؤشر جيد على أنّ نماذجنا لا تعمّم النتائج، بل إنّها تفرط في التخصيص على مجموعة بيانات التدريب. من المحتمل أن يكون السبب هو مشكلة في البيانات التي تستخدمها النماذج.

2a594032c2dd6ff6.png

إعادة إنتاج الحالة السابقة

لحسن الحظ، يتولّى Rok عملية تحديد إصدار البيانات وإعادة إنتاج البيئة بأكملها كما كانت عند النقر على الزر تجميع وتشغيل. بهذه الطريقة، يمكنك الرجوع إلى أي إصدار سابق من بياناتك ورمزك البرمجي. لذا، لنستأنف حالة خط الأنابيب قبل تدريب أحد النماذج ونرى ما يحدث. ألقِ نظرة على خطوة randomforest، ثم انقر على النتائج.

4f25ca4560711b23.png

اتّبِع الخطوات الواردة في Markdown، أي اعرض اللقطة في واجهة مستخدم Rok من خلال النقر على الرابط المناسب.

e533bc781da9355a.png

انسخ عنوان URL الخاص بـ Rok.

d155d19731b5cedd.png

انتقِل إلى الرابط خوادم دفاتر الملاحظات.

aafeab01f3ef0863.png

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

f2265a64e8f9d094.png

الصِق عنوان URL الخاص بـ Rok الذي نسخته سابقًا وانقر على الزر الملء تلقائيًا.

9ba4d4128a3bdeea.png

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

7685c3bf35fc74b2.png

تأكَّد من اختيار هذه الصورة:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

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

28c024bcc55cc70a.png

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

34955a64ae316de1.png

يُرجى العِلم أنّ دفتر الملاحظات يفتح في الخلية المحدّدة لخطوة مسار البيانات التي أنشأتها.

a1f7c81f349e0364.png

في الخلفية، استأنف Kale حالة دفتر الملاحظات من خلال استيراد جميع المكتبات وتحميل المتغيّرات من الخطوات السابقة.

تصحيح أخطاء الحالة السابقة

أضِف أمر طباعة إلى هذه الخلية:

print(acc_random_forest)

نفِّذ الخلية النشطة من خلال الضغط على Shift + Return لإعادة تدريب الغابة العشوائية وطباعة النتيجة. وهي 100.

e2a8a3b5465fcb5d.png

حان الوقت الآن لمعرفة ما إذا كانت هناك أي بيانات غريبة في بيانات التدريب. لاستكشاف هذه المشكلة وحلّها، أضِف خلية فوق ترميز Random Forest عن طريق اختيار الخلية السابقة والنقر على رمز الإضافة (+).

d1077f32dff9620f.png

أضِف النص التالي وشغِّل الخلية لطباعة مجموعة التدريب.

train_df

2854798ff01aed4e.png

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

إضافة إصلاح خطأ

لإزالة هذا العمود، عدِّل الخلية لإضافة الأمر التالي:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

فعِّل Kale وتأكَّد من أنّ الخلية التي تزيل تصنيفات Survived هي جزء من خطوة featureengineering في مسار البيانات (يجب أن يكون لها لون المخطط التفصيلي نفسه).

نفِّذ مسار العرض مرة أخرى من خلال النقر على الزر تجميع وتشغيل.

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

انتظِر إلى أن تكتمل خطوة النتائج واطّلِع على السجلّات لمعرفة النتائج النهائية. أصبحت لديك الآن نتائج توقّعات واقعية.

8c6a9676b49e5be8.png

6. تَنظيم

محو الجهاز الافتراضي MiniKF

انتقِل إلى Deployment Manager في وحدة تحكّم Google Cloud Platform واحذف عملية النشر minikf-1.

7. تهانينا

تهانينا، لقد نفّذت بنجاح سير عمل شاملًا لعلم البيانات باستخدام Kubeflow (MiniKF) وKale وRok.

ما هي الخطوات التالية؟

الانضمام إلى منتدى Kubeflow:

Further reading