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

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

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

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 المدرَّب مسبقًا، وهو شبكة عصبونية درّبتها "مجموعة الهندسة المرئية" (VGG). الدقة أعلى بكثير من النموذج السابق، ولكن لا يزال بإمكاننا تقديم أداء أفضل.

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

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