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

1. نظرة عامة

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

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

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

  • استخدام حزمة تطوير البرامج لمنصة Kubeflow Pipelines لإنشاء مسارات تعلُّم الآلة قابلة للتوسّع
  • إنشاء ووضع مهمة تدريب نموذج Scikit-learn مخصّصة في حاوية تستخدِم مجموعات بيانات مُدارة في Vertex AI، وسيتم تشغيلها في "تدريب Vertex AI" ضمن مسار عمل
  • تنفيذ وظيفة توقّعات مجمّعة ضمن 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

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

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

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

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

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

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

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 Pipeline: توفّر هذه المكتبة مكوّنات مُعدّة مسبقًا تسهّل التفاعل مع خدمات Vertex AI من خطوات مسار الإحالة الناجحة.

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

أولاً، من قائمة "مشغّل التطبيقات" في مثيل "دفتر ملاحظات Google" (يمكنك الوصول إليه بالنقر على رمز + في أعلى يمين دفتر الملاحظات)، أنشئ دفتر ملاحظات من خلال اختيار 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: ضبط رقم تعريف المشروع والحزمة

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

الخطوة 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)، "تصنيف متعدد الفئات للفاصوليا الجافة باستخدام تقنيات الرؤية الحاسوبية والتعلم الآلي"، في Computers and Electronics in Agriculture، 174، 105507. DOI.

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

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

  • كتابة نموذج ساي كيت ليرن DecisionTreeClassifier لتصنيف أنواع الحبوب في البيانات
  • حزِّم رمز التدريب في حاوية Docker وادفعه إلى "مستودع الحاويات".

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

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

من مثيل "دفاتر ملاحظات Google"، افتح مشغّل التطبيقات واختَر 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، وتدريب نموذج ساي كيت ليرن، وتحميل النموذج المُدرَّب إلى 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: دفع الحاوية إلى "قاعدة بيانات حاويات Docker"

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

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

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

ستظهر لك مجموعة البيانات في 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 لإجراء ما يلي:

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

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

9. تنظيف

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

الخطوة 1: إيقاف أو حذف نسخة "دفاتر ملاحظات Google"

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

إيقاف المثيل

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

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

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