1. مقدمة
منصة Kubeflow هي مجموعة أدوات لتعلُّم الآلة تقدّمها مؤسسة Kubernetes. يهدف المشروع إلى جعل عمليات نشر سير عمل تعلُّم الآلة (ML) على نظام Kubernetes بسيطة وقابلة للنقل وقابلة للتطوير. والهدف من ذلك هو توفير طريقة مباشرة لنشر أنظمة مفتوحة المصدر هي الأفضل من نوعها لتعلُّم الآلة في بُنى أساسية متنوعة. | |
يمكن أن يتضمن سير عمل تعلُّم الآلة العديد من الخطوات التي تعتمد على بعضها البعض، من إعداد البيانات وتحليلها إلى التدريب والتقييم والنشر وغير ذلك. من الصعب إنشاء هذه العمليات وتتبُّعها بطريقة مخصّصة، على سبيل المثال، في مجموعة من دفاتر الملاحظات أو النصوص البرمجية، وأصبحت بعض الأمور مثل التدقيق وإعادة التكرار إشكاليًا بشكل متزايد.ويساعد Kubeflow Pipelines (KFP) في حلّ هذه المشاكل من خلال توفير طريقة لنشر مسارات تعلُّم الآلة القوية والمتكررة إلى جانب المراقبة والتدقيق وتتبُّع الإصدارات وإعادة الإنتاج. تسهِّل منصة Cloud AI Pipelines عملية إعداد تثبيت KFP. |
ما الذي ستنشئه
في هذا الدرس التطبيقي، ستنشئ تطبيق ويب يلخِّص مشاكل GitHub باستخدام Kubeflow Pipelines لتدريب نموذج وعرضه. وهي تستند إلى مثال في مستودع أمثلة Kobeflow. عند الانتهاء، ستحتوي البنية الأساسية على:
- مجموعة Google Kubernetes Engine (GKE) مع تثبيت نظام Kubeflow Pipelines (عبر Cloud AI Pipelines)
- مسار تدريب نموذج Tensor2Tensor على وحدات معالجة الرسومات
- يشير هذا المصطلح إلى حاوية عرض تقدّم توقّعات من النموذج المدرَّب.
- واجهة مستخدم تفسِّر التوقّعات لتقديم ملخّصات لمشاكل GitHub
- دفتر ملاحظات ينشئ مسارًا من البداية باستخدام حزمة تطوير البرامج (SDK) الخاصة بـKubeflow Pipelines (KFP)
المعلومات التي ستطّلع عليها
تدرِّب العملية التي ستنشئها نموذج Tensor2Tensor على بيانات مشاكل GitHub، ما يتيح لك توقُّع عناوين المشاكل من الجهات المعنيّة. وبعد ذلك، تُصدِّر النموذج المُدرَّب وتنشر النموذج الذي تمّ تصديره باستخدام عرض Tensorflow. تطلق الخطوة الأخيرة في مسار العملية تطبيق ويب يتفاعل مع مثيل عرض TF للحصول على تنبؤات النماذج.
- طريقة تثبيت Kubeflow Pipelines على مجموعة GKE
- طريقة إنشاء وتنفيذ مهام سير عمل تعلُّم الآلة باستخدام Kubeflow Pipelines
- كيفية تحديد المسارات وتشغيلها من دفتر ملاحظات AI Platform
المتطلبات
- سيكون فهم أساسيات Kubernetes مفيدًا، ولكنّه غير ضروري
- مشروع Google Cloud Platform نشط لديك أذونات المالك له
- (اختياري) حساب GitHub
- الوصول إلى Google Cloud Shell، المتاح في وحدة تحكُّم Google Cloud Platform (GCP)
2. ضبط إعدادات الجهاز
Cloud Shell
انتقِل إلى وحدة تحكُّم Google Cloud Platform (GCP) في المتصفِّح وسجِّل الدخول باستخدام بيانات اعتماد المشروع:
انقر على "اختيار مشروع". إذا لزم الأمر، لكي تعمل على مشروع درسك التطبيقي حول الترميز.
ثم انقر على زر "تفعيل Cloud Shell" في أعلى يسار وحدة التحكّم لبدء تشغيل Cloud Shell.
عند بدء تشغيل Cloud Shell، ستخبرك باسم المشروع الذي تم ضبطه لاستخدامه. تأكَّد من صحة هذا الإعداد.
للعثور على رقم تعريف مشروعك، انتقِل إلى لوحة الصفحة الرئيسية لوحدة تحكُّم Google Cloud Platform. إذا كانت الشاشة فارغة، انقر على "نعم" في المطالبة لإنشاء لوحة معلومات.
بعد ذلك، في الوحدة الطرفية 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، عليك إعداد رمز دخول بدون أذونات. وهذا ببساطة لتفويضك كفرد بدلاً من كمستخدم مجهول.
- انتقِل إلى https://github.com/settings/tokens وأنشِئ رمزًا مميّزًا جديدًا بدون نطاقات.
- عليك حفظه في مكان آمن. في حال فقدانه، يجب حذفه وإنشاء حساب جديد.
إذا تخطيت هذه الخطوة، فسيستمر التمرين المعملي في العمل، وستكون الخيارات المتاحة أمامك محدودة للغاية لإنشاء بيانات مدخل لاختبار نموذجك.
اختياري: تثبيت لوحات البيانات المفيدة
في وحدة تحكُّم Google Cloud Platform، يمكنك تثبيت لوحتَي البيانات Kubernetes Engine ومساحة التخزين للوصول إلى البيانات بشكل أسهل.
إنشاء تثبيت في AI Platform Pipelines (Hosted Kubeflow Pipelines)
اتبع التعليمات الواردة في قسم "قبل البدء" و"إعداد المثيل" هنا لإعداد مثيل GKE مع تثبيت KFP. تأكَّد من وضع علامة في المربّع السماح بالوصول إلى واجهات Cloud APIs التالية كما هو موضّح في المستندات. (وإذا لم تفعل ذلك، لن يعمل نموذج المسار بنجاح). اترك مساحة اسم التثبيت على default
.
يجب اختيار منطقة تتوافق مع أجهزة Nvidia k80s. يمكنك استخدام us-central1-a أو us-central1-c كإعدادات تلقائية.
يُرجى مراعاة اسم مجموعة GKE ومنطقته عند التثبيت في لوحة بيانات AI Pipelines بعد اكتمال عملية التثبيت، وضبط متغيّرات البيئة على هذه القيم للتيسير عليك.
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 (خطوط الأنابيب) في شريط القائمة الأيمن. إذا ظهر لك خطأ في التحميل، أعِد تحميل علامة التبويب. من المفترض أن تظهر لك صفحة جديدة على النحو التالي:
وصف الأنابيب
سيتضمّن مسار العملية الذي ستنفّذه عدّة خطوات (لمعرفة التفاصيل، يُرجى الاطّلاع على ملحق هذا الدرس التطبيقي):
- يتم نسخ نقطة مرجعية لنموذج حالي إلى حزمتك.
- يتم تدريب نموذج Tensor2Tensor باستخدام بيانات تمّت معالجتها مسبقًا.
- يبدأ التدريب من نقطة تفتيش النموذج الحالي التي تم نسخها في الخطوة الأولى، ثم يتدرّب على بضع مئات من الخطوات الإضافية. (سيستغرق تدريبه بالكامل أثناء الدرس التطبيقي حول الترميز وقتًا طويلاً).
- عند انتهاء التدريب، تصدِّر خطوة العملية النموذج في شكل مناسب للعرض من خلال عرض TensorFlow.
- ويتم نشر مثيل عرض TensorFlow باستخدام هذا النموذج.
- تم إطلاق تطبيق ويب للتفاعل مع النموذج المعروض لاسترداد التوقّعات.
تنزيل المسار وتجميعه
في هذا القسم، سنرى كيفية تجميع تعريف لمسار. أول شيء علينا القيام به هو تثبيت حزمة تطوير البرامج (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، لذا سنتخذ اختصارًا).
أدخِل اسمًا لمسار التعلّم (على سبيل المثال gh_summ
).
تنفيذ الخطوات
انقر على المسار الذي تم تحميله في القائمة، وسيتيح لك عرض الرسم البياني الثابت لمسار العملية، ثم انقر على إنشاء تجربة لإنشاء تجربة جديدة باستخدام المسار. التجربة هي وسيلة لتجميع عمليات التشغيل ذات الصلة دلاليًا.
أدخِل اسمًا للتجربة (على سبيل المثال، الاسم نفسه لمسار التعلّم، gh_summ
)، ثمّ انقر على التالي لإنشاء التجربة.
سيؤدي هذا إلى ظهور صفحة يمكنك فيها إدخال معلمات للتشغيل وبدء تشغيله.
قد تحتاج إلى تنفيذ الأوامر التالية في Cloud Shell للمساعدة في ملء المَعلمات.
gcloud config get-value project echo "gs://${BUCKET_NAME}/codelab"
سيتم ملء اسم التشغيل تلقائيًا، ولكن يمكنك تسميته باسم مختلف إذا كنت ترغب في ذلك.
ثم املأ ثلاثة حقول للمعلمات:
project
- (اختياري)
github-token
working-dir
بالنسبة إلى Work-dir، أدخِل مسارًا ضمن حزمة GCS التي أنشأتها. تضمين "gs://
" . بالنسبة إلى الحقل github-token
، أدخِل إما الرمز المميّز الذي أنشأته اختياريًا في وقت سابق، أو اترُك سلسلة العنصر النائب كما هي إذا لم تنشئ رمزًا مميّزًا.
بعد ملء الحقول، انقر على Start (بدء)، ثم انقر على عملية التشغيل المُدرَجة لعرض تفاصيلها. أثناء تنفيذ خطوة مسار التعلّم، يمكنك النقر عليها للحصول على مزيد من المعلومات عنها، بما في ذلك عرض سجلّات pod الخاصة بها. (يمكنك أيضًا عرض السجلّات لخطوة المسار عبر الرابط إلى سجلّات Cloud Logging (Stackdriver)، حتى في حال إزالة عقدة المجموعة.
عرض تعريف مسار التعلّم
أثناء عملية الإعداد، قد يكون من المفيد إلقاء نظرة عن كثب على طريقة إعدادها والإجراءات التي تتخذها. يمكنك الاطّلاع على مزيد من التفاصيل في قسم الملحق في الدرس التطبيقي حول الترميز.
عرض معلومات تدريب النموذج في TensorBoard
بعد اكتمال خطوة التدريب، اختَر علامة التبويب التمثيلات المرئية وانقر على زر بدء لوحة TensorBoard الأزرق، وبعد ذلك انقر على فتح Tensorboard عندما تصبح جاهزة.
استكشاف لوحة بيانات العناصر وعمليات التنفيذ
تسجّل Kubeflow Pipelines تلقائيًا البيانات الوصفية حول خطوات المسار أثناء تنفيذ أحد المسارات. يتم تسجيل معلومات كل من Artifact وArtifact. انقر على هذه الإدخالات في شريط التنقل الأيمن بلوحة البيانات لاستكشاف المزيد.
بالنسبة إلى العناصر، يمكنك عرض كل من لوحة "نظرة عامة" ولوحة Lineage Explorer.
عرض تطبيق الويب الذي تم إنشاؤه من خلال مسار التعلُّم وعمل بعض التوقّعات
تعمل الخطوة الأخيرة في مسار العملية على نشر تطبيق ويب يوفّر واجهة مستخدم لطلب البحث عن النموذج المُدرَّب، والذي يتم عرضه من خلال عرض TF، وذلك لعمل توقعات.
بعد اكتمال العملية، يمكنك الاتصال بتطبيق الويب من خلال إعادة توجيه المنفذ إلى الخدمة الخاصة به (نحن نعيد توجيه المنفذ لأنّه لم يتم إعداد خدمة تطبيق الويب للحصول على نقطة نهاية خارجية في هذا الدرس التطبيقي حول الترميز).
ابحث عن اسم الخدمة من خلال تنفيذ هذا الأمر في Cloud Shell:
kubectl get services
ابحث عن اسم خدمة مثل "ghsumm-*-webappsvc
" في القائمة.
بعد ذلك، في Cloud Shell، أعِد توجيه المنفذ إلى هذه الخدمة على النحو التالي، مع تغيير الأمر التالي لاستخدام اسم webappsvc:
kubectl port-forward svc/ghsumm-xxxxx-webappsvc 8080:80
بعد تشغيل إعادة توجيه المنفذ، انقر على "معاينة" أعلى لوحة Cloud Shell، وانقر على "معاينة في المنفذ 8080" في القائمة المنسدلة.
يُفترض أن تظهر لك صفحة مثل هذه في علامة تبويب جديدة:
انقر على الزر تعبئة مشكلة عشوائية لاسترداد جزء من النص. انقر على إنشاء عنوان لطلب الاتصال بالنموذج المدرَّب وعرض إحدى عبارات البحث المقترحة.
إذا كانت معلَمات مسار التنفيذ تتضمّن رمزًا مميّزًا صالحًا لـ 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.
تحميل ورقة ملاحظات الدرس التطبيقي حول الترميز
بعد إنشاء نسخة افتراضية من ورقة الملاحظات، انقر على هذا الرابط لتحميل دفتر جوبيتر الخاص بالدرس التطبيقي حول الترميز. حدد مثيل دفتر الملاحظات المطلوب استخدامه. سيتم فتح ورقة الملاحظات تلقائيًا.
تنفيذ ورقة الملاحظات
اتبع التعليمات الواردة في دفتر الملاحظات لبقية التمرين. لاحظ أنه في قسم "الإعداد" من الدفتر، فستحتاج إلى ملء قيمك الخاصة قبل تشغيل باقي دفتر الملاحظات.
(إذا كنت تستخدم مشروعك الخاص، فلا تنس الرجوع وإجراء قسم "التنظيف" في هذا التمرين المعملي).
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)
بعد ذلك، قم بإعادة تجميع المسار، وتحميل الإصدار الجديد (وامنحه اسمًا جديدًا)، ثم قم بتشغيل الإصدار الجديد من المسار.