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 Pipelines وVertex ML Metadata.
إذا كانت لديك أي ملاحظات بشأن Vertex AI، يُرجى الاطّلاع على صفحة الدعم.
ما هي فائدة قنوات تعلُّم الآلة؟
قبل أن نتعمق في، دعونا أولاً نفهم لماذا قد ترغب في استخدام أحد الأنابيب. لنفترض أنّك بصدد إنشاء سير عمل تعلُّم آلي يتضمّن معالجة البيانات وتدريب نموذج وضبط المَعلمات الفائقة والتقييم ونشر النموذج. قد يكون لكلّ خطوة من هذه الخطوات تبعيات مختلفة، وقد تصبح غير قابلة للاستخدام إذا عالجت سير العمل بالكامل كوحدة موحّدة. عند بدء توسيع نطاق عملية تعلُّم الآلة، قد تحتاج إلى مشاركة سير عمل تعلُّم الآلة مع الآخرين في فريقك حتى يتمكّنوا من تشغيله وتقديم مساهمات في الرموز البرمجية. ويمكن أن يصبح ذلك صعبًا بدون عملية موثوقة يمكن تكرارها. باستخدام المسارات، تكون كل خطوة في عملية تعلُّم الآلة هي حاويتها الخاصة. يتيح لك ذلك تطوير الخطوات بشكل مستقل وتتبُّع الإدخالات والمخرجات من كل خطوة بطريقة يمكن إعادة إنتاجها. يمكنك أيضًا جدولة عمليات تنفيذ مسار الإحالة الناجحة أو تشغيلها استنادًا إلى أحداث أخرى في بيئة Cloud، مثل بدء عملية تنفيذ مسار الإحالة الناجحة عند توفُّر بيانات تدريب جديدة.
الملخّص: تساعدك مسارات البيانات في تنفيذ عمليات سير عمل تعلُّم الآلة وإعادة إنتاجها.
3- إعداد بيئة السحابة الإلكترونية
ستحتاج إلى مشروع على Google Cloud Platform تم تفعيل ميزة الفوترة فيه لتشغيل هذا الدليل التعليمي. لإنشاء مشروع، اتّبِع التعليمات الواردة هنا.
بدء Cloud Shell
في هذا الدرس التطبيقي، ستستخدم جلسة Cloud Shell، وهي عبارة عن مترجم أوامر يستضيفه جهاز افتراضي يعمل في خدمات السحابة الإلكترونية من Google. يمكنك تنفيذ هذا القسم على جهاز الكمبيوتر الخاص بك بسهولة، ولكن باستخدام Cloud Shell، يمكن للجميع الوصول إلى تجربة قابلة للتكرار في بيئة متّسقة. بعد انتهاء التمرين المعملي، يمكنك إعادة محاولة استخدام هذا القسم على جهاز الكمبيوتر.
تفعيل Cloud Shell
في أعلى يسار Cloud Console، انقر على الزر أدناه لتفعيل 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:
من هناك، ضمن المذكرات المُدارة من المستخدِم، انقر على مذكرة جديدة:
بعد ذلك، اختَر نوع المثيل TensorFlow Enterprise 2.3 (مع قناة الدعم الطويل الأمد (LTS) بدون وحدات معالجة الرسومات:
استخدِم الخيارات التلقائية، ثم انقر على إنشاء.
فتح دفتر ملاحظاتك
بعد إنشاء المثيل، اختَر فتح 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:
لتثبيت كلتا الخدمتَين اللتين سنستخدمهما في هذا الدرس التطبيقي، عليك أولاً ضبط علامة المستخدم في خلية دفتر ملاحظات:
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 DataFrametrain_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. افتح هذا الرابط للاطّلاع على مزيد من التفاصيل حول مسار الإحالة الناجحة:
عند اكتمال العملية (تستغرق هذه العملية من 10 إلى 15 دقيقة في كل مرة)، سيظهر لك ما يلي:
بعد أن أكملت عمليتَي تشغيل لمسار الإحالة الناجحة، أصبحت مستعدًا للاطّلاع عن كثب على عناصر مسار الإحالة الناجحة ومقاييسه وسلسلة الإحالة الناجحة.
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 للانتقال إلى "مساحة التخزين"، واختَر الحزمة، ثم انقر على "حذف":