إجراء تدريب على النموذج المخصّص على Vertex Pipelines

1. نظرة عامة

في هذا التمرين، ستتعلم كيفية تشغيل مهمة تدريب نموذج مخصّص باستخدام حزمة تطوير البرامج (SDK) لـ Kubeflow Pipelines على Vertex Pipelines.

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

وستتعرّف على كيفية:

  • استخدام حزمة تطوير البرامج لمنصة Kubeflow Pipelines لإنشاء مسارات تعلُّم الآلة قابلة للتوسّع
  • يمكنك إنشاء وتجميع مهمة تدريب مخصّصة لنموذج ساي كيت ليرن تستخدم مجموعات بيانات مُدارة من خلال Vertex AI، وسيتم تنفيذها من خلال تدريب Vertex AI ضمن مسار التدريب
  • تشغيل مهمة تنبؤ مجمّعة ضمن Vertex Pipelines
  • استخدام مكوّنات معدّة مسبقًا للتفاعل مع خدمات Vertex AI المتوفّرة من خلال مكتبة google_cloud_pipeline_components

تبلغ التكلفة الإجمالية لتشغيل هذا التمرين على Google Cloud حوالي $5.

2. مقدّمة عن Vertex AI

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

نظرة عامة على منتج Vertex

إذا كان لديك أي ملاحظات، يُرجى الاطّلاع على صفحة الدعم.

لماذا تُعد مسارات تعلُّم الآلة مفيدة؟

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

النص المختصر: تساعدك المسارات في تبسيط وإعادة إنتاج سير عمل تعلُّم الآلة.

3- إعداد بيئة سحابة إلكترونية

ستحتاج إلى مشروع Google Cloud Platform مع تفعيل الفوترة لتشغيل هذا الدرس التطبيقي حول الترميز. لإنشاء مشروع، يُرجى اتّباع التعليمات هنا.

الخطوة 1: بدء Cloud Shell

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

منح الإذن في Cloud Shell

تفعيل Cloud Shell

في أعلى يسار Cloud Console، انقر على الزر أدناه من أجل تفعيل Cloud Shell:

تفعيل Cloud Shell

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

إعداد Cloud Shell

من المفترَض أن تستغرق عملية توفير المتطلبات اللازمة والاتصال بخدمة Cloud Shell بضع دقائق فقط.

إعداد Cloud Shell

يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير التي تحتاجها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح أو جهاز Chromebook.

بعد الربط بخدمة Cloud Shell، من المفترض أن يظهر لك أنّه قد تمت مصادقتك وأنّ المشروع معيّن سبق أن تم ضبطه على رقم تعريف مشروعك.

شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:

gcloud auth list

من المفترض أن يظهر لك شيء مثل هذا في إخراج الأمر:

إخراج Cloud Shell

شغّل الأمر التالي في Cloud Shell للتأكد من معرفة الأمر gcloud بمشروعك:

gcloud config list project

مخرجات الأمر

[core]
project = <PROJECT_ID>

إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:

gcloud config set project <PROJECT_ID>

مخرجات الأمر

Updated property [core/project].

تحتوي Cloud Shell على بعض متغيرات البيئة، بما في ذلك GOOGLE_CLOUD_PROJECT الذي يحتوي على اسم مشروعنا الحالي على Cloud. سنستخدم هذا في أماكن مختلفة خلال هذا التمرين المعملي. يمكنك الاطّلاع عليه عن طريق تنفيذ:

echo $GOOGLE_CLOUD_PROJECT

الخطوة 2: تفعيل واجهات برمجة التطبيقات

في الخطوات اللاحقة، سترى الحاجة إلى هذه الخدمات (وسبب ذلك)، ولكن في الوقت الحالي، عليك تنفيذ هذا الأمر لمنح مشروعك إذن الوصول إلى خدمات Compute Engine وContainer Registry وVertex AI:

gcloud services enable compute.googleapis.com         \
                       containerregistry.googleapis.com  \
                       aiplatform.googleapis.com

يُفترض أن ينتج عن ذلك رسالة ناجحة مشابهة للرسالة التالية:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

الخطوة 3: إنشاء حزمة Cloud Storage

لتنفيذ مهمة تدريب على Vertex AI، سنحتاج إلى حزمة تخزين لتخزين مواد عرض النموذج المحفوظة. يجب أن تكون الحزمة إقليمية. نحن نستخدم us-central هنا، ولكن يمكنك استخدام منطقة أخرى (ما عليك سوى استبدالها في هذا التمرين المعملي). إذا سبق لك إنشاء حزمة، يمكنك تخطّي هذه الخطوة.

شغِّل الأوامر التالية في الوحدة الطرفية في Cloud Shell لإنشاء حزمة:

BUCKET_NAME=gs://$GOOGLE_CLOUD_PROJECT-bucket
gsutil mb -l us-central1 $BUCKET_NAME

بعد ذلك، سنمنح حساب خدمة Compute Engine إذن الوصول إلى هذه الحزمة. سيضمن ذلك حصول Vertex Pipelines على الأذونات اللازمة لكتابة الملفات في هذه الحزمة. شغِّل الأمر التالي لإضافة هذا الإذن:

gcloud projects describe $GOOGLE_CLOUD_PROJECT > project-info.txt
PROJECT_NUM=$(cat project-info.txt | sed -nre 's:.*projectNumber\: (.*):\1:p')
SVC_ACCOUNT="${PROJECT_NUM//\'/}-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:$SVC_ACCOUNT --role roles/storage.objectAdmin

الخطوة 4: إنشاء مثيل Vertex AI Workbench

من قسم Vertex AI في Cloud Console، انقر على Workbench:

قائمة Vertex AI

من هناك، ضمن دفاتر الملاحظات التي يديرها المستخدم، انقر على دفتر ملاحظات جديد:

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

بعد ذلك، اختَر نوع المثيل TensorFlow Enterprise 2.3 (مع قناة الدعم الطويل الأمد (LTS) بدون وحدات معالجة الرسومات:

مثيل TFE

استخدِم الخيارات التلقائية، ثم انقر على إنشاء.

الخطوة 5: فتح دفتر ملاحظاتك

بعد إنشاء المثيل، اختَر فتح JupyterLab:

فتح ورقة الملاحظات

4. إعداد خطوط أنابيب Vertex

هناك بعض المكتبات الإضافية التي سنحتاج إلى تثبيتها من أجل استخدام خطوط Vertex Pipelines:

  • Kubeflow Pipelines: هذه هي حزمة تطوير البرامج (SDK) التي سنستخدمها لإنشاء المسار. تتيح مسارات Vertex Pipelines تشغيل خطوط الأنابيب التي تم إنشاؤها باستخدام كل من خطوط Kubeflow Pipelines أو TFX.
  • مكوّنات Google Cloud Pipeline: توفّر هذه المكتبة مكوّنات معدّة مسبقًا تسهّل التفاعل مع خدمات Vertex AI من خلال خطوات سير العمل.

الخطوة 1: إنشاء دفتر ملاحظات Python وتثبيت مكتبات

أولاً، من قائمة "مشغّل التطبيقات" في مثيل دفتر الملاحظات (والذي يمكنك الوصول إليه بالنقر على أيقونة + في الجزء العلوي الأيمن من دفترك)، أنشئ دفتر ملاحظات عن طريق اختيار Python 3:

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

يمكنك الوصول إلى قائمة "مشغّل التطبيقات" من خلال النقر على علامة + في أعلى يمين مثيل ورقة الملاحظات.

لتثبيت كلتا الخدمتين اللتين سنستخدمهما في هذا التمرين المعملي، عليك أولاً وضع علامة المستخدم في خلية دفتر ملاحظات:

USER_FLAG = "--user"

ثم قم بتشغيل ما يلي من دفتر ملاحظاتك:

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0 --upgrade
!pip3 install {USER_FLAG} kfp==1.8.9 google-cloud-pipeline-components==0.2.0

بعد تثبيت هذه الحزم، ستحتاج إلى إعادة تشغيل النواة:

import os

if not os.getenv("IS_TESTING"):
    # Automatically restart kernel after installs
    import IPython

    app = IPython.Application.instance()
    app.kernel.do_shutdown(True)

أخيرًا، تحقق من أنك قمت بتثبيت الحزم بشكل صحيح. يجب أن يكون إصدار حزمة تطوير البرامج (SDK) KFP على الإصدار =1.8:

!python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
!python3 -c "import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))"

الخطوة 2: ضبط رقم تعريف مشروعك وحزمتك

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

إذا كنت لا تعرف معرّف مشروعك، فقد تتمكن من الحصول عليه عن طريق تشغيل ما يلي:

import os
PROJECT_ID = ""

# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
    shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
    PROJECT_ID = shell_output[0]
    print("Project ID: ", PROJECT_ID)

وبخلاف ذلك، يمكنك ضبطه هنا:

if PROJECT_ID == "" or PROJECT_ID is None:
    PROJECT_ID = "your-project-id"  # @param {type:"string"}

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

BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"

الخطوة 3: استيراد المكتبات

أضِف ما يلي لاستيراد المكتبات التي سنستخدمها في هذا الدرس التطبيقي حول الترميز:

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline

from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip

الخطوة 4: تعريف الثوابت

آخر شيء يتعين علينا القيام به قبل بناء مسارنا هو تحديد بعض المتغيرات الثابتة. PIPELINE_ROOT هو مسار Cloud Storage حيث تتم كتابة العناصر التي أنشأها المسار. نحن نستخدم us-central1 كمنطقة هنا، ولكن إذا استخدمت منطقة مختلفة عند إنشاء الحزمة، عليك تعديل المتغيّر REGION في الرمز أدناه:

PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
REGION="us-central1"

PIPELINE_ROOT = f"{BUCKET_NAME}/pipeline_root/"
PIPELINE_ROOT

بعد تشغيل التعليمة البرمجية أعلاه، ستتم طباعة الدليل الجذر لمسار العملية. هذا هو موقع Cloud Storage الذي ستتم كتابة العناصر فيه. سيكون بالتنسيق gs://YOUR-BUCKET-NAME/pipeline_root/

5- إعداد مهمة تدريب نموذج مخصّص

قبل إعداد المسار، نحتاج إلى كتابة الرمز لمهمة تدريب النموذج المخصّص. لتدريب النموذج، سنستخدم مجموعة بيانات الفاصوليا الجافة للتعلم الآلي من UCI، من KOKLU وM. وOZKAN, I.A. (2020)، "التصنيف المتعدد الفئات للحبوب الجافة باستخدام رؤية الكمبيوتر وتقنيات التعلم الآلي"، "في قسم أجهزة الكمبيوتر والإلكترونيات في الزراعة، 174، 105507. DOI.

ستنشئ الخطوة الأولى في المسار مجموعة بيانات مُدارة في Vertex AI باستخدام جدول في BigQuery يحتوي على نسخة من بيانات الفاصوليا هذه. سيتم تمرير مجموعة البيانات كإدخال في المهمة التدريبية. في رمز التدريب، سيكون لدينا إذن الوصول إلى متغيّر البيئة للوصول إلى مجموعة البيانات المُدارة هذه.

في ما يلي كيفية إعداد مهمة التدريب المخصصة:

  • كتابة نموذج ساي كيت ليرن DecisionTreeClassifier لتصنيف أنواع الحبوب في البيانات
  • قم بحزم التعليمة البرمجية في حاوية Docker وانشرها إلى Container Registry

بعد ذلك، سنتمكن من بدء مهمة التدريب على Vertex AI مباشرةً من خلال مسارنا التعليمي. لِنبدأ.

الخطوة 1: تحديد رمز التدريب في حاوية Docker

من مثيل دفتر الملاحظات، افتح "مشغّل التطبيقات" واختَر "وحدة تحكُّم طرفية" (Terminal):

فتح نافذة الوحدة الطرفية

بعد ذلك، شغِّل ما يلي لإعداد دليل ستضيف فيه الرمز المحلّي:

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

بعد تشغيل هذه الأوامر، من المفترض أن يظهر لك دليل باسم traincontainer/ تم إنشاؤه على يمين الصفحة (قد تحتاج إلى النقر على رمز "إعادة التحميل" لرؤيته). سيظهر لك ما يلي في دليل traincontainer/:

+ Dockerfile
+ trainer/
    + train.py

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

FROM gcr.io/deeplearning-platform-release/sklearn-cpu.0-23
WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

RUN pip install sklearn google-cloud-bigquery joblib pandas google-cloud-storage

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.train"]

لحفظ الملفات أثناء تعديلها في مثيل ورقة الملاحظات، يمكنك استخدام ctrl+s.

بعد ذلك، افتح ملف train.py. هذا هو المكان الذي سنضيف فيه رمز التدريب الخاص بنا. انسخ ما يلي إلى train.py. يؤدي ذلك إلى استرداد البيانات من مجموعة البيانات المُدارة، ووضعها في إطار بيانات Pandas، وتدريب نموذج ساي كيت ليرن، وتحميل النموذج المُدرَّب إلى Cloud Storage:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from google.cloud import bigquery
from google.cloud import storage
from joblib import dump

import os
import pandas as pd

bqclient = bigquery.Client()
storage_client = storage.Client()

def download_table(bq_table_uri: str):
    prefix = "bq://"
    if bq_table_uri.startswith(prefix):
        bq_table_uri = bq_table_uri[len(prefix):]

    table = bigquery.TableReference.from_string(bq_table_uri)
    rows = bqclient.list_rows(
        table,
    )
    return rows.to_dataframe(create_bqstorage_client=False)

# These environment variables are from Vertex AI managed datasets
training_data_uri = os.environ["AIP_TRAINING_DATA_URI"]
test_data_uri = os.environ["AIP_TEST_DATA_URI"]

# Download data into Pandas DataFrames, split into train / test
df = download_table(training_data_uri)
test_df = download_table(test_data_uri)
labels = df.pop("Class").tolist()
data = df.values.tolist()
test_labels = test_df.pop("Class").tolist()
test_data = test_df.values.tolist()

# Define and train the Scikit model
skmodel = DecisionTreeClassifier()
skmodel.fit(data, labels)
score = skmodel.score(test_data, test_labels)
print('accuracy is:',score)

# Save the model to a local file
dump(skmodel, "model.joblib")

# Upload the saved model file to GCS
bucket = storage_client.get_bucket("YOUR_GCS_BUCKET")
model_directory = os.environ["AIP_MODEL_DIR"]
storage_path = os.path.join(model_directory, "model.joblib")
blob = storage.blob.Blob.from_string(storage_path, client=storage_client)
blob.upload_from_filename("model.joblib")

بعد ذلك، يُرجى الرجوع إلى دفتر الملاحظات وتنفيذ ما يلي لاستبدال YOUR_GCS_BUCKET من النص البرمجي أعلاه باسم حزمة Cloud Storage:

BUCKET = BUCKET_NAME[5:] # Trim the 'gs://' before adding to train script
!sed -i -r 's@YOUR_GCS_BUCKET@'"$BUCKET"'@' traincontainer/trainer/train.py

ويمكنك أيضًا إجراء ذلك يدويًا إذا كنت تفضّل ذلك. إذا فعلت ذلك، احرِص على عدم تضمين gs:// في اسم الحزمة عند تعديل النص البرمجي.

أصبح رمز التدريب الآن في حاوية Docker، ونكون جاهزين لإجراء التدريب في السحابة.

الخطوة 2: إرسال الحاوية إلى Container Registry

بعد اكتمال رمز التدريب، أصبحنا جاهزين لإرسال ذلك إلى Google Container Registry. عندما نهيأ لاحقًا مكون التدريب لمسار التدريب لدينا، سنشير إلى مسارات Vertex Pipelines في هذه الحاوية.

انتقِل مرة أخرى إلى Terminal، ومن جذر الدليل traincontainer/، حدِّد متغيّرًا باستخدام معرّف الموارد المنتظم (URI) لصورة الحاوية على Container Registry.

PROJECT_ID=$(gcloud config get-value project)
IMAGE_URI="gcr.io/$PROJECT_ID/scikit:v1"

بعد ذلك، أنشئ حاويتك عن طريق تشغيل ما يلي:

docker build ./ -t $IMAGE_URI

أخيرًا، ادفع الحاوية إلى Container Registry:

docker push $IMAGE_URI

انتقِل إلى قسم Container Registry في Cloud Console للتأكّد من وجود الحاوية. وستظهر على النحو التالي:

Container Registry

6- تهيئة مهمة تنبؤ مجمّعة

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

جارٍ نسخ أمثلة توقّعات مجمّعة إلى Cloud Storage

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

%%writefile batch_examples.csv
Area,Perimeter,MajorAxisLength,MinorAxisLength,AspectRation,Eccentricity,ConvexArea,EquivDiameter,Extent,Solidity,roundness,Compactness,ShapeFactor1,ShapeFactor2,ShapeFactor3,ShapeFactor4
23288,558.113,207.567738,143.085693,1.450653336,0.7244336162,23545,172.1952453,0.8045881703,0.9890847314,0.9395021523,0.8295857874,0.008913077034,0.002604069884,0.6882125787,0.9983578734
23689,575.638,205.9678003,146.7475015,1.403552348,0.7016945718,24018,173.6714472,0.7652721693,0.9863019402,0.8983750474,0.8431970773,0.00869465998,0.002711119968,0.7109813112,0.9978994889
23727,559.503,189.7993849,159.3717704,1.190922235,0.5430731512,24021,173.8106863,0.8037601626,0.9877607094,0.952462433,0.9157600082,0.007999299741,0.003470231343,0.8386163926,0.9987269085
31158,641.105,212.0669751,187.1929601,1.132879009,0.4699241567,31474,199.1773023,0.7813134733,0.989959967,0.9526231013,0.9392188582,0.0068061806,0.003267009878,0.8821320637,0.9993488983
32514,649.012,221.4454899,187.1344232,1.183349841,0.5346736437,32843,203.4652564,0.7849831,0.9899826447,0.9700068737,0.9188051492,0.00681077351,0.002994124691,0.8442029022,0.9989873701
33078,659.456,235.5600775,178.9312328,1.316483846,0.6503915309,33333,205.2223615,0.7877214708,0.9923499235,0.9558229607,0.8712102818,0.007121351881,0.002530662194,0.7590073551,0.9992209221
33680,683.09,256.203255,167.9334938,1.525623324,0.7552213942,34019,207.081404,0.80680321,0.9900349805,0.9070392732,0.8082699962,0.007606985006,0.002002710402,0.6533003868,0.9966903078
33954,716.75,277.3684803,156.3563259,1.773951126,0.825970469,34420,207.9220419,0.7994819873,0.9864613597,0.8305492781,0.7496238998,0.008168948587,0.001591181142,0.5619359911,0.996846984
36322,719.437,272.0582306,170.8914975,1.591993952,0.7780978465,36717,215.0502424,0.7718560075,0.9892420405,0.8818487005,0.7904566678,0.007490177594,0.001803782407,0.6248217437,0.9947124371
36675,742.917,285.8908964,166.8819538,1.713132487,0.8119506999,37613,216.0927123,0.7788277766,0.9750618137,0.8350248381,0.7558572692,0.0077952528,0.001569528272,0.5713202115,0.9787472145
37454,772.679,297.6274753,162.1493177,1.835514817,0.8385619338,38113,218.3756257,0.8016695205,0.9827093118,0.7883332637,0.7337213257,0.007946480356,0.001420623993,0.5383469838,0.9881438654
37789,766.378,313.5680678,154.3409867,2.031657789,0.8704771226,38251,219.3500608,0.7805870567,0.9879218844,0.8085170916,0.6995293312,0.008297866252,0.001225659709,0.4893412853,0.9941740339
47883,873.536,327.9986493,186.5201272,1.758516115,0.822571799,48753,246.9140116,0.7584464543,0.9821549443,0.7885506623,0.7527897207,0.006850002074,0.00135695419,0.5666923636,0.9965376533
49777,861.277,300.7570338,211.6168613,1.42123379,0.7105823885,50590,251.7499649,0.8019106536,0.9839296304,0.843243269,0.8370542883,0.00604208839,0.001829706116,0.7006598815,0.9958014989
49882,891.505,357.1890036,179.8346914,1.986207449,0.8640114945,51042,252.0153467,0.7260210171,0.9772736178,0.7886896753,0.7055518063,0.007160679276,0.001094585314,0.4978033513,0.9887407248
53249,919.923,325.3866286,208.9174205,1.557489212,0.7666552108,54195,260.3818974,0.6966846347,0.9825445152,0.7907120655,0.8002231025,0.00611066177,0.001545654241,0.6403570138,0.9973491406
61129,964.969,369.3481688,210.9473449,1.750902193,0.8208567513,61796,278.9836198,0.7501135067,0.9892064211,0.8249553283,0.7553404711,0.006042110436,0.001213219664,0.5705392272,0.9989583843
61918,960.372,353.1381442,224.0962377,1.575832543,0.7728529173,62627,280.7782864,0.7539207091,0.9886790043,0.8436218213,0.7950947556,0.005703319619,0.00140599258,0.6321756704,0.9962029945
141953,1402.05,524.2311633,346.3974998,1.513380332,0.7505863011,143704,425.1354762,0.7147107987,0.9878152313,0.9074598849,0.8109694843,0.003692991084,0.0009853172185,0.6576715044,0.9953071199
145285,1440.991,524.9567463,353.0769977,1.486805285,0.7400216694,146709,430.0960442,0.7860466375,0.9902937107,0.8792413513,0.8192980608,0.003613289371,0.001004269363,0.6712493125,0.9980170255
146153,1476.383,526.1933264,356.528288,1.475881001,0.7354662103,149267,431.3789276,0.7319360978,0.9791380546,0.8425962592,0.8198107159,0.003600290972,0.001003163512,0.6720896099,0.991924286

بعد ذلك، انسخ الملف إلى حزمة Cloud Storage:

!gsutil cp batch_examples.csv $BUCKET_NAME

سنشير إلى هذا الملف في الخطوة التالية عندما نحدد مسار العملية.

7. بناء خط أنابيب بمكونات معدة مسبقًا

والآن بعد أن أصبح رمز التدريب الخاص بنا في السحابة، نحن جاهزون لاستدعاءه من مسارنا. سيستخدم المسار الذي سنحدِّده ثلاثة مكوِّنات مُنشأة مسبقًا من مكتبة google_cloud_pipeline_components التي ثبَّتها سابقًا. تعمل هذه المكوّنات المحدّدة مسبقًا على تبسيط الرمز الذي نحتاج إلى كتابته لإعداد مسار العمل لدينا، وستتيح لنا استخدام خدمات Vertex AI مثل تدريب النماذج والتوقّع المجمَّع.

في ما يلي الإجراءات التي سيتم تنفيذها في مسارنا المكوَّن من ثلاث خطوات:

  • إنشاء مجموعة بيانات مُدارة في Vertex AI
  • تشغيل مهمة تدريب على Vertx AI باستخدام الحاوية المخصّصة التي نعدّها
  • تنفيذ مهمة توقُّع مجمّعة على نموذج تصنيف "ساي كيت ليرن" المدرَّب

الخطوة 1: تحديد مسار التعلّم

ولأننا نستخدم مكونات معدة مسبقًا، يمكننا إعداد مسار العملية بالكامل في تعريف المسار. أضِف ما يلي إلى خلية في ورقة الملاحظات:

@pipeline(name="automl-beans-custom",
                  pipeline_root=PIPELINE_ROOT)
def pipeline(
    bq_source: str = "bq://sara-vertex-demos.beans_demo.large_dataset",
    bucket: str = BUCKET_NAME,
    project: str = PROJECT_ID,
    gcp_region: str = REGION,
    bq_dest: str = "",
    container_uri: str = "",
    batch_destination: str = ""
):
    dataset_create_op = gcc_aip.TabularDatasetCreateOp(
        display_name="tabular-beans-dataset",
        bq_source=bq_source,
        project=project,
        location=gcp_region
    )

    training_op = gcc_aip.CustomContainerTrainingJobRunOp(
        display_name="pipeline-beans-custom-train",
        container_uri=container_uri,
        project=project,
        location=gcp_region,
        dataset=dataset_create_op.outputs["dataset"],
        staging_bucket=bucket,
        training_fraction_split=0.8,
        validation_fraction_split=0.1,
        test_fraction_split=0.1,
        bigquery_destination=bq_dest,
        model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest",
        model_display_name="scikit-beans-model-pipeline",
        machine_type="n1-standard-4",
    )
    batch_predict_op = gcc_aip.ModelBatchPredictOp(
        project=project,
        location=gcp_region,
        job_display_name="beans-batch-predict",
        model=training_op.outputs["model"],
        gcs_source_uris=["{0}/batch_examples.csv".format(BUCKET_NAME)],
        instances_format="csv",
        gcs_destination_output_uri_prefix=batch_destination,
        machine_type="n1-standard-4"
    )

الخطوة 2: تجميع المسار وتشغيله

بعد تحديد المسار، ستكون جاهزًا لتجميعه. سينشئ ما يلي ملف JSON ستستخدمه لتشغيل المسار:

compiler.Compiler().compile(
    pipeline_func=pipeline, package_path="custom_train_pipeline.json"
)

بعد ذلك، أنشئ متغيّر TIMESTAMP. سنستخدم هذا في معرف الوظيفة الخاص بنا:

from datetime import datetime

TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")

بعد ذلك، حدد مهمة المسار الخاص بك، مع تمرير بعض المعلمات الخاصة بالمشروع:

pipeline_job = aiplatform.PipelineJob(
    display_name="custom-train-pipeline",
    template_path="custom_train_pipeline.json",
    job_id="custom-train-pipeline-{0}".format(TIMESTAMP),
    parameter_values={
        "project": PROJECT_ID,
        "bucket": BUCKET_NAME,
        "bq_dest": "bq://{0}".format(PROJECT_ID),
        "container_uri": "gcr.io/{0}/scikit:v1".format(PROJECT_ID),
        "batch_destination": "{0}/batchpredresults".format(BUCKET_NAME)
    },
    enable_caching=True,
)

أخيرًا، قم بتشغيل المهمة لإنشاء عملية تنفيذ جديدة لمسار التعلّم:

pipeline_job.submit()

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

سجلات مهام مسار التعلّم

انتقِل إلى ذلك الرابط. يمكنك أيضًا الوصول إليه عن طريق فتح لوحة بيانات المسارات. من المفترض أن يظهر مسار التنفيذ على النحو التالي عند الانتهاء:

مسار المقدّمة المكتمل

سيستغرق تنفيذ هذا المسار من 5 إلى 10 دقائق، ولكن يمكنك المتابعة إلى الخطوة التالية قبل اكتماله. بعد ذلك، سنطّلع على مزيد من المعلومات حول ما يحدث في كل خطوة من هذه الخطوات في مسار التعلّم.

8. فهم عملية تنفيذ مسار التعلّم

لنستعرض بمزيد من التفصيل كل خطوة من خطوات المسارات الثلاث.

الخطوة 1: إنشاء مجموعة بيانات مُدارة

تنشئ الخطوة الأولى في مسارنا مجموعة بيانات مُدارة في Vertex AI. إذا قمت بالنقر فوق رابط مجموعة البيانات التالي في قسم "pipelines" (المسارات) في وحدة التحكم الخاصة بك:

رابط إلى مجموعة البيانات من المسار

ستظهر لك مجموعة بياناتك في Vertex AI، والتي تتضمّن رابطًا إلى مصدر البيانات في BigQuery مع معلومات عن الأعمدة المختلفة في مجموعة بياناتك. بعد تحميل مجموعة بيانات مُدارة إلى Vertex AI، يمكن استخدامها لتدريب نموذج AutoML أو نموذج مخصّص.

بالنسبة إلى مهام النماذج المخصّصة التي تستخدم مجموعات البيانات المُدارة، يُمرِّر Vertex AI متغيّرات بيئية خاصة إلى مهام التدريب ويتعامل مع تقسيم البيانات إلى مجموعات تدريب واختبار. سوف نستفيد من ذلك في الخطوة التالية في العملية التعليمية.

الخطوة 2: تدريب نموذج في Vertex AI Training

أثناء تشغيل مهمة التدريب المخصصة، يمكنك النقر لعرض السجلات مباشرةً في وحدة تحكم Vertex Pipelines:

سجلّات التدريب المخصّصة

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

الخطوة 3: تشغيل مهمة تنبؤ مجمّعة على نموذجنا

وأخيرًا، ستحصل عملية التنفيذ لدينا على تنبؤات عن الأمثلة التي مررنا بها عبر ملف CSV. عند اكتمال مهمة التوقع المجمَّع، سيكتب Vertex AI ملف CSV في الموقع الذي حدّدناه في Cloud Storage. عند بدء تنفيذ هذه الخطوة ضمن مسار العملية، يمكنك الانتقال إلى قسم "التوقّعات المجمّعة" في وحدة تحكُّم Vertex AI للاطّلاع على المهمة التي تم إنشاؤها.

انقر على المهمة عند اكتمالها للاطّلاع على عنوان URL الخاص بخدمة Cloud Storage لتوقّعات الدفعة:

مهمة التوقع المجمَّع

انقر على ذلك الرابط للانتقال إلى دليل Cloud Storage حيث يمكنك العثور على نتائج التوقّع، ثم انقر لتنزيل أحد ملفات prediction.results. في الملف، من المفترض أن تظهر صفوف على النحو التالي:

{"instance": [33954.0, 716.75, 277.3684803, 156.3563259, 1.773951126, 0.825970469, 34420.0, 207.9220419, 0.7994819873, 0.9864613597, 0.8305492781, 0.7496238998, 0.008168948587, 0.001591181142, 0.5619359911, 0.996846984], "prediction": "HOROZ"}

ويشمل هذا قيم الخصائص لمثيل معين، إلى جانب الفئة التي تنبأ بها نموذجنا. في هذا المثال، يعتقد نموذجنا أن هذا حدث "HOROZ" بازلاء

بذلك تكون قد أنهيت التمرين المعملي.

🎉 تهانينا. 🎉

لقد تعلمت كيفية استخدام Vertex AI لإجراء ما يلي:

  • استخدام حزمة تطوير برامج Kubeflow Pipelines لإنشاء خطوط بيانات شاملة باستخدام مكوّنات مخصّصة
  • تشغيل المسارات على Vertex Pipelines وبدء عمليات التشغيل باستخدام حزمة تطوير البرامج (SDK)
  • عرض الرسم البياني لخطوط Vertex Pipelines وتحليله في وحدة التحكّم
  • استخدِم مكوّنات جاهزة مصمَّمة مسبقًا لإضافة خدمات Vertex AI إلى مسار التعلّم
  • جدولة المهام المتكررة لمسار التعلّم

لمزيد من المعلومات حول أجزاء مختلفة من Vertex، يمكنك الاطّلاع على المستندات.

9. تنظيف

حتى لا يتم تحصيل رسوم منك، ننصحك بحذف الموارد التي تم إنشاؤها خلال هذا الدرس التطبيقي.

الخطوة 1: إيقاف النسخة الافتراضية من دفاتر الملاحظات أو حذفها

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

إيقاف المثيل

الخطوة 2: حذف حزمة Cloud Storage

لحذف "حزمة التخزين"، باستخدام قائمة التنقّل في Cloud Console، انتقِل إلى "مساحة التخزين" واختَر الحزمة وانقر على "حذف":

حذف مساحة التخزين