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

1. نظرة عامة

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

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

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

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

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

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

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

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

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

يركّز هذا التمرين على Vertex Pipelines والبيانات الوصفية لتعلُّم الآلة من Vertex.

إذا كان لديك أي ملاحظات بشأن 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

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

  • Kubeflow Pipelines: هي حزمة تطوير البرامج (SDK) التي سنستخدمها لتنفيذ هذه العملية. تتيح مسارات Vertex Pipelines تشغيل خطوط الأنابيب التي تم إنشاؤها باستخدام كل من خطوط Kubeflow Pipelines أو TFX.
  • Vertex AI SDK: تعمل حزمة SDK هذه على تحسين تجربة استدعاء 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__))"

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

!pip list | grep aiplatform

ضبط رقم تعريف مشروعك وحزمتك

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

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

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

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 لتدريب وتصدير نموذج ساي كيت ليرن، بالإضافة إلى بعض المقاييس
  • deploy_model: نشر نموذج Scikit Learn الذي تم تصديره إلى نقطة نهاية في Vertex AI

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

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

إنشاء مكونات مستندة إلى دوال بايثون

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

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

في هذا المكون سوف نأخذ ملف CSV الذي أنشأناه سابقًا ونستخدمه لتدريب نموذج شجرة القرار لمكتبة ساي كيت ليرن. يصدِّر هذا العنصر نموذج مكتبة ساي كيت ليرن الناتج مع أداة 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

نستخدم هنا حزمة تطوير برامج 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 لمسار الإحالة الناجحة مرة أخرى، ثم انقر على الزر عرض خط الإنتاج:

عرض النسب

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

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

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

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

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

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

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

مقارنة عمليات التنفيذ

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

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

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

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

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

يمكنك استخدام الطريقة aiplatform.get_pipeline_df() للوصول إلى البيانات الوصفية قيد التنفيذ. سنحصل هنا على البيانات الوصفية لآخر عملتين من نفس المسار ونحمّله في Pandas DataFrame. تشير مَعلمة 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. مقاييس مسار طلب البحث

بالإضافة إلى الحصول على 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 لإجراء ما يلي:

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

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

9. تنظيف

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

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

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

إيقاف المثيل

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

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

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

حذف حزمة Cloud Storage

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

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