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

1. نظرة عامة

في هذا التمرين المعملي، ستتعرّف على كيفية تحليل البيانات الوصفية من عمليات تنفيذ مسارات Vertex باستخدام البيانات الوصفية لنموذج تعلُّم الآلة من Vertex.

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

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

  • استخدام حزمة تطوير البرامج (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 وبيانات تعريف تعلُّم الآلة ومراقبة النماذج وFeature Store والمزيد. يمكنك الاطّلاع على جميع عروض منتجات Vertex AI في المخطّط البياني أدناه.

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

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

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

ما هي فائدة قنوات تعلُّم الآلة؟

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

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

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

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

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

بعد ذلك، سنمنح حساب خدمة 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

إنشاء مثيل 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.
  • حزمة تطوير برامج Vertex AI: تعمل حزمة تطوير البرامج (SDK) هذه على تحسين تجربة طلب Vertex AI API. وسنستخدمها لتشغيل مسار الإحالة الناجحة على Vertex AI.

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

أولاً، من قائمة "مشغّل التطبيقات" في مثيل "دفتر ملاحظات Google"، أنشئ دفتر ملاحظات من خلال اختيار 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

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

خلال هذا التمرين، ستشير إلى رقم تعريف مشروعك على 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"

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

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

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، وهو ما سنبدأ به. سنحدّد هنا مسارًا مكوّنًا من 3 خطوات باستخدام المكوّنات المخصّصة التالية:

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

في هذه العملية، سنستخدم مجموعة بيانات الفول الجاف من UCI Machine Learning، من: KOKLU، M. وOZKAN، I.A.، (2020)، "تصنيف متعدد الفئات للفاصوليا الجافة باستخدام تقنيات الرؤية الحاسوبية والتعلم الآلي"، في Computers and Electronics in Agriculture، 174، 105507. DOI:

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

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

باستخدام حزمة KFP SDK، يمكننا إنشاء مكونات بناءً على وظائف بايثون. سنستخدمها للمكونات الثلاثة في هذا المسار.

تنزيل بيانات 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 client library لتنزيل بياناتنا من BigQuery إلى Pandas DataFrame، ثمّ ينشئ عنصر إخراج لهذه البيانات كملف CSV. سيتمّ تمريرها كمدخل إلى المكوّن التالي.

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

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

تحديد مسار الإحالة الناجحة وتجميعه

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

@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 وأحجام مجموعات البيانات وقيم الدقة:

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

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

مقارنة بين عمليات التشغيل باستخدام حزمة Vertex AI SDK

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

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

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

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

إطار بيانات مقاييس مسار البيانات

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

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

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

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

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

8. طلب مقاييس مسار الإحالة الناجحة

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

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

لاستعلام العناصر بهذه الطريقة، سننشئ 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 الناتجة عنصرًا قابلاً للتكرار لكل عنصر من عناصر النموذج في مشروعك، بالإضافة إلى البيانات الوصفية المرتبطة بكل نموذج.

فلترة الكائنات وعرضها في إطار بيانات

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

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 لتنفيذ ما يلي:

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

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

9. تنظيف

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

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

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

إيقاف المثيل

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

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

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

حذف حزمة Cloud Storage

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

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