مسارات Kubeflow - تلخيص مشاكل GitHub

1. مقدمة

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

يمكن أن يتضمن سير عمل تعلُّم الآلة العديد من الخطوات التي تعتمد على بعضها البعض، من إعداد البيانات وتحليلها إلى التدريب والتقييم والنشر وغير ذلك. من الصعب إنشاء هذه العمليات وتتبُّعها بطريقة مخصّصة، على سبيل المثال، في مجموعة من دفاتر الملاحظات أو النصوص البرمجية، وأصبحت بعض الأمور مثل التدقيق وإعادة التكرار إشكاليًا بشكل متزايد.ويساعد Kubeflow Pipelines (KFP) في حلّ هذه المشاكل من خلال توفير طريقة لنشر مسارات تعلُّم الآلة القوية والمتكررة إلى جانب المراقبة والتدقيق وتتبُّع الإصدارات وإعادة الإنتاج. تسهِّل منصة Cloud AI Pipelines عملية إعداد تثبيت KFP.

ما الذي ستنشئه

في هذا الدرس التطبيقي، ستنشئ تطبيق ويب يلخِّص مشاكل GitHub باستخدام Kubeflow Pipelines لتدريب نموذج وعرضه. وهي تستند إلى مثال في مستودع أمثلة Kobeflow. عند الانتهاء، ستحتوي البنية الأساسية على:

المعلومات التي ستطّلع عليها

تدرِّب العملية التي ستنشئها نموذج Tensor2Tensor على بيانات مشاكل GitHub، ما يتيح لك توقُّع عناوين المشاكل من الجهات المعنيّة. وبعد ذلك، تُصدِّر النموذج المُدرَّب وتنشر النموذج الذي تمّ تصديره باستخدام عرض Tensorflow. تطلق الخطوة الأخيرة في مسار العملية تطبيق ويب يتفاعل مع مثيل عرض TF للحصول على تنبؤات النماذج.

  • طريقة تثبيت Kubeflow Pipelines على مجموعة GKE
  • طريقة إنشاء وتنفيذ مهام سير عمل تعلُّم الآلة باستخدام Kubeflow Pipelines
  • كيفية تحديد المسارات وتشغيلها من دفتر ملاحظات AI Platform

المتطلبات

2. ضبط إعدادات الجهاز

Cloud Shell

انتقِل إلى وحدة تحكُّم Google Cloud Platform (GCP) في المتصفِّح وسجِّل الدخول باستخدام بيانات اعتماد المشروع:

انقر على "اختيار مشروع". إذا لزم الأمر، لكي تعمل على مشروع درسك التطبيقي حول الترميز.

4f23e1fe87a47cb2.png

ثم انقر على زر "تفعيل Cloud Shell" في أعلى يسار وحدة التحكّم لبدء تشغيل Cloud Shell.

ecf212797974dd31.png

عند بدء تشغيل Cloud Shell، ستخبرك باسم المشروع الذي تم ضبطه لاستخدامه. تأكَّد من صحة هذا الإعداد.

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

115cdf745978ad.png

بعد ذلك، في الوحدة الطرفية Cloud Shell، شغِّل هذه الأوامر إذا لزم الأمر لضبط gcloud على استخدام المشروع الصحيح:

export PROJECT_ID=<your_project_id>
gcloud config set project ${PROJECT_ID}

إنشاء حزمة تخزين

أنشِئ حزمة Cloud Storage لتخزين ملفات مسار التعلّم. يجب استخدام معرّف فريد عالمي، ليكون من السهل تحديد اسم حزمة يتضمّن رقم تعريف مشروعك. أنشِئ الحزمة باستخدام الأمر gsutil mb (make bucket):

export PROJECT_ID=<your_project_id>
export BUCKET_NAME=kubeflow-${PROJECT_ID}
gsutil mb gs://${BUCKET_NAME}

يمكنك بدلاً من ذلك إنشاء حزمة عبر وحدة تحكُّم Google Cloud Platform.

اختياري**: إنشاء رمز GitHub المميّز**

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

  1. انتقِل إلى https://github.com/settings/tokens وأنشِئ رمزًا مميّزًا جديدًا بدون نطاقات.
  2. عليك حفظه في مكان آمن. في حال فقدانه، يجب حذفه وإنشاء حساب جديد.

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

اختياري: تثبيت لوحات البيانات المفيدة

في وحدة تحكُّم Google Cloud Platform، يمكنك تثبيت لوحتَي البيانات Kubernetes Engine ومساحة التخزين للوصول إلى البيانات بشكل أسهل.

2a50622902d75f6a.png

إنشاء تثبيت في AI Platform Pipelines (Hosted Kubeflow Pipelines)

اتبع التعليمات الواردة في قسم "قبل البدء" و"إعداد المثيل" هنا لإعداد مثيل GKE مع تثبيت KFP. تأكَّد من وضع علامة في المربّع السماح بالوصول إلى واجهات Cloud APIs التالية كما هو موضّح في المستندات. (وإذا لم تفعل ذلك، لن يعمل نموذج المسار بنجاح). اترك مساحة اسم التثبيت على default.

يجب اختيار منطقة تتوافق مع أجهزة Nvidia k80s. يمكنك استخدام us-central1-a أو us-central1-c كإعدادات تلقائية.

يُرجى مراعاة اسم مجموعة GKE ومنطقته عند التثبيت في لوحة بيانات AI Pipelines بعد اكتمال عملية التثبيت، وضبط متغيّرات البيئة على هذه القيم للتيسير عليك.

6f0729a4fdee88ac.png

export ZONE=<your zone>
export CLUSTER_NAME=<your cluster name>

إعداد kubectl لاستخدام بيانات اعتماد مجموعة GKE الجديدة

بعد إنشاء مجموعة GKE، يمكنك ضبط kubectl لاستخدام بيانات اعتماد المجموعة الجديدة من خلال تنفيذ الأمر التالي في Cloud Shell:

gcloud container clusters get-credentials ${CLUSTER_NAME} \
  --project ${PROJECT_ID} \
  --zone ${ZONE}

يمكنك بدلاً من ذلك النقر على اسم المجموعة في لوحة بيانات AI Pipelines للانتقال إلى صفحة GKE، ثم النقر على "ربط". في أعلى الصفحة. من النافذة المنبثقة، الصِق الأمر في Cloud Shell.

يؤدي ذلك إلى ضبط سياق kubectl بحيث يمكنك التفاعل مع المجموعة. للتحقّق من الإعدادات، شغِّل الأمر التالي:

kubectl get nodes -o wide

من المفترض أن تظهر العُقد المدرَجة بالحالة "Ready" وغيرها من المعلومات حول عمر العقدة والإصدار وعنوان IP الخارجي وصورة نظام التشغيل وإصدار النواة ووقت تشغيل الحاوية.

إعداد المجموعة لتثبيت برنامج تشغيل Nvidia على مجموعات العُقد التي يتم تفعيل وحدة معالجة الرسومات بها

سنطبّق بعد ذلك مجموعة خفيّة على المجموعة، والتي ستثبِّت برنامج تشغيل Nvidia على أي عُقد مجموعة تستند إلى وحدة معالجة الرسومات:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml

بعد ذلك، شغِّل الأمر التالي الذي يمنح مكونات KFP الإذن لإنشاء موارد Kubernetes جديدة:

kubectl create clusterrolebinding sa-admin --clusterrole=cluster-admin --serviceaccount=kubeflow:pipeline-runner

إنشاء مجموعة عُقد لوحدة معالجة الرسومات

بعد ذلك، سنقوم بإعداد مجموعة عُقد GPU بمقاس 1:

gcloud container node-pools create gpu-pool \
    --cluster=${CLUSTER_NAME} \
    --zone ${ZONE} \
    --num-nodes=1 \
    --machine-type n1-highmem-8 \
    --scopes cloud-platform --verbosity error \
    --accelerator=type=nvidia-tesla-k80,count=1

3- تشغيل مسار من لوحة معلومات "الأنابيب"

فتح لوحة بيانات الأنابيب

في Cloud Console، انتقِل إلى لوحة المسارات إذا لم تكن قد فعلت ذلك بعد. بعد ذلك، انقر على "فتح لوحة بيانات الأنبوب". من أجل عملية التثبيت، وانقر على Pipelines (خطوط الأنابيب) في شريط القائمة الأيمن. إذا ظهر لك خطأ في التحميل، أعِد تحميل علامة التبويب. من المفترض أن تظهر لك صفحة جديدة على النحو التالي:

7bb5a9cf0773c3bc.png

وصف الأنابيب

سيتضمّن مسار العملية الذي ستنفّذه عدّة خطوات (لمعرفة التفاصيل، يُرجى الاطّلاع على ملحق هذا الدرس التطبيقي):

  1. يتم نسخ نقطة مرجعية لنموذج حالي إلى حزمتك.
  2. يتم تدريب نموذج Tensor2Tensor باستخدام بيانات تمّت معالجتها مسبقًا.
  • يبدأ التدريب من نقطة تفتيش النموذج الحالي التي تم نسخها في الخطوة الأولى، ثم يتدرّب على بضع مئات من الخطوات الإضافية. (سيستغرق تدريبه بالكامل أثناء الدرس التطبيقي حول الترميز وقتًا طويلاً).
  • عند انتهاء التدريب، تصدِّر خطوة العملية النموذج في شكل مناسب للعرض من خلال عرض TensorFlow.
  1. ويتم نشر مثيل عرض TensorFlow باستخدام هذا النموذج.
  2. تم إطلاق تطبيق ويب للتفاعل مع النموذج المعروض لاسترداد التوقّعات.

تنزيل المسار وتجميعه

في هذا القسم، سنرى كيفية تجميع تعريف لمسار. أول شيء علينا القيام به هو تثبيت حزمة تطوير البرامج (SDK) الخاصة بـ KFP. شغِّل ما يلي في Cloud Shell:

pip3 install -U kfp

لتنزيل ملف تعريف مسار التعلّم، نفِّذ الأمر التالي من Cloud Shell:

curl -O https://raw.githubusercontent.com/amygdala/kubeflow-examples/ghsumm/github_issue_summarization/pipelines/example_pipelines/gh_summ_hosted_kfp.py

ثم جمّع ملف تعريف مسار التعلّم عن طريق تشغيله على النحو التالي:

python3 gh_summ_hosted_kfp.py

وسيظهر لك الملف gh_summ_hosted_kfp.py.tar.gz كنتيجة لذلك.

تحميل المسار المجمّع

في واجهة مستخدم الويب لتطبيق Kubeflow Pipelines، انقر على مسار التحميل، واختَر استيراد حسب عنوان URL. انسخ عنوان URL التالي والصقه، والذي يشير إلى المسار نفسه الذي جمعته للتو. (هناك بضع خطوات إضافية لتحميل ملف من Cloud Shell، لذا سنتخذ اختصارًا).

https://storage.googleapis.com/aju-dev-demos-codelabs/KF/compiled_pipelines/gh_summ_hosted_kfp.py.tar.gz

أدخِل اسمًا لمسار التعلّم (على سبيل المثال gh_summ).

867fdbe248d13bab.png

تنفيذ الخطوات

انقر على المسار الذي تم تحميله في القائمة، وسيتيح لك عرض الرسم البياني الثابت لمسار العملية، ثم انقر على إنشاء تجربة لإنشاء تجربة جديدة باستخدام المسار. التجربة هي وسيلة لتجميع عمليات التشغيل ذات الصلة دلاليًا.

d4b5b1a043d32d4a.png

أدخِل اسمًا للتجربة (على سبيل المثال، الاسم نفسه لمسار التعلّم، gh_summ)، ثمّ انقر على التالي لإنشاء التجربة.

d9f7d2177efad53.png

سيؤدي هذا إلى ظهور صفحة يمكنك فيها إدخال معلمات للتشغيل وبدء تشغيله.

قد تحتاج إلى تنفيذ الأوامر التالية في Cloud Shell للمساعدة في ملء المَعلمات.

gcloud config get-value project
echo "gs://${BUCKET_NAME}/codelab"

سيتم ملء اسم التشغيل تلقائيًا، ولكن يمكنك تسميته باسم مختلف إذا كنت ترغب في ذلك.

ثم املأ ثلاثة حقول للمعلمات:

  • project
  • (اختياري) github-token
  • working-dir

بالنسبة إلى Work-dir، أدخِل مسارًا ضمن حزمة GCS التي أنشأتها. تضمين "gs://" . بالنسبة إلى الحقل github-token، أدخِل إما الرمز المميّز الذي أنشأته اختياريًا في وقت سابق، أو اترُك سلسلة العنصر النائب كما هي إذا لم تنشئ رمزًا مميّزًا.

8676afba6fd32ac1.png

بعد ملء الحقول، انقر على Start (بدء)، ثم انقر على عملية التشغيل المُدرَجة لعرض تفاصيلها. أثناء تنفيذ خطوة مسار التعلّم، يمكنك النقر عليها للحصول على مزيد من المعلومات عنها، بما في ذلك عرض سجلّات pod الخاصة بها. (يمكنك أيضًا عرض السجلّات لخطوة المسار عبر الرابط إلى سجلّات Cloud Logging (Stackdriver)، حتى في حال إزالة عقدة المجموعة.

db2dc819ac0f5c1.png

عرض تعريف مسار التعلّم

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

عرض معلومات تدريب النموذج في TensorBoard

بعد اكتمال خطوة التدريب، اختَر علامة التبويب التمثيلات المرئية وانقر على زر بدء لوحة TensorBoard الأزرق، وبعد ذلك انقر على فتح Tensorboard عندما تصبح جاهزة.

6cb511540a64b9e5.png

d55eb03c4d04f64d.png

استكشاف لوحة بيانات العناصر وعمليات التنفيذ

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

3002c4055cc8960b.png

بالنسبة إلى العناصر، يمكنك عرض كل من لوحة "نظرة عامة" ولوحة Lineage Explorer.

7885776e899d1183.png

40c4f7e5b6545dec.png

عرض تطبيق الويب الذي تم إنشاؤه من خلال مسار التعلُّم وعمل بعض التوقّعات

تعمل الخطوة الأخيرة في مسار العملية على نشر تطبيق ويب يوفّر واجهة مستخدم لطلب البحث عن النموذج المُدرَّب، والذي يتم عرضه من خلال عرض TF، وذلك لعمل توقعات.

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

ابحث عن اسم الخدمة من خلال تنفيذ هذا الأمر في Cloud Shell:

kubectl get services

ابحث عن اسم خدمة مثل "ghsumm-*-webappsvc" في القائمة.

بعد ذلك، في Cloud Shell، أعِد توجيه المنفذ إلى هذه الخدمة على النحو التالي، مع تغيير الأمر التالي لاستخدام اسم webappsvc:

kubectl port-forward svc/ghsumm-xxxxx-webappsvc 8080:80

بعد تشغيل إعادة توجيه المنفذ، انقر على "معاينة" أعلى لوحة Cloud Shell، وانقر على "معاينة في المنفذ 8080" في القائمة المنسدلة.

65572bb3b12627cc.png

يُفترض أن تظهر لك صفحة مثل هذه في علامة تبويب جديدة:

902ad2d555281508.png

انقر على الزر تعبئة مشكلة عشوائية لاسترداد جزء من النص. انقر على إنشاء عنوان لطلب الاتصال بالنموذج المدرَّب وعرض إحدى عبارات البحث المقترحة.

b7c39ce51ee603bd.png

إذا كانت معلَمات مسار التنفيذ تتضمّن رمزًا مميّزًا صالحًا لـ GitHub، يمكنك محاولة إدخال عنوان URL لـ GitHub في الحقل الثاني، ثم النقر على "إنشاء عنوان". إذا لم تُعِدّ رمزًا مميّزًا صالحًا لـ GitHub، يمكنك استخدام "تعبئة المشكلة العشوائية" فقط .

4. تنفيذ مسار من ورقة ملاحظات AI Platform

يمكنك أيضًا تعريف وتشغيل Kubeflow Pipelines بشكل تفاعلي من دفتر ملاحظات Jupyter باستخدام حزمة KFP SDK. سنستخدم دفاتر الملاحظات في AI Platform في هذا الدرس التطبيقي حول الترميز، وستجعل هذه الأداة أمرًا بسيطًا للغاية.

إنشاء مثيل لورقة ملاحظات

سننشئ مثيل دفتر ملاحظات من Cloud Shell باستخدام واجهة برمجة التطبيقات الخاصة به. (بدلاً من ذلك، يمكنك إنشاء دفتر ملاحظات عبر Cloud Console. اطّلِع على المستندات للحصول على مزيد من المعلومات).

اضبط متغيّرات البيئة التالية في Cloud Shell:

export INSTANCE_NAME="kfp-ghsumm"
export VM_IMAGE_PROJECT="deeplearning-platform-release"
export VM_IMAGE_FAMILY="tf2-2-3-cpu"
export MACHINE_TYPE="n1-standard-4"
export LOCATION="us-central1-c"

بعد ذلك، من Cloud Shell، شغّل الأمر لإنشاء مثيل دفتر الملاحظات:

gcloud beta notebooks instances create $INSTANCE_NAME \
  --vm-image-project=$VM_IMAGE_PROJECT \
  --vm-image-family=$VM_IMAGE_FAMILY \
  --machine-type=$MACHINE_TYPE --location=$LOCATION

عند تشغيل هذا الأمر لأول مرة، قد يُطلَب منك تفعيل واجهة برمجة تطبيقات notebooks لمشروعك. الردّ بـ "y" إذا كان الأمر كذلك.

بعد بضع دقائق، سيكون خادم ورقة الملاحظات جاهزًا للعمل. يمكنك الاطّلاع على مثيلات دفتر الملاحظات المُدرجة في Cloud Console.

206adf3905413dfa.png

تحميل ورقة ملاحظات الدرس التطبيقي حول الترميز

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

تنفيذ ورقة الملاحظات

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

(إذا كنت تستخدم مشروعك الخاص، فلا تنس الرجوع وإجراء قسم "التنظيف" في هذا التمرين المعملي).

5- تَنظيم

لن تحتاج إلى إجراء ذلك إذا كنت تستخدم حسابًا مؤقتًا على درس تطبيقي حول الترميز، ولكنك قد تريد إلغاء تثبيت تطبيق Pipelines ودفتر الملاحظات إذا كنت تستخدم مشروعك الخاص.

إزالة مجموعة "GKE" من Pipelines

يمكنك حذف مجموعة "المسارات" من Cloud Console. (يمكنك حذف تثبيت "المسارات" فقط إذا كنت تريد إعادة استخدام مجموعة GKE).

حذف مثيل أداة AI Notebook

إذا قمت بتشغيل "المفكرة" في الدرس التطبيقي حول الترميز، يمكنك حذف أو إيقاف مثيل ورقة الملاحظات من Cloud Console.

اختياري: إزالة رمز GitHub المميّز

انتقِل إلى https://github.com/settings/tokens وأزِل الرمز المميّز الذي تم إنشاؤه.

6- الملاحق

نظرة على الرمز

تحديد مسار التعلّم

يتم تحديد المسار المستخدَم في هذا الدرس التطبيقي حول الترميز هنا.

دعنا نلقي نظرة على كيفية تعريفها، وكذلك كيفية تعريف مكوناتها (الخطوات). سنتناول بعض النقاط المهمة، ولكن يمكنك الاطّلاع على المستندات لمزيد من التفاصيل.

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

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

import kfp.dsl as dsl
import kfp.gcp as gcp
import kfp.components as comp

...

copydata_op = comp.load_component_from_url(
  'https://raw.githubusercontent.com/kubeflow/examples/master/github_issue_summarization/pipelines/components/t2t/datacopy_component.yaml'
  )

train_op = comp.load_component_from_url(
  'https://raw.githubusercontent.com/kubeflow/examples/master/github_issue_summarization/pipelines/components/t2t/train_component.yaml'
  )

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

name: Train T2T model
description: |
  A Kubeflow Pipeline component to train a Tensor2Tensor
  model
metadata:
  labels:
    add-pod-env: 'true'
inputs:
  - name: train_steps
    description: '...'
    type: Integer
    default: 2019300
  - name: data_dir
    description: '...'
    type: GCSPath
  - name: model_dir
    description: '...'
    type: GCSPath
  - name: action
    description: '...'
    type: String
  - name: deploy_webapp
    description: '...'
    type: String
outputs:
  - name: launch_server
    description: '...'
    type: String
  - name: train_output_path
    description: '...'
    type: GCSPath
  - name: MLPipeline UI metadata
    type: UI metadata
implementation:
  container:
    image: gcr.io/google-samples/ml-pipeline-t2ttrain:v3ap
    args: [
      --data-dir, {inputValue: data_dir},
      --action, {inputValue: action},
      --model-dir, {inputValue: model_dir},
      --train-steps, {inputValue: train_steps},
      --deploy-webapp, {inputValue: deploy_webapp},
      --train-output-path, {outputPath: train_output_path}
    ]
    env:
      KFP_POD_NAME: "{{pod.name}}"
    fileOutputs:
      launch_server: /tmp/output
      MLPipeline UI metadata: /mlpipeline-ui-metadata.json

ويمكنك أيضًا تحديد خطوة في المسار باستخدام الدالة الإنشائية dsl.ContainerOp، كما هو موضّح أدناه.

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

ستلاحظ أنّ الخطوات train وlog_model وserve تؤدي إلى الوصول إلى نتائج من الخطوات السابقة كمدخلات. يمكنك الاطّلاع على المزيد من المعلومات حول كيفية تحديد ذلك هنا.

@dsl.pipeline(
 name='Github issue summarization',
 description='Demonstrate Tensor2Tensor-based training and TF-Serving'
)
def gh_summ(  #pylint: disable=unused-argument
 train_steps: 'Integer' = 2019300,
 project: str = 'YOUR_PROJECT_HERE',
 github_token: str = 'YOUR_GITHUB_TOKEN_HERE',
 working_dir: 'GCSPath' = 'gs://YOUR_GCS_DIR_HERE',
 checkpoint_dir: 'GCSPath' = 'gs://aju-dev-demos-codelabs/kubecon/model_output_tbase.bak2019000/',
 deploy_webapp: str = 'true',
 data_dir: 'GCSPath' = 'gs://aju-dev-demos-codelabs/kubecon/t2t_data_gh_all/'
 ):


 copydata = copydata_op(
   data_dir=data_dir,
   checkpoint_dir=checkpoint_dir,
   model_dir='%s/%s/model_output' % (working_dir, dsl.RUN_ID_PLACEHOLDER),
   action=COPY_ACTION,
   )


 train = train_op(
   data_dir=data_dir,
   model_dir=copydata.outputs['copy_output_path'],
   action=TRAIN_ACTION, train_steps=train_steps,
   deploy_webapp=deploy_webapp
   )

 serve = dsl.ContainerOp(
     name='serve',
     image='gcr.io/google-samples/ml-pipeline-kubeflow-tfserve:v6',
     arguments=["--model_name", 'ghsumm-%s' % (dsl.RUN_ID_PLACEHOLDER,),
         "--model_path", train.outputs['train_output_path']
         ]
     )

 train.set_gpu_limit(1)

لاحظ أننا نحتاج إلى "القطار" للتشغيل على أي عقدة في المجموعة التي تحتوي على وحدة معالجة رسومات واحدة على الأقل.

  train.set_gpu_limit(1)

الخطوة الأخيرة في المسار - المحددة أيضًا مضمنة - تكون مشروطة. سيتم تنفيذه بعد "serve" يتم الانتهاء من هذه الخطوة، فقط إذا كان ناتج خطوة التطبيق launch_server هو السلسلة "true". ستطلق هذه الخدمة "تطبيق الويب الخاص بالتوقّعات" الذي استخدمناه لطلب ملخّصات عن المشاكل من نموذج T2T المدرَّب.

 with dsl.Condition(train.outputs['launch_server'] == 'true'):
   webapp = dsl.ContainerOp(
       name='webapp',
       image='gcr.io/google-samples/ml-pipeline-webapp-launcher:v1',
       arguments=["--model_name", 'ghsumm-%s' % (dsl.RUN_ID_PLACEHOLDER,),
           "--github_token", github_token]

       )
   webapp.after(serve)

تعريفات صور حاوية المكوِّن

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

استخدام الأجهزة الافتراضية الاستباقية مع وحدات معالجة الرسومات في التدريب

الأجهزة الافتراضية الاستباقية هي مثيلات Compute Engine الافتراضية التي تدوم لمدة 24 ساعة كحد أقصى ولا تقدّم أي ضمانات لمدى التوفّر. سعر الأجهزة الافتراضية الاستباقية أقل من سعر الأجهزة الافتراضية في Compute Engine.

باستخدام Google Kubernetes Engine (GKE)، من السهل إعداد مجموعة موزّعة أو مجموعة عُقد تستخدم أجهزة افتراضية استباقية. يمكنك إعداد مجموعة العُقد هذه باستخدام وحدات معالجة الرسومات المرتبطة بالمثيلات الاستباقية. تعمل هذه الوحدات تمامًا مثل العُقد العادية التي تدعم وحدة معالجة الرسومات، غير أنّ وحدات معالجة الرسومات تظلّ صالحة طوال فترة عمل المثيل فقط.

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

gcloud container node-pools create preemptible-gpu-pool \
    --cluster=<your-cluster-name> \
    --zone <your-cluster-zone> \
    --enable-autoscaling --max-nodes=4 --min-nodes=0 \
    --machine-type n1-highmem-8 \
    --preemptible \
    --node-taints=preemptible=true:NoSchedule \
    --scopes cloud-platform --verbosity error \
    --accelerator=type=nvidia-tesla-k80,count=4

يمكنك أيضًا إعداد مجموعة عُقد من خلال Cloud Console.

تحديد مسار Kubeflow يستخدم عُقد GKE الاستباقية

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

عندما تقوم بتحديد مسار Kubeflow، يمكنك الإشارة إلى أن خطوة معينة يجب تشغيلها على عقدة استباقية من خلال تعديل العملية على النحو التالي:

your_pipelines_op.apply(gcp.use_preemptible_nodepool())

يُرجى الاطّلاع على المستندات لمعرفة التفاصيل.

كما يُفترض أنك ستحتاج أيضًا إلى إعادة محاولة تنفيذ الخطوة لعدد من المرات إذا كانت العقدة متوقفة. يمكنك إجراء ذلك على النحو التالي— نحدد هنا 5 محاولات لإعادة المحاولة.

your_pipelines_op.set_gpu_limit(1).apply(gcp.use_preemptible_nodepool()).set_retry(5)

جرِّب تعديل مسار Kubeflow الذي استخدمناه في هذا الدرس التطبيقي حول الترميز من أجل تنفيذ خطوة التدريب على جهاز افتراضي استباقي.

عليك تغيير السطر التالي في مواصفات المسار لاستخدام مجموعة عقدة استباقية (تأكد من إنشاء مجموعة كما هو موضح أعلاه) أعلاه، وإعادة المحاولة 5 مرات:

  train.set_gpu_limit(1)

بعد ذلك، قم بإعادة تجميع المسار، وتحميل الإصدار الجديد (وامنحه اسمًا جديدًا)، ثم قم بتشغيل الإصدار الجديد من المسار.