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

1. بررسی اجمالی

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

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

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

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

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

2. مقدمه ای بر Vertex AI

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

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

نمای کلی محصول Vertex

این آزمایشگاه روی خطوط لوله Vertex و متادیتای Vertex ML تمرکز دارد.

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

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

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

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

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

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

Cloud Shell را راه اندازی کنید

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

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

Cloud Shell را فعال کنید

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

Cloud Shell را فعال کنید

اگر قبلاً Cloud Shell را راه‌اندازی نکرده‌اید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده می‌شود که آن را توصیف می‌کند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:

راه اندازی Cloud Shell

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

Cloud Shell init

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.

برای تایید احراز هویت، دستور زیر را در 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

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 Workbench ایجاد کنید

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

منوی Vertex AI

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

نوت بوک جدید ایجاد کنید

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

نمونه TFE

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

نوت بوک خود را باز کنید

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

نوت بوک را باز کنید

4. راه اندازی خطوط لوله ورتکس

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

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

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

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

نوت بوک Python3 ایجاد کنید

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

USER_FLAG = "--user"

سپس موارد زیر را از نوت بوک خود اجرا کنید:

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0
!pip3 install {USER_FLAG} kfp==1.8.9

پس از نصب این بسته ها، باید هسته را مجددا راه اندازی کنید:

import os

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

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

بعد، بررسی کنید که نسخه 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

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

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

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

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

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

5. ایجاد خط لوله 3 مرحله ای با اجزای سفارشی

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

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

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

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

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

با استفاده از KFP SDK، می توانیم اجزایی را بر اساس توابع پایتون ایجاد کنیم. ما از آن برای 3 جزء در این خط لوله استفاده خواهیم کرد.

داده های 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 تصویر محفظه ای را که این کامپوننت استفاده می کند مشخص می کند.
  • این کامپوننت از چند کتابخانه پایتون استفاده می‌کند که از طریق پارامتر packages_to_install مشخص می‌کنیم.
  • پارامتر output_component_file اختیاری است و فایل yaml را برای نوشتن جزء کامپایل شده مشخص می کند. پس از اجرای سلول، باید آن فایل را ببینید که در نمونه نوت بوک شما نوشته شده است. اگر می‌خواهید این مؤلفه را با کسی به اشتراک بگذارید، می‌توانید فایل yaml تولید شده را برای او ارسال کنید و از او بخواهید آن را با موارد زیر بارگذاری کند:
# This is optional, it shows how to load a component from a yaml file
# dataset_component = kfp.components.load_component_from_file('./create_dataset.yaml')
  • سپس، این کامپوننت از کتابخانه مشتری BigQuery Python برای دانلود داده‌های ما از BigQuery در یک Pandas DataFrame استفاده می‌کند و سپس یک مصنوع خروجی از آن داده‌ها را به عنوان یک فایل CSV ایجاد می‌کند. این به عنوان ورودی به مؤلفه بعدی ما ارسال می شود

یک مؤلفه برای آموزش یک مدل 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 ها را هم به مدل و هم به منابع نقطه پایانی برمی گرداند. بعداً در این Codelab اطلاعات بیشتری در مورد معنای بازگرداندن این داده ها به عنوان مصنوع خواهید آموخت.

خط لوله را تعریف و کامپایل کنید

اکنون که سه مؤلفه خود را تعریف کردیم، در مرحله بعد تعریف خط لوله خود را ایجاد می کنیم. این توضیح می‌دهد که چگونه مصنوعات ورودی و خروجی بین مراحل جریان می‌یابند:

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

URL اجرای خط لوله

هنگامی که کامل شد (این خط لوله در هر اجرا حدود 10-15 دقیقه طول می کشد)، چیزی شبیه به این خواهید دید:

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

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

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

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

مصنوعات را گسترش دهید

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

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

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

معیارهای مدل

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

نشان دادن نسب

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

نمودار خط پایان

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

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

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

مقایسه اجراها در Pipelines UI

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

اجراها را مقایسه کنید

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

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

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

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

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

می توانید از متد aiplatform.get_pipeline_df() برای دسترسی به ابرداده های اجرا شده استفاده کنید. در اینجا، ما متادیتا را برای دو اجرای آخر یک خط لوله دریافت می کنیم و آن را در یک Pandas DataFrame بارگذاری می کنیم. پارامتر 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

8. پرس و جو از معیارهای خط لوله

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

LIVE_FILTER = "create_time > \"2021-08-10T00:00:00-00:00\" AND state = LIVE"
artifact_req = {
    "parent": "projects/{0}/locations/{1}/metadataStores/default".format(PROJECT_ID, REGION),
    "filter": LIVE_FILTER
}
live_artifacts = metadata_client.list_artifacts(artifact_req)

سپس، نتایج را در یک DataFrame نمایش دهید:

data = {'uri': [], 'createTime': [], 'type': []}

for i in live_artifacts:
    data['uri'].append(i.uri)
    data['createTime'].append(i.create_time)
    data['type'].append(i.schema_title)

df = pd.DataFrame.from_dict(data)
df

چیزی شبیه به این را خواهید دید:

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

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

با آن، شما آزمایشگاه را به پایان رساندید!

🎉 تبریک می گویم! 🎉

شما یاد گرفته اید که چگونه از Vertex AI برای موارد زیر استفاده کنید:

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

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

9. پاکسازی

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

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

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

توقف نمونه

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

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

نقطه پایانی را حذف کنید

سطل Cloud Storage خود را حذف کنید

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

ذخیره سازی را حذف کنید