اجرای آموزش مدل سفارشی بر روی خطوط لوله Vertex

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

در این آزمایشگاه، نحوه اجرای یک کار آموزشی مدل سفارشی با استفاده از Kubeflow Pipelines SDK در Vertex Pipelines را خواهید آموخت.

چیزی که یاد می گیرید

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

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

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

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

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

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

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

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

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

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

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

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

مرحله 1: 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

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

خروجی پوسته ابری

دستور زیر را در 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: 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.

مرحله 3: یک سطل ذخیره سازی ابری ایجاد کنید

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

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

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

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

نمونه TFE

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

مرحله 5: نوت بوک خود را باز کنید

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

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

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

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

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

مرحله 1: نوت بوک پایتون ایجاد کنید و کتابخانه ها را نصب کنید

ابتدا، از منوی Launcher در نمونه Notebook خود (که می توانید با کلیک بر روی نماد + در سمت چپ بالای نوت بوک خود به آن دسترسی پیدا کنید)، با انتخاب Python 3 یک نوت بوک ایجاد کنید:

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

با کلیک بر روی علامت + در سمت چپ بالای نمونه نوت بوک خود می توانید به منوی Launcher دسترسی پیدا کنید.

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

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)

در نهایت بررسی کنید که بسته ها را به درستی نصب کرده اید. نسخه KFP SDK باید >=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 و سطلی را که قبلا ایجاد کرده‌اید، ارجاع خواهید داد. در مرحله بعد برای هر یک از آنها متغیرهایی ایجاد می کنیم.

اگر 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"

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

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

اولین مرحله خط لوله ما یک مجموعه داده مدیریت شده در Vertex AI با استفاده از جدول BigQuery ایجاد می کند که حاوی نسخه ای از این داده های beans است. مجموعه داده به عنوان ورودی به کار آموزشی ما ارسال می شود. در کد آموزشی ما، برای دسترسی به این مجموعه داده مدیریت شده، به متغیر محیطی دسترسی خواهیم داشت.

در اینجا نحوه تنظیم کار آموزشی سفارشی خود آمده است:

  • یک مدل Scikit-learn DecisionTreeClassifier بنویسید تا انواع bean را در داده‌های ما طبقه‌بندی کند.
  • کد آموزشی را در یک ظرف Docker بسته بندی کنید و آن را به Container Registry فشار دهید

از آنجا، ما می‌توانیم یک کار آموزشی Vertex AI را مستقیماً از خط لوله خود شروع کنیم. بیایید شروع کنیم!

مرحله 1: کد آموزشی خود را در ظرف Docker تعریف کنید

از نمونه Notebooks خود، Launcher را باز کرده و Terminal را انتخاب کنید:

ترمینال را باز کنید

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

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

پس از اجرای این دستورات، باید دایرکتوری به نام traincontainer/ را در سمت چپ مشاهده کنید (ممکن است لازم باشد برای دیدن آن، روی نماد refresh کلیک کنید). موارد زیر را در دایرکتوری 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 را آموزش می دهد، و مدل آموزش دیده را در فضای ذخیره سازی ابری آپلود می کند:

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 از اسکریپت بالا کنید:

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 است و آماده اجرای آموزش در Cloud هستیم.

مرحله 2: کانتینر را به رجیستری کانتینر فشار دهید

با تکمیل کد آموزشی ما، آماده هستیم تا آن را به Google Container Registry ارسال کنیم. بعداً وقتی مولفه آموزشی خط لوله خود را پیکربندی می‌کنیم، Pipelines Vertex را به این ظرف نشان می‌دهیم.

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

رجیستری کانتینر

6. پیکربندی یک کار پیش بینی دسته ای

آخرین مرحله خط لوله ما یک کار پیش بینی دسته ای را اجرا می کند. برای این کار، باید یک فایل CSV در فضای ذخیره‌سازی ابری ارائه کنیم که حاوی نمونه‌هایی باشد که می‌خواهیم روی آن‌ها پیش‌بینی کنیم. ما این فایل CSV را در نوت بوک خود ایجاد می کنیم و با استفاده از ابزار خط فرمان gsutil آن را در فضای ذخیره سازی ابری کپی می کنیم.

کپی کردن نمونه‌های پیش‌بینی دسته‌ای در فضای ذخیره‌سازی ابری

فایل زیر شامل 3 نمونه از هر کلاس در مجموعه داده beans ما است. مثال زیر شامل ستون 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

سپس، فایل را در سطل فضای ذخیره سازی ابری خود کپی کنید:

!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()

پس از اجرای این سلول، باید گزارش هایی را با پیوندی برای مشاهده خط لوله اجرا شده در کنسول خود مشاهده کنید:

گزارش کار خط لوله

به آن لینک بروید. همچنین می توانید با باز کردن داشبورد Pipelines خود به آن دسترسی داشته باشید. خط لوله شما پس از تکمیل باید به این شکل باشد:

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

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

8. درک اجرای خط لوله شما

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

خط لوله مرحله 1: ایجاد یک مجموعه داده مدیریت شده

اولین مرحله در خط لوله ما یک مجموعه داده مدیریت شده در Vertex AI ایجاد می کند. اگر روی پیوند مجموعه داده زیر در بخش Pipelines کنسول خود کلیک کنید:

پیوند به مجموعه داده از خط لوله

مجموعه داده خود را در Vertex AI خواهید دید که شامل پیوندی به منبع داده در BigQuery به همراه اطلاعات ستون های مختلف در مجموعه داده شما می شود. هنگامی که یک مجموعه داده مدیریت شده را در Vertex AI آپلود کردید، می توان از آن برای آموزش یک مدل AutoML یا سفارشی استفاده کرد.

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

Pipeline مرحله 2: آموزش یک مدل در Vertex AI Training

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

سیاهههای مربوط به آموزش سفارشی

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

خط لوله مرحله 3: اجرای یک کار پیش بینی دسته ای در مدل ما

در نهایت، خط لوله ما پیش‌بینی‌هایی را در مورد نمونه‌هایی که از طریق یک فایل CSV ارسال کرده‌ایم دریافت می‌کند. وقتی کار پیش‌بینی دسته‌ای کامل شد، Vertex AI یک فایل CSV را در مکانی که در Cloud Storage مشخص کرده‌ایم می‌نویسد. وقتی این مرحله خط لوله شروع به اجرا کرد، می توانید به بخش پیش بینی دسته ای کنسول Vertex AI خود بروید تا کار ایجاد شده را ببینید.

پس از اتمام کار، روی آن کلیک کنید تا URL فضای ذخیره‌سازی ابری پیش‌بینی‌های دسته‌ای خود را ببینید:

کار پیش بینی دسته ای

روی آن پیوند کلیک کنید تا به دایرکتوری 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 SDK برای ساخت خطوط لوله انتها به انتها با اجزای سفارشی استفاده کنید
  • خطوط لوله خود را روی Vertex Pipelines اجرا کنید و اجرای خط لوله را با SDK شروع کنید
  • نمودار Vertex Pipelines خود را در کنسول مشاهده و تجزیه و تحلیل کنید
  • از اجزای خط لوله از پیش ساخته شده برای افزودن خدمات Vertex AI به خط لوله خود استفاده کنید
  • کارهای خط لوله مکرر را برنامه ریزی کنید

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

9. پاکسازی

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

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

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

توقف نمونه

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

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

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