استفاده از متادیتا Vertex ML با خطوط لوله

۱. مرور کلی

در این آزمایش، شما یاد خواهید گرفت که چگونه با استفاده از Vertex ML Metadata، فراداده‌های حاصل از اجرای Vertex Pipelines خود را تجزیه و تحلیل کنید.

آنچه یاد می‌گیرید

شما یاد خواهید گرفت که چگونه:

  • از Kubeflow Pipelines SDK برای ساخت یک خط لوله یادگیری ماشین استفاده کنید که یک مجموعه داده در Vertex AI ایجاد می‌کند و یک مدل سفارشی Scikit-learn را روی آن مجموعه داده آموزش داده و مستقر می‌کند.
  • نوشتن کامپوننت‌های خط لوله سفارشی که مصنوعات و فراداده تولید می‌کنند
  • مقایسه‌ی اجراهای Vertex Pipelines، هم در کنسول Cloud و هم به صورت برنامه‌نویسی
  • ردیابی تبار مصنوعات تولید شده توسط خط لوله
  • فراداده‌های اجرای خط لوله خود را جستجو کنید

هزینه کل اجرای این آزمایشگاه در گوگل کلود حدود ۲ دلار است.

۲. مقدمه‌ای بر هوش مصنوعی ورتکس

این آزمایشگاه از جدیدترین محصول هوش مصنوعی موجود در Google Cloud استفاده می‌کند. Vertex AI، محصولات یادگیری ماشین را در سراسر Google Cloud در یک تجربه توسعه یکپارچه ادغام می‌کند. پیش از این، مدل‌های آموزش‌دیده با AutoML و مدل‌های سفارشی از طریق سرویس‌های جداگانه قابل دسترسی بودند. این محصول جدید، هر دو را در یک API واحد، به همراه سایر محصولات جدید، ترکیب می‌کند. همچنین می‌توانید پروژه‌های موجود را به Vertex AI منتقل کنید.

علاوه بر خدمات آموزش و استقرار مدل، Vertex AI شامل انواع محصولات MLOps از جمله Vertex Pipelines، ML Metadata، Model Monitoring، Feature Store و موارد دیگر نیز می‌شود. می‌توانید تمام محصولات Vertex AI را در نمودار زیر مشاهده کنید.

بررسی اجمالی محصولات ورتکس

این آزمایشگاه بر روی Vertex Pipelines و Vertex ML Metadata تمرکز دارد.

اگر در مورد هوش مصنوعی Vertex بازخوردی دارید، لطفاً به صفحه پشتیبانی مراجعه کنید.

چرا خطوط لوله ML مفید هستند؟

قبل از اینکه وارد بحث شویم، ابتدا بیایید بفهمیم که چرا باید از یک خط لوله استفاده کنید. تصور کنید که در حال ساخت یک گردش کار یادگیری ماشین هستید که شامل پردازش داده‌ها، آموزش یک مدل، تنظیم هایپرپارامتر، ارزیابی و استقرار مدل است. هر یک از این مراحل ممکن است وابستگی‌های متفاوتی داشته باشند که اگر کل گردش کار را به عنوان یک سیستم یکپارچه در نظر بگیرید، ممکن است دشوار شود. همانطور که شروع به مقیاس‌بندی فرآیند یادگیری ماشین خود می‌کنید، ممکن است بخواهید گردش کار یادگیری ماشین خود را با سایر اعضای تیم خود به اشتراک بگذارید تا آنها بتوانند آن را اجرا کرده و کد ارائه دهند. بدون یک فرآیند قابل اعتماد و قابل تکرار، این کار می‌تواند دشوار شود. با خطوط لوله، هر مرحله در فرآیند یادگیری ماشین شما، کانتینر مخصوص به خود را دارد. این به شما امکان می‌دهد مراحل را به طور مستقل توسعه دهید و ورودی و خروجی هر مرحله را به روشی قابل تکرار پیگیری کنید. همچنین می‌توانید اجرای خط لوله خود را بر اساس سایر رویدادهای محیط ابری خود، مانند شروع اجرای خط لوله در صورت وجود داده‌های آموزشی جدید، برنامه‌ریزی یا فعال کنید.

خطوط لوله tl;dr : به شما کمک می‌کنند تا گردش کار یادگیری ماشین خود را خودکار و بازتولید کنید .

۳. راه‌اندازی محیط ابری

برای اجرای این codelab به یک پروژه Google Cloud Platform با قابلیت پرداخت صورتحساب نیاز دارید. برای ایجاد یک پروژه، دستورالعمل‌های اینجا را دنبال کنید.

شروع پوسته ابری

در این آزمایش، شما در یک جلسه Cloud Shell کار خواهید کرد، که یک مفسر فرمان است که توسط یک ماشین مجازی که در فضای ابری گوگل اجرا می‌شود، میزبانی می‌شود. شما می‌توانید به راحتی این بخش را به صورت محلی روی رایانه خود اجرا کنید، اما استفاده از Cloud Shell به همه امکان دسترسی به یک تجربه قابل تکرار در یک محیط سازگار را می‌دهد. پس از آزمایش، می‌توانید این بخش را دوباره روی رایانه خود امتحان کنید.

مجوزدهی پوسته ابری

فعال کردن پوسته ابری

از بالا سمت راست کنسول ابری، روی دکمه زیر کلیک کنید تا Cloud Shell فعال شود :

فعال کردن پوسته ابری

اگر قبلاً Cloud Shell را شروع نکرده‌اید، یک صفحه میانی (در پایین صفحه) به شما نمایش داده می‌شود که توضیح می‌دهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:

راه اندازی پوسته ابری

آماده‌سازی و اتصال به Cloud Shell فقط چند لحظه طول می‌کشد.

آغازگر Cloud Shell

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما پر شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. بخش عمده‌ای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را می‌توان به سادگی با یک مرورگر یا کروم‌بوک انجام داد.

پس از اتصال به 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 که شامل نام پروژه ابری فعلی ما است. ما از این در جاهای مختلف این تمرین استفاده خواهیم کرد. می‌توانید با اجرای دستور زیر آن را مشاهده کنید:

echo $GOOGLE_CLOUD_PROJECT

فعال کردن APIها

در مراحل بعدی، خواهید دید که این سرویس‌ها کجا مورد نیاز هستند (و چرا)، اما فعلاً این دستور را اجرا کنید تا به پروژه خود دسترسی به سرویس‌های 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.

یک سطل ذخیره‌سازی ابری ایجاد کنید

برای اجرای یک کار آموزشی در 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

یک نمونه از میز کار Vertex AI ایجاد کنید

از بخش Vertex AI در کنسول ابری خود، روی Workbench کلیک کنید:

منوی هوش مصنوعی ورتکس

از آنجا، در دفترچه‌های مدیریت‌شده توسط کاربر ، روی دفترچه یادداشت جدید کلیک کنید:

ایجاد دفترچه یادداشت جدید

سپس نوع نمونه TensorFlow Enterprise 2.3 (with LTS) را بدون GPU انتخاب کنید:

نمونه TFE

از گزینه‌های پیش‌فرض استفاده کنید و سپس روی «ایجاد» کلیک کنید.

دفترچه یادداشت خود را باز کنید

پس از ایجاد نمونه، گزینه Open JupyterLab را انتخاب کنید:

دفترچه یادداشت را باز کنید

۴. تنظیمات Vertex Pipelines

برای استفاده از Vertex Pipelines باید چند کتابخانه اضافی نصب کنیم:

  • Kubeflow Pipelines : این SDK است که ما برای ساخت pipeline خود استفاده خواهیم کرد. Vertex Pipelines از اجرای pipelineهای ساخته شده با Kubeflow Pipelines یا TFX پشتیبانی می‌کند.
  • کیت توسعه نرم‌افزار Vertex AI : این کیت توسعه نرم‌افزار، تجربه فراخوانی API مربوط به Vertex AI را بهینه می‌کند. ما از آن برای اجرای pipeline خود روی Vertex AI استفاده خواهیم کرد.

ایجاد دفترچه یادداشت پایتون و نصب کتابخانه‌ها

ابتدا، از منوی Launcher در نمونه Notebook خود، با انتخاب Python 3 یک Notebook ایجاد کنید:

ایجاد دفترچه یادداشت پایتون ۳

برای نصب هر دو سرویسی که در این آزمایش استفاده خواهیم کرد، ابتدا پرچم کاربر را در یک سلول نوت‌بوک تنظیم کنید:

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)

سپس، بررسی کنید که نسخه KFP SDK را به درستی نصب کرده‌اید. باید >=1.8 باشد:

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

سپس تأیید کنید که نسخه Vertex AI SDK شما >= 1.6.2 است:

!pip list | grep aiplatform

شناسه و سطل پروژه خود را تنظیم کنید

در طول این آزمایش، شما به شناسه پروژه ابری خود و باکتی که قبلاً ایجاد کرده‌اید، ارجاع خواهید داد. در مرحله بعد، برای هر یک از آنها متغیرهایی ایجاد خواهیم کرد.

اگر شناسه پروژه خود را نمی‌دانید، می‌توانید با اجرای دستور زیر آن را بدست آورید:

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 باید انجام دهیم، تعریف چند متغیر ثابت است. PIPELINE_ROOT مسیر ذخیره‌سازی ابری است که مصنوعات ایجاد شده توسط pipeline ما در آن نوشته می‌شوند. ما در اینجا us-central1 به عنوان منطقه استفاده می‌کنیم، اما اگر هنگام ایجاد bucket خود از منطقه دیگری استفاده کرده‌اید، متغیر REGION را در کد زیر به‌روزرسانی کنید:

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

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

پس از اجرای کد بالا، باید دایرکتوری ریشه خط لوله خود را مشاهده کنید. این مکان ذخیره‌سازی ابری است که مصنوعات خط لوله شما در آن نوشته خواهد شد. این فرمت به صورت gs://YOUR-BUCKET-NAME/pipeline_root/ خواهد بود.

۵. ایجاد یک خط تولید سه مرحله‌ای با اجزای سفارشی

تمرکز این آزمایش بر درک فراداده از اجرای خطوط لوله است. برای انجام این کار، به یک خط لوله نیاز داریم که روی خطوط لوله Vertex اجرا شود، که از آنجا شروع خواهیم کرد. در اینجا یک خط لوله 3 مرحله‌ای با اجزای سفارشی زیر تعریف خواهیم کرد:

  • get_dataframe : داده‌ها را از یک جدول BigQuery بازیابی کرده و آن را به یک DataFrame در Pandas تبدیل می‌کند.
  • train_sklearn_model : از قاب داده Pandas برای آموزش و خروجی گرفتن از یک مدل Scikit Learn به همراه برخی معیارها استفاده می‌کند.
  • deploy_model : مدل Scikit Learn اکسپورت شده را در یک نقطه پایانی در Vertex AI مستقر می‌کند.

در این مسیر، ما از مجموعه داده‌های لوبیای خشک یادگیری ماشینی UCI، از: KOKLU, M. و OZKAN, IA، (2020)، "طبقه‌بندی چندکلاسه لوبیای خشک با استفاده از تکنیک‌های بینایی کامپیوتر و یادگیری ماشین". در Computers and Electronics in Agriculture، 174، 105507. DOI استفاده خواهیم کرد.

این یک مجموعه داده جدولی است و در خط تولید خود از این مجموعه داده برای آموزش، ارزیابی و استقرار یک مدل Scikit-learn استفاده خواهیم کرد که لوبیاها را بر اساس ویژگی‌هایشان به یکی از 7 نوع طبقه‌بندی می‌کند. بیایید کدنویسی را شروع کنیم!

ایجاد کامپوننت‌های مبتنی بر تابع پایتون

با استفاده از 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 این تابع را هنگام اجرای pipeline به یک کامپوننت کامپایل می‌کند. شما می‌توانید هر زمان که یک کامپوننت سفارشی می‌نویسید از این استفاده کنید.
  • پارامتر base_image تصویر کانتینری را که این کامپوننت استفاده خواهد کرد، مشخص می‌کند.
  • این کامپوننت از چند کتابخانه پایتون استفاده خواهد کرد که ما آنها را از طریق پارامتر 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 برای دانلود داده‌های ما از BigQuery به یک DataFrame در Pandas استفاده می‌کند و سپس یک خروجی مصنوعی از آن داده‌ها به عنوان یک فایل CSV ایجاد می‌کند. این خروجی به عنوان ورودی به کامپوننت بعدی ما ارسال خواهد شد.

ایجاد یک کامپوننت برای آموزش مدل Scikit-learn

در این کامپوننت، 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

در اینجا ما از Vertex AI SDK برای آپلود مدل با استفاده از یک کانتینر از پیش ساخته شده برای پیش‌بینی استفاده می‌کنیم. سپس مدل را در یک نقطه پایانی مستقر می‌کند و 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 ایجاد می‌کند که برای اجرای pipeline از آن استفاده خواهید کرد:

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 که می‌خواهیم برای داده‌های آموزشی استفاده کنیم. این اجرای خط لوله از نسخه کوچک‌تری از مجموعه داده‌های beans استفاده خواهد کرد:

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 مشاهده خواهید کرد. برای مشاهده جزئیات بیشتر در مورد خط لوله خود، آن لینک را باز کنید:

آدرس اینترنتی اجرای خط لوله

وقتی کامل شد (این خط لوله حدود ۱۰ تا ۱۵ دقیقه در هر اجرا طول می‌کشد)، چیزی شبیه به این خواهید دید:

خط لوله sklearn تکمیل شده است

اکنون که دو اجرای خط لوله تکمیل شده دارید، آماده‌اید تا نگاهی دقیق‌تر به مصنوعات، معیارها و تبار خط لوله بیندازید.

۶. درک مصنوعات و تبارشناسی خط لوله

در نمودار خط لوله خود، بعد از هر مرحله متوجه کادرهای کوچکی خواهید شد. اینها مصنوعات یا خروجی تولید شده از یک مرحله خط لوله هستند. انواع مختلفی از مصنوعات وجود دارد. در این خط لوله خاص، مصنوعات مجموعه داده، معیارها، مدل و نقطه پایانی داریم. برای مشاهده جزئیات بیشتر در مورد هر یک، روی نوار لغزنده Expand Artifacts در بالای رابط کاربری کلیک کنید:

گسترش مصنوعات

کلیک روی یک مصنوع، جزئیات بیشتری از جمله URI آن را به شما نشان می‌دهد. برای مثال، کلیک روی مصنوع vertex_endpoint ، URI را که می‌توانید آن نقطه پایانی مستقر شده را در کنسول Vertex AI خود پیدا کنید، به شما نشان می‌دهد:

جزئیات مصنوع نقطه پایانی

یک مصنوع Metrics به شما امکان می‌دهد معیارهای سفارشی مرتبط با یک مرحله خاص از خط لوله را ارسال کنید. در کامپوننت sklearn_train از خط لوله ما، معیارهای مربوط به دقت مدل، چارچوب و اندازه مجموعه داده خود را ثبت کرده‌ایم. برای مشاهده این جزئیات، روی مصنوع معیارها کلیک کنید:

معیارهای مدل

هر مصنوع دارای Lineage است که سایر مصنوعاتی را که به آن متصل است توصیف می‌کند. دوباره روی مصنوع vertex_endpoint خط لوله خود کلیک کنید و سپس روی دکمه View Lineage کلیک کنید:

نمایش دودمان

این یک برگه جدید باز می‌کند که در آن می‌توانید تمام مصنوعات مرتبط با مصنوع انتخابی خود را مشاهده کنید. نمودار دودمان شما چیزی شبیه به این خواهد بود:

نمودار دودمان نقطه پایانی

این به ما مدل، معیارها و مجموعه داده‌های مرتبط با این نقطه پایانی را نشان می‌دهد. چرا این مفید است؟ ممکن است مدلی را در چندین نقطه پایانی مستقر کرده باشید، یا نیاز داشته باشید مجموعه داده خاصی را که برای آموزش مدل مستقر در نقطه پایانی مورد نظر شما استفاده شده است، بدانید. نمودار دودمان به شما کمک می‌کند تا هر مصنوع را در متن بقیه سیستم یادگیری ماشینی خود درک کنید. همچنین می‌توانید به صورت برنامه‌نویسی به دودمان دسترسی داشته باشید، همانطور که بعداً در این آزمایشگاه کد خواهیم دید.

۷. مقایسه مسیرهای خط لوله

احتمالاً یک خط لوله واحد چندین بار اجرا خواهد شد، شاید با پارامترهای ورودی مختلف، داده‌های جدید یا توسط افراد مختلف در تیم شما. برای پیگیری اجرای خط لوله، داشتن راهی برای مقایسه آنها بر اساس معیارهای مختلف مفید خواهد بود. در این بخش دو روش برای مقایسه اجراها را بررسی خواهیم کرد.

مقایسه اجراها در رابط کاربری Pipelines

در کنسول Cloud، به داشبورد Pipelines خود بروید. این داشبورد، نمای کلی از هر اجرای Pipeline که اجرا کرده‌اید را ارائه می‌دهد. دو اجرای آخر را بررسی کنید و سپس روی دکمه Compare در بالا کلیک کنید:

مقایسه اجراها

این ما را به صفحه‌ای می‌برد که می‌توانیم پارامترها و معیارهای ورودی را برای هر یک از اجراهایی که انتخاب کرده‌ایم مقایسه کنیم. برای این دو اجرا، به جداول، اندازه مجموعه داده‌ها و مقادیر دقت متفاوت BigQuery توجه کنید:

معیارهای مقایسه

شما می‌توانید از این قابلیت رابط کاربری برای مقایسه بیش از دو اجرا و حتی اجراهای مربوط به خطوط لوله مختلف استفاده کنید.

مقایسه اجراها با Vertex AI SDK

با اجرای زیاد پایپ‌لاین‌ها، ممکن است بخواهید راهی برای دریافت این معیارهای مقایسه به صورت برنامه‌نویسی‌شده داشته باشید تا بتوانید جزئیات معیارها را عمیق‌تر بررسی کرده و تجسم‌هایی ایجاد کنید.

شما می‌توانید از متد aiplatform.get_pipeline_df() برای دسترسی به متادیتای اجرا استفاده کنید. در اینجا، ما متادیتای دو اجرای آخر یک خط لوله را دریافت کرده و آن را در یک قاب داده Pandas بارگذاری می‌کنیم. پارامتر pipeline در اینجا به نامی اشاره دارد که ما در تعریف خط لوله خود به آن داده‌ایم:

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

وقتی DataFrame را چاپ می‌کنید، چیزی شبیه به این خواهید دید:

معیارهای خط لوله DataFrame

ما اینجا فقط دو بار خط لوله خود را اجرا کرده‌ایم، اما می‌توانید تصور کنید که با اجراهای بیشتر چه تعداد معیار خواهید داشت. در مرحله بعد، یک تجسم سفارشی با matplotlib ایجاد خواهیم کرد تا رابطه بین دقت مدل و میزان داده‌های مورد استفاده برای آموزش را ببینیم.

دستور زیر را در یک سلول نوت‌بوک جدید اجرا کنید:

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

شما باید چیزی شبیه به این را ببینید:

نمودار فراداده Matplotlib

۸. جستجوی معیارهای خط لوله

علاوه بر دریافت یک DataFrame از تمام معیارهای خط لوله، ممکن است بخواهید به صورت برنامه‌نویسی، مصنوعات ایجاد شده در سیستم ML خود را جستجو کنید. از آنجا می‌توانید یک داشبورد سفارشی ایجاد کنید یا به دیگران در سازمان خود اجازه دهید جزئیات مربوط به مصنوعات خاص را دریافت کنند.

دریافت تمام مصنوعات مدل

برای پرس‌وجو از مصنوعات به این روش، یک 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 نمایش خواهیم داد. ابتدا، درخواست را اجرا کنید:

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 SDK برای ساخت یک خط لوله یادگیری ماشین استفاده کنید که یک مجموعه داده در Vertex AI ایجاد می‌کند و یک مدل سفارشی Scikit-learn را روی آن مجموعه داده آموزش داده و مستقر می‌کند.
  • نوشتن کامپوننت‌های خط لوله سفارشی که مصنوعات و فراداده تولید می‌کنند
  • مقایسه‌ی اجراهای Vertex Pipelines، هم در کنسول Cloud و هم به صورت برنامه‌نویسی
  • ردیابی تبار مصنوعات تولید شده توسط خط لوله
  • فراداده‌های اجرای خط لوله خود را جستجو کنید

برای کسب اطلاعات بیشتر در مورد بخش‌های مختلف Vertex، مستندات آن را بررسی کنید.

۹. پاکسازی

برای اینکه هزینه‌ای از شما کسر نشود، توصیه می‌شود منابع ایجاد شده در طول این آزمایش را حذف کنید.

نمونه Notebooks خود را متوقف یا حذف کنید

اگر می‌خواهید به استفاده از دفترچه یادداشتی که در این آزمایش ایجاد کرده‌اید ادامه دهید، توصیه می‌شود در صورت عدم استفاده آن را خاموش کنید. از رابط کاربری دفترچه یادداشت‌ها در کنسول ابری خود، دفترچه یادداشت را انتخاب کرده و سپس توقف را انتخاب کنید. اگر می‌خواهید نمونه را به طور کامل حذف کنید، حذف را انتخاب کنید:

مثال را متوقف کنید

نقاط پایانی Vertex AI خود را حذف کنید

برای حذف نقطه پایانی که مستقر کرده‌اید، به بخش نقاط پایانی کنسول Vertex AI خود بروید و روی نماد حذف کلیک کنید:

حذف نقطه پایانی

سطل ذخیره‌سازی ابری خود را حذف کنید

برای حذف Storage Bucket، با استفاده از منوی ناوبری در Cloud Console خود، به Storage بروید، Bucket خود را انتخاب کنید و روی Delete کلیک کنید:

حذف فضای ذخیره‌سازی