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

1. نظرة عامة

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

ما ستتعلمه

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

  • استخدام Kubeflow Pipelines SDK لإنشاء خطوط أنابيب قابلة للتوسيع خاصة بتعلُّم الآلة
  • إنشاء مهمة مخصّصة لتدريب نموذج Scikit-learn وتضمينها في حاوية تستخدم مجموعات البيانات المُدارة في Vertex AI، وسيتم تنفيذها على Vertex AI Training ضمن مسار
  • تنفيذ مهمة توقّع مجمّع ضِمن Vertex Pipelines
  • استخدام مكوّنات مُنشأة مسبقًا للتفاعل مع خدمات Vertex AI، والتي يتم توفيرها من خلال مكتبة google_cloud_pipeline_components

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

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

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

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

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

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

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

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

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

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

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

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

تفويض Cloud Shell

تفعيل Cloud Shell

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

تفعيل Cloud Shell

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

إعداد Cloud Shell

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

Cloud Shell init

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

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

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

gcloud auth list

من المفترض أن يظهر لك ما يلي في ناتج الأمر:

ناتج Cloud Shell

نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك:

gcloud config list project

ناتج الأمر

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

ناتج الأمر

Updated property [core/project].

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

echo $GOOGLE_CLOUD_PROJECT

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

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

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

من المفترض أن يؤدي ذلك إلى ظهور رسالة نجاح مشابهة لما يلي:

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

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

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

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

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

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

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

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

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

قائمة Vertex AI

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

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

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

مثيل TFE

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

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

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

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

4. إعداد Vertex Pipelines

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

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

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

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

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

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

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

USER_FLAG = "--user"

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

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

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

import os

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

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

أخيرًا، تأكَّد من تثبيت الحِزم بشكل صحيح. يجب أن يكون إصدار حزمة تطوير البرامج (SDK) لمنصة KFP‏ 1.8 أو أحدث:

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

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

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

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

import os
PROJECT_ID = ""

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

ويمكنك ضبطها هنا:

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

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

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

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

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

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

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

الخطوة 4: تحديد الثوابت

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

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

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

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

5- ضبط مهمة تدريب نموذج مخصّص

قبل إعداد مسار التعلّم، علينا كتابة الرمز لوظيفة تدريب النموذج المخصّص. لتدريب النموذج، سنستخدم مجموعة بيانات الفاصوليا الجافة من UCI 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

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

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

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

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

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

من مثيل Notebooks، افتح "مشغّل التطبيقات" (Launcher) وانقر على "نافذة الأوامر" (Terminal):

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

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

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

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

+ Dockerfile
+ trainer/
    + train.py

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

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

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

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

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

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

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

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

import os
import pandas as pd

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

بعد ذلك، أنشئ الحاوية من خلال تنفيذ ما يلي:

docker build ./ -t $IMAGE_URI

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

docker push $IMAGE_URI

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

Container Registry

6. ضبط مهمة توقّع مجمّعة

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

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

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

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

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

!gsutil cp batch_examples.csv $BUCKET_NAME

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

7. إنشاء مسار باستخدام مكوّنات مُعدّة مسبقًا

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

في ما يلي ما ستفعله عملية المعالجة المكوّنة من ثلاث خطوات:

  • إنشاء مجموعة بيانات مُدارة في Vertex AI
  • تنفيذ مهمة تدريب على Vertx AI باستخدام الحاوية المخصّصة التي أعددناها
  • تنفيذ مهمة توقّع مجمّعة على نموذج التصنيف الذي تم تدريبه باستخدام Scikit-learn

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

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

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

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

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

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

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

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

from datetime import datetime

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

بعد ذلك، حدِّد مهمة خط الإنتاج، مع إدخال بعض المَعلمات الخاصة بالمشروع:

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

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

pipeline_job.submit()

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

سجلات مهام خطوط الإنتاج

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

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

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

8. فهم تنفيذ مسار الإحالة الناجحة

لنتعرّف أكثر على كل خطوة من خطوات مسار التسويق الثلاث.

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

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

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

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

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

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

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

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

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

الخطوة 3 من مسار التعلّم: تنفيذ مهمة توقّع مجمّع على النموذج

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

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

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

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

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

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

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

🎉 تهانينا! 🎉

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

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

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

9- تنظيف

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

الخطوة 1: إيقاف مثيل Notebooks أو حذفه

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

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

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

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

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