استخدام البيانات الوصفية لتعلُّم الآلة في Vertex مع المسارات

1. نظرة عامة

في هذا التمرين العملي، ستتعرّف على كيفية تحليل البيانات الوصفية من عمليات تشغيل Vertex Pipelines باستخدام Vertex ML Metadata.

ما ستتعلمه

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

  • استخدِم حزمة تطوير البرامج (SDK) الخاصة بـ Kubeflow Pipelines لإنشاء مسار تعلُّم آلة ينشئ مجموعة بيانات في Vertex AI، ويدرّب نموذج Scikit-learn مخصّصًا وينشره على مجموعة البيانات هذه.
  • كتابة مكوّنات مخصّصة لخطوط الأنابيب تنشئ عناصر وبيانات وصفية
  • مقارنة عمليات تشغيل Vertex Pipelines، سواء في Cloud Console أو آليًا
  • تتبُّع مصدر عناصر البنية الأساسية التي تم إنشاؤها بواسطة خط الأنابيب
  • طلب البحث عن البيانات الوصفية لتشغيل خط الأنابيب

تبلغ التكلفة الإجمالية لتشغيل هذا الدرس التطبيقي على Google Cloud حوالي 2 دولار أمريكي.

2. مقدمة عن Vertex AI

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

بالإضافة إلى خدمات تدريب النماذج وتفعيلها، تتضمّن Vertex AI أيضًا مجموعة متنوّعة من منتجات عمليات تعلُّم الآلة (MLOps)، بما في ذلك Vertex Pipelines وML Metadata وModel Monitoring وFeature Store وغيرها. يمكنك الاطّلاع على جميع عروض منتجات Vertex AI في الرسم البياني أدناه.

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

يركّز هذا الدرس التطبيقي على Vertex Pipelines وVertex ML Metadata.

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

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

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

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

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

يجب أن يكون لديك مشروع على Google Cloud Platform مع تفعيل الفوترة لتتمكّن من تنفيذ هذا الدرس العملي. لإنشاء مشروع، اتّبِع التعليمات هنا.

بدء 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 init

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

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

نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:

gcloud auth list

ناتج الأمر

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

نفِّذ الأمر التالي في 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 الذي يحتوي على اسم مشروع على السحابة الإلكترونية الحالي. سنستخدم هذا المتغير في مواضع مختلفة خلال هذا الدرس التطبيقي. يمكنك الاطّلاع عليه من خلال تنفيذ الأمر التالي:

echo $GOOGLE_CLOUD_PROJECT

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

في الخطوات اللاحقة، ستعرف الأماكن التي تحتاج فيها إلى هذه الخدمات (والسبب)، ولكن في الوقت الحالي، شغِّل هذا الأمر لمنح مشروعك إذن الوصول إلى خدمات 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.

إنشاء حزمة في Cloud Storage

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

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

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

بعد ذلك، سنمنح حساب خدمة الحوسبة إذن الوصول إلى هذه الحزمة. سيضمن ذلك حصول 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

إنشاء مثيل Vertex AI Workbench

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

قائمة Vertex AI

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

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

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

مثيل TFE

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

فتح دفتر الملاحظات

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

فتح دفتر الملاحظات

4. إعداد Vertex Pipelines

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

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

إنشاء دفتر ملاحظات Python وتثبيت المكتبات

أولاً، من قائمة "مشغّل التطبيقات" في مثيل "دفتر الملاحظات"، أنشئ دفتر ملاحظات من خلال اختيار Python 3:

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

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

USER_FLAG = "--user"

بعد ذلك، نفِّذ ما يلي من دفتر الملاحظات:

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0
!pip3 install {USER_FLAG} kfp==1.8.9

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

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__))"

بعد ذلك، تأكَّد من أنّ إصدار حزمة تطوير البرامج (SDK) في Vertex AI هو 1.6.2 أو إصدار أحدث:

!pip list | grep aiplatform

تحديد رقم تعريف مشروعك وحزمة منتجك

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

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

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"

استيراد المكتبات

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

import matplotlib.pyplot as plt
import pandas as pd

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline, component, Artifact, Dataset, Input, Metrics, Model, Output, InputPath, OutputPath

from google.cloud import aiplatform

# We'll use this namespace for metadata querying
from google.cloud import aiplatform_v1

تحديد الثوابت

آخر خطوة علينا اتّخاذها قبل إنشاء مسارنا هي تحديد بعض المتغيّرات الثابتة. ‫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- إنشاء مسار من 3 خطوات باستخدام مكوّنات مخصّصة

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

  • get_dataframe: استرداد البيانات من جدول BigQuery وتحويلها إلى Pandas DataFrame
  • train_sklearn_model: استخدام Pandas DataFrame لتدريب نموذج Scikit Learn وتصديره، بالإضافة إلى بعض المقاييس
  • deploy_model: نشر نموذج Scikit Learn الذي تم تصديره إلى نقطة نهاية في Vertex AI

في مسار البيانات هذا، سنستخدم مجموعة بيانات الفاصوليا الجافة من مستودع UCI Machine Learning، من: KOKLU، وM. وOZKAN، وI.A. (2020), "Multiclass Classification of Dry Beans Using Computer Vision and Machine Learning Techniques."In Computers and Electronics in Agriculture, 174, 105507. DOI

هذه مجموعة بيانات جدولية، وسنستخدمها في مسارنا لتدريب نموذج Scikit-learn وتقييمه ونشره، وهو نموذج يصنّف حبوب الفاصوليا إلى أحد الأنواع السبعة استنادًا إلى خصائصها. لنبدأ الترميز!

إنشاء مكوّنات مستندة إلى دوال Python

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

تنزيل بيانات BigQuery وتحويلها إلى ملف CSV

أولاً، سننشئ المكوّن get_dataframe:

@component(
    packages_to_install=["google-cloud-bigquery", "pandas", "pyarrow", "db-dtypes"],
    base_image="python:3.9",
    output_component_file="create_dataset.yaml"
)
def get_dataframe(
    bq_table: str,
    output_data_path: OutputPath("Dataset")
):
    from google.cloud import bigquery
    import pandas as pd
    import os

    project_number = os.environ["CLOUD_ML_PROJECT_ID"]
    bqclient = bigquery.Client(project=project_number)
    table = bigquery.TableReference.from_string(
        bq_table
    )
    rows = bqclient.list_rows(
        table
    )
    dataframe = rows.to_dataframe(
        create_bqstorage_client=True,
    )
    dataframe = dataframe.sample(frac=1, random_state=2)
    dataframe.to_csv(output_data_path)

لنلقِ نظرة عن كثب على ما يحدث في هذا المكوّن:

  • يُحوّل أداة التزيين @component هذه الدالة إلى مكوّن عند تشغيل خط الأنابيب. ستستخدم هذا النوع في كل مرة تكتب فيها مكونًا مخصصًا.
  • تحدّد المَعلمة base_image صورة الحاوية التي سيستخدمها هذا المكوّن.
  • سيستخدم هذا المكوّن بعض مكتبات Python، والتي نحدّدها من خلال المَعلمة packages_to_install.
  • المَعلمة output_component_file اختيارية، وتحدّد ملف yaml الذي سيتم كتابة المكوّن المجمَّع فيه. بعد تشغيل الخلية، من المفترض أن يظهر لك الملف مكتوبًا في مثيل دفتر الملاحظات. إذا أردت مشاركة هذا المكوّن مع مستخدم آخر، يمكنك إرسال ملف yaml الذي تم إنشاؤه إليه وطلب تحميله باستخدام ما يلي:
# This is optional, it shows how to load a component from a yaml file
# dataset_component = kfp.components.load_component_from_file('./create_dataset.yaml')
  • بعد ذلك، يستخدم هذا المكوّن مكتبة عميل BigQuery Python لتنزيل بياناتنا من BigQuery إلى Pandas DataFrame، ثم ينشئ عنصر إخراج من هذه البيانات كملف CSV. سيتم تمرير هذا كإدخال إلى المكوّن التالي

إنشاء مكوّن لتدريب نموذج Scikit-learn

في هذا المكوّن، سنأخذ ملف CSV الذي أنشأناه سابقًا ونستخدمه لتدريب نموذج شجرة قرار في Scikit-learn. يصدّر هذا المكوّن نموذج Scikit الناتج، بالإضافة إلى عنصر Metrics يتضمّن دقة النموذج وإطاره وحجم مجموعة البيانات المستخدَمة لتدريبه:

@component(
    packages_to_install=["sklearn", "pandas", "joblib", "db-dtypes"],
    base_image="python:3.9",
    output_component_file="beans_model_component.yaml",
)
def sklearn_train(
    dataset: Input[Dataset],
    metrics: Output[Metrics],
    model: Output[Model]
):
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import roc_curve
    from sklearn.model_selection import train_test_split
    from joblib import dump

    import pandas as pd
    df = pd.read_csv(dataset.path)
    labels = df.pop("Class").tolist()
    data = df.values.tolist()
    x_train, x_test, y_train, y_test = train_test_split(data, labels)

    skmodel = DecisionTreeClassifier()
    skmodel.fit(x_train,y_train)
    score = skmodel.score(x_test,y_test)
    print('accuracy is:',score)

    metrics.log_metric("accuracy",(score * 100.0))
    metrics.log_metric("framework", "Scikit Learn")
    metrics.log_metric("dataset_size", len(df))
    dump(skmodel, model.path + ".joblib")

تحديد مكوّن لتحميل النموذج وتفعيله في Vertex AI

أخيرًا، سيأخذ المكوّن الأخير النموذج المدرَّب من الخطوة السابقة ويحمّله إلى Vertex AI ثم يفعّله في نقطة نهاية:

@component(
    packages_to_install=["google-cloud-aiplatform"],
    base_image="python:3.9",
    output_component_file="beans_deploy_component.yaml",
)
def deploy_model(
    model: Input[Model],
    project: str,
    region: str,
    vertex_endpoint: Output[Artifact],
    vertex_model: Output[Model]
):
    from google.cloud import aiplatform

    aiplatform.init(project=project, location=region)

    deployed_model = aiplatform.Model.upload(
        display_name="beans-model-pipeline",
        artifact_uri = model.uri.replace("model", ""),
        serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest"
    )
    endpoint = deployed_model.deploy(machine_type="n1-standard-4")

    # Save data to the output params
    vertex_endpoint.uri = endpoint.resource_name
    vertex_model.uri = deployed_model.resource_name

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

تحديد مسار العرض وتجميعه

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

@pipeline(
    # Default pipeline root. You can override it when submitting the pipeline.
    pipeline_root=PIPELINE_ROOT,
    # A name for the pipeline.
    name="mlmd-pipeline",
)
def pipeline(
    bq_table: str = "",
    output_data_path: str = "data.csv",
    project: str = PROJECT_ID,
    region: str = REGION
):
    dataset_task = get_dataframe(bq_table)

    model_task = sklearn_train(
        dataset_task.output
    )

    deploy_task = deploy_model(
        model=model_task.outputs["model"],
        project=project,
        region=region
    )

سيؤدي ذلك إلى إنشاء ملف JSON ستستخدمه لتشغيل سلسلة المعالجة:

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

بدء تشغيل مسارين

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

from datetime import datetime

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

تذكَّر أنّ مسارنا يأخذ مَعلمة واحدة عند تشغيله: bq_table الذي نريد استخدامه لبيانات التدريب. سيستخدم تشغيل مسار البيانات هذا نسخة أصغر من مجموعة بيانات حبوب البن:

run1 = aiplatform.PipelineJob(
    display_name="mlmd-pipeline",
    template_path="mlmd_pipeline.json",
    job_id="mlmd-pipeline-small-{0}".format(TIMESTAMP),
    parameter_values={"bq_table": "sara-vertex-demos.beans_demo.small_dataset"},
    enable_caching=True,
)

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

run2 = aiplatform.PipelineJob(
    display_name="mlmd-pipeline",
    template_path="mlmd_pipeline.json",
    job_id="mlmd-pipeline-large-{0}".format(TIMESTAMP),
    parameter_values={"bq_table": "sara-vertex-demos.beans_demo.large_dataset"},
    enable_caching=True,
)

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

run1.submit()

بعد ذلك، ابدأ عملية التشغيل الثانية:

run2.submit()

بعد تشغيل هذه الخلية، سيظهر لك رابط لعرض كل مسار في وحدة تحكّم Vertex AI. افتح هذا الرابط للاطّلاع على مزيد من التفاصيل حول مسار التجهيز:

عنوان URL لتشغيل خط الأنابيب

عند اكتمالها (تستغرق عملية التنفيذ هذه حوالي 10 إلى 15 دقيقة)، سيظهر لك ما يلي:

مسار sklearn المكتمل

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

6. فهم عناصر البنية الأساسية ومصدرها

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

توسيع العناصر

سيؤدي النقر على أحد العناصر إلى عرض المزيد من التفاصيل عنه، بما في ذلك معرّف الموارد الموحّد (URI). على سبيل المثال، سيؤدي النقر على العنصر vertex_endpoint إلى عرض معرّف الموارد المنتظم (URI) الذي يمكنك من خلاله العثور على نقطة النهاية التي تم نشرها في وحدة تحكّم Vertex AI:

تفاصيل عنصر نقطة النهاية

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

مقاييس النماذج

تحتوي كل أداة على سلسلة نسب، وهي تصف الأدوات الأخرى المرتبطة بها. انقر على عنصر vertex_endpoint في مسار العرض مرة أخرى، ثم انقر على الزر عرض مصدر البيانات:

عرض مصدر البيانات

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

الرسم البياني لسلسلة نقاط النهاية

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

7. مقارنة عمليات تنفيذ خطوط البيانات

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

مقارنة عمليات التشغيل في واجهة مستخدم Pipelines

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

مقارنة عمليات التشغيل

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

مقاييس المقارنة

يمكنك استخدام وظيفة واجهة المستخدم هذه لمقارنة أكثر من عمليتَي تشغيل، وحتى عمليات تشغيل من مسارات مختلفة.

مقارنة عمليات التشغيل باستخدام حزمة تطوير البرامج (SDK) الخاصة بمنصة Vertex AI

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

يمكنك استخدام طريقة aiplatform.get_pipeline_df() للوصول إلى البيانات الوصفية لعملية التنفيذ. سنحصل هنا على البيانات الوصفية لآخر عمليتَي تشغيل لنفس مسار العرض وتحميلها إلى Pandas DataFrame. تشير المَعلمة pipeline هنا إلى الاسم الذي أطلقناه على مسار البيانات في تعريف مسار البيانات:

df = aiplatform.get_pipeline_df(pipeline="mlmd-pipeline")
df

عند طباعة DataFrame، سيظهر لك ما يلي:

Pipeline metrics DataFrame

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

نفِّذ ما يلي في خلية جديدة في ورقة ملاحظات:

plt.plot(df["metric.dataset_size"], df["metric.accuracy"],label="Accuracy")
plt.title("Accuracy and dataset size")
plt.legend(loc=4)
plt.show()

ينبغي أن تظهر لك على النحو التالي:

الرسم البياني للبيانات الوصفية في Matplotlib

8. طلب مقاييس خط أنابيب

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

الحصول على جميع عناصر النموذج

للاستعلام عن العناصر بهذه الطريقة، سننشئ MetadataServiceClient:

API_ENDPOINT = "{}-aiplatform.googleapis.com".format(REGION)
metadata_client = aiplatform_v1.MetadataServiceClient(
  client_options={
      "api_endpoint": API_ENDPOINT
  }
)

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

MODEL_FILTER="schema_title = \"system.Model\""
artifact_request = aiplatform_v1.ListArtifactsRequest(
    parent="projects/{0}/locations/{1}/metadataStores/default".format(PROJECT_ID, REGION),
    filter=MODEL_FILTER
)
model_artifacts = metadata_client.list_artifacts(artifact_request)

تحتوي استجابة model_artifacts الناتجة على عنصر قابل للتكرار لكل عنصر نموذج في مشروعك، بالإضافة إلى البيانات الوصفية المرتبطة بكل نموذج.

فلترة العناصر وعرضها في DataFrame

سيكون من المفيد أن نتمكّن من عرض طلب البيانات الناتج بسهولة أكبر. بعد ذلك، لنحصل على جميع العناصر التي تم إنشاؤها بعد 10 أغسطس 2021 بالحالة LIVE. بعد تنفيذ هذا الطلب، سنعرض النتائج في Pandas DataFrame. أولاً، نفِّذ الطلب:

LIVE_FILTER = "create_time > \"2021-08-10T00:00:00-00:00\" AND state = LIVE"
artifact_req = {
    "parent": "projects/{0}/locations/{1}/metadataStores/default".format(PROJECT_ID, REGION),
    "filter": LIVE_FILTER
}
live_artifacts = metadata_client.list_artifacts(artifact_req)

بعد ذلك، اعرض النتائج في DataFrame:

data = {'uri': [], 'createTime': [], 'type': []}

for i in live_artifacts:
    data['uri'].append(i.uri)
    data['createTime'].append(i.create_time)
    data['type'].append(i.schema_title)

df = pd.DataFrame.from_dict(data)
df

سيظهر لك شيء مثل ما يلي:

إطار بيانات العناصر المصفّى

يمكنك أيضًا فلترة العناصر الفنية استنادًا إلى معايير أخرى بالإضافة إلى ما جرّبته هنا.

بهذا تكون قد انتهيت من الدرس التطبيقي.

🎉 تهانينا! 🎉

تعرّفت على كيفية استخدام Vertex AI من أجل:

  • استخدِم حزمة تطوير البرامج (SDK) الخاصة بـ Kubeflow Pipelines لإنشاء مسار تعلُّم آلة ينشئ مجموعة بيانات في Vertex AI، ويدرّب نموذج Scikit-learn مخصّصًا وينشره على مجموعة البيانات هذه.
  • كتابة مكوّنات مخصّصة لخطوط الأنابيب تنشئ عناصر وبيانات وصفية
  • مقارنة عمليات تشغيل Vertex Pipelines، سواء في Cloud Console أو آليًا
  • تتبُّع مصدر عناصر البنية الأساسية التي تم إنشاؤها بواسطة خط الأنابيب
  • طلب البحث عن البيانات الوصفية لتشغيل خط الأنابيب

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

9- تنظيف

لتجنُّب تحصيل الرسوم منك، ننصحك بحذف الموارد التي تم إنشاؤها خلال هذا الدرس العملي.

إيقاف مثيل Notebooks أو حذفه

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

إيقاف الجهاز الافتراضي

حذف نقاط نهاية Vertex AI

لحذف نقطة النهاية التي نشرتها، انتقِل إلى قسم نقاط النهاية في وحدة تحكّم Vertex AI وانقر على رمز الحذف:

حذف نقطة النهاية

حذف حزمة Cloud Storage

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

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