از آزمایش حداکثر استفاده را ببرید: آزمایش‌های یادگیری ماشین را با Vertex AI مدیریت کنید

۱. مرور کلی

در این آزمایش، شما از Vertex AI برای ساخت یک خط لوله (pipeline) استفاده خواهید کرد که یک مدل Keras سفارشی را در TensorFlow آموزش می‌دهد. سپس از قابلیت‌های جدید موجود در Vertex AI Experiments برای ردیابی و مقایسه اجرای مدل‌ها استفاده خواهیم کرد تا مشخص کنیم کدام ترکیب از هایپرپارامترها بهترین عملکرد را ارائه می‌دهد.

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

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

  • یک مدل Keras سفارشی را برای پیش‌بینی رتبه‌بندی بازیکنان آموزش دهید (مثلاً رگرسیون)
  • استفاده از Kubeflow Pipelines SDK برای ساخت خطوط لوله یادگیری ماشینی مقیاس‌پذیر
  • یک خط لوله ۵ مرحله‌ای ایجاد و اجرا کنید که داده‌ها را از فضای ذخیره‌سازی ابری دریافت می‌کند، داده‌ها را مقیاس‌بندی می‌کند، مدل را آموزش می‌دهد، آن را ارزیابی می‌کند و مدل حاصل را دوباره در فضای ذخیره‌سازی ابری ذخیره می‌کند.
  • از فراداده‌های Vertex ML برای ذخیره مصنوعات مدل مانند مدل‌ها و معیارهای مدل استفاده کنید.
  • از آزمایش‌های هوش مصنوعی Vertex برای مقایسه نتایج اجرای خطوط لوله مختلف استفاده کنید.

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

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

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

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

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

۳. بررسی اجمالی موارد استفاده

ما از یک مجموعه داده محبوب فوتبال که از سری بازی‌های ویدیویی فیفا از شرکت EA Sports گرفته شده است، استفاده خواهیم کرد. این مجموعه شامل بیش از ۲۵۰۰۰ مسابقه فوتبال و بیش از ۱۰۰۰۰ بازیکن برای فصل‌های ۲۰۰۸ تا ۲۰۱۶ است. داده‌ها از قبل پیش‌پردازش شده‌اند تا بتوانید راحت‌تر شروع به کار کنید. شما در سراسر آزمایشگاه از این مجموعه داده که اکنون می‌توانید در یک فضای ذخیره‌سازی ابری عمومی پیدا کنید، استفاده خواهید کرد. جزئیات بیشتری در مورد نحوه دسترسی به این مجموعه داده بعداً در آزمایشگاه کد ارائه خواهیم داد. هدف نهایی ما پیش‌بینی رتبه کلی یک بازیکن بر اساس اقدامات مختلف در بازی مانند قطع توپ و پنالتی‌ها است.

چرا Vertex AI Experiments برای علم داده مفید است؟

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

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

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

خلاصه کلام: Vertex AI Experiments این کار را برای شما انجام می‌دهد و به شما کمک می‌کند تا آزمایش‌های خود را راحت‌تر پیگیری و مقایسه کنید.

چرا آزمایش‌های هوش مصنوعی ورتکس برای بازی؟

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

۴. محیط خود را آماده کنید

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

مرحله ۱: فعال کردن رابط برنامه‌نویسی کاربردی موتور محاسبات

به Compute Engine بروید و اگر از قبل فعال نیست، آن را فعال کنید .

مرحله 2: فعال کردن API هوش مصنوعی Vertex

به بخش Vertex AI در کنسول ابری خود بروید و روی Enable Vertex AI API کلیک کنید.

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

مرحله 3: یک نمونه Vertex AI Workbench ایجاد کنید

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

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

اگر API نوت‌بوک‌ها فعال نیست، آن را فعال کنید.

نوت‌بوک_آپی

پس از فعال کردن، روی «دفترچه‌های مدیریت‌شده» کلیک کنید:

رابط کاربری نوت‌بوک‌ها

سپس دفترچه یادداشت جدید را انتخاب کنید.

نوت بوک_جدید

برای نوت‌بوک خود یک نام انتخاب کنید و سپس روی تنظیمات پیشرفته (Advanced Settings) کلیک کنید.

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

در قسمت تنظیمات پیشرفته، خاموش شدن در حالت بیکاری را فعال کنید و تعداد دقیقه‌ها را روی ۶۰ تنظیم کنید. این یعنی نوت‌بوک شما در صورت عدم استفاده به طور خودکار خاموش می‌شود تا هزینه‌های غیرضروری متحمل نشوید.

idle_timeout

مرحله ۴: دفترچه یادداشت خود را باز کنید

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

open_jupyterlab

مرحله ۵: احراز هویت (فقط برای اولین بار)

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

احراز هویت کردن

مرحله ۶: انتخاب کرنل مناسب

Managed-notebooks چندین هسته را در یک رابط کاربری واحد ارائه می‌دهد. هسته Tensorflow 2 (محلی) را انتخاب کنید.

tensorflow_kernel

۵. مراحل اولیه راه‌اندازی در نوت‌بوک شما

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

مرحله ۱: نصب بسته‌های اضافی

ما نیاز به نصب بسته‌های وابسته‌ی اضافی داریم که در حال حاضر در محیط نوت‌بوک شما نصب نشده‌اند. به عنوان مثال، می‌توان به KFP SDK اشاره کرد.

!pip3 install --user --force-reinstall 'google-cloud-aiplatform>=1.15' -q --no-warn-conflicts
!pip3 install --user kfp -q --no-warn-conflicts

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

# Automatically restart kernel after installs
import os

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

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

مرحله ۲: تنظیم متغیرها

ما می‌خواهیم PROJECT_ID خود را تعریف کنیم. اگر Project_ID خود را نمی‌دانید، می‌توانید PROJECT_ID خود را با استفاده از gcloud بدست آورید.

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)

در غیر این صورت، PROJECT_ID خود را اینجا تنظیم کنید.

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

همچنین می‌خواهیم متغیر REGION را که در ادامه‌ی این یادداشت استفاده می‌شود، تنظیم کنیم. در زیر مناطقی که برای Vertex AI پشتیبانی می‌شوند، آمده است. توصیه می‌کنیم منطقه‌ای را که به شما نزدیک‌تر است انتخاب کنید.

  • قاره آمریکا: ایالات متحده-مرکزی1
  • اروپا: اروپا-غرب ۴
  • آسیا و اقیانوسیه: asia-east1

لطفاً برای آموزش با Vertex AI از یک باکت چند منطقه‌ای استفاده نکنید. همه مناطق از همه سرویس‌های Vertex AI پشتیبانی نمی‌کنند. درباره مناطق Vertex AI بیشتر بدانید.

#set your region 
REGION = "us-central1"  # @param {type: "string"}

در نهایت یک متغیر TIMESTAMP تنظیم خواهیم کرد. این متغیرها برای جلوگیری از تداخل نام بین کاربران در منابع ایجاد شده استفاده می‌شوند، شما برای هر جلسه نمونه یک TIMESTAMP ایجاد می‌کنید و آن را به نام منابعی که در این آموزش ایجاد می‌کنید، اضافه می‌کنید.

#set timestamp to avoid collisions between multiple users

from datetime import datetime

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

مرحله ۳: ایجاد یک فضای ذخیره‌سازی ابری

شما باید یک مخزن ذخیره‌سازی ابری (Cloud Storage staging bucket) را مشخص و از آن استفاده کنید. مخزن ذخیره‌سازی جایی است که تمام داده‌های مرتبط با مجموعه داده‌ها و منابع مدل شما در طول جلسات (session) حفظ می‌شوند.

نام سطل ذخیره‌سازی ابری خود را در زیر تنظیم کنید. نام سطل‌ها باید در تمام پروژه‌های Google Cloud، از جمله پروژه‌های خارج از سازمان شما، منحصر به فرد باشد.

#set cloud storage bucket 
BUCKET_NAME = "[insert bucket name here]"  # @param {type:"string"}
BUCKET_URI = f"gs://{BUCKET_NAME}"

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

! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI

سپس می‌توانید با اجرای سلول زیر، دسترسی به مخزن ذخیره‌سازی ابری خود را تأیید کنید.

#verify access 
! gsutil ls -al $BUCKET_URI

مرحله ۴: مجموعه داده‌های بازی ما را کپی کنید

همانطور که قبلاً اشاره شد، شما از یک مجموعه داده بازی محبوب از بازی‌های ویدیویی پرطرفدار EA Sports، یعنی FIFA، استفاده خواهید کرد. ما کار پیش‌پردازش را برای شما انجام داده‌ایم، بنابراین فقط کافی است مجموعه داده را از سطل ذخیره‌سازی عمومی کپی کرده و آن را به سطلی که ایجاد کرده‌اید منتقل کنید.

# copy the data over to your cloud storage bucket
DATASET_URI = "gs://cloud-samples-data/vertex-ai/structured_data/player_data" 

!gsutil cp -r $DATASET_URI $BUCKET_URI

مرحله ۵: وارد کردن کتابخانه‌ها و تعریف ثابت‌های اضافی

در مرحله بعد می‌خواهیم کتابخانه‌های Vertex AI، KFP و غیره را وارد کنیم.

import logging
import os
import time

logger = logging.getLogger("logger")
logging.basicConfig(level=logging.INFO)

import kfp.v2.compiler as compiler
# Pipeline Experiments
import kfp.v2.dsl as dsl
# Vertex AI
from google.cloud import aiplatform as vertex_ai
from kfp.v2.dsl import Artifact, Input, Metrics, Model, Output, component
from typing import NamedTuple

ما همچنین ثابت‌های اضافی را تعریف خواهیم کرد که در ادامه‌ی دفترچه یادداشت به آنها مراجعه خواهیم کرد، مانند مسیر(های) فایل داده‌های آموزشی.

#import libraries and define constants
# Experiments

TASK = "regression"
MODEL_TYPE = "tensorflow"
EXPERIMENT_NAME = f"{PROJECT_ID}-{TASK}-{MODEL_TYPE}-{TIMESTAMP}"

# Pipeline
PIPELINE_URI = f"{BUCKET_URI}/pipelines"
TRAIN_URI = f"{BUCKET_URI}/player_data/data.csv"
LABEL_URI = f"{BUCKET_URI}/player_data/labels.csv"
MODEL_URI = f"{BUCKET_URI}/model"
DISPLAY_NAME = "experiments-demo-gaming-data"
BQ_DATASET = "player_data"
BQ_LOCATION = "US"  
VIEW_NAME = 'dataset_test'
PIPELINE_JSON_PKG_PATH = "experiments_demo_gaming_data.json"
PIPELINE_ROOT = f"gs://{BUCKET_URI}/pipeline_root"

۶. بیایید خط تولید خود را بسازیم

حالا بخش جالب ماجرا شروع می‌شود و می‌توانیم از Vertex AI برای ساخت خط لوله آموزشی خود استفاده کنیم. ما Vertex AI SDK را مقداردهی اولیه می‌کنیم، کار آموزشی خود را به عنوان یک جزء خط لوله راه‌اندازی می‌کنیم، خط لوله خود را می‌سازیم، اجرای خط لوله خود را ارسال می‌کنیم و از Vertex AI SDK برای مشاهده آزمایش‌ها و نظارت بر وضعیت آنها استفاده می‌کنیم.

مرحله 1: مقداردهی اولیه Vertex AI SDK

Vertex AI SDK را مقداردهی اولیه کنید و PROJECT_ID و BUCKET_URI خود را تنظیم کنید.

#initialize vertex AI SDK 
vertex_ai.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)

مرحله 2: کار آموزشی خود را به عنوان یک جزء پایپ‌لاین راه‌اندازی کنید

برای شروع اجرای آزمایش‌هایمان، باید کار آموزشی خود را با تعریف آن به عنوان یک جزء خط لوله مشخص کنیم. خط لوله ما داده‌های آموزشی و ابرپارامترها (مثلاً DROPOUT_RATE ، LEARNING_RATE ، EPOCHS ) را به عنوان ورودی و معیارهای مدل خروجی (مثلاً MAE و RMSE ) و یک مصنوع مدل را دریافت می‌کند.

@component(
    packages_to_install=[
        "numpy==1.21.0",
        "pandas==1.3.5", 
        "scikit-learn==1.0.2",
        "tensorflow==2.9.0",
    ]
)
def custom_trainer(
    train_uri: str,
    label_uri: str,
    dropout_rate: float,
    learning_rate: float,
    epochs: int,
    model_uri: str,
    metrics: Output[Metrics], 
    model_metadata: Output[Model], 
    

):

    # import libraries
    import logging
    import uuid
    from pathlib import Path as path

    import pandas as pd
    import tensorflow as tf
    from tensorflow import keras
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.layers import Dropout
    from tensorflow.keras.metrics import Metric 
    from sklearn.metrics import accuracy_score
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_absolute_error
    import numpy as np
    from math import sqrt
    import os
    import tempfile

    # set variables and use gcsfuse to update prefixes
    gs_prefix = "gs://"
    gcsfuse_prefix = "/gcs/"
    train_path = train_uri.replace(gs_prefix, gcsfuse_prefix)
    label_path = label_uri.replace(gs_prefix, gcsfuse_prefix)
    model_path = model_uri.replace(gs_prefix, gcsfuse_prefix)

    def get_logger():

        logger = logging.getLogger(__name__)
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        handler.setFormatter(
            logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        )
        logger.addHandler(handler)
        return logger

    def get_data(
        train_path: str, 
        label_path: str
    ) -> (pd.DataFrame): 
        
        
        #load data into pandas dataframe
        data_0 = pd.read_csv(train_path)
        labels_0 = pd.read_csv(label_path)
        
        #drop unnecessary leading columns
        
        data = data_0.drop('Unnamed: 0', axis=1)
        labels = labels_0.drop('Unnamed: 0', axis=1)
        
        #save as numpy array for reshaping of data 
        
        labels = labels.values
        data = data.values
    
        # Split the data
        labels = labels.reshape((labels.size,))
        train_data, test_data, train_labels, test_labels = train_test_split(data, labels, test_size=0.2, shuffle=True, random_state=7)
    
        #Convert data back to pandas dataframe for scaling
        
        train_data = pd.DataFrame(train_data)
        test_data = pd.DataFrame(test_data)
        train_labels = pd.DataFrame(train_labels)
        test_labels = pd.DataFrame(test_labels)
        
        #Scale and normalize the training dataset
        
        scaler = StandardScaler()
        scaler.fit(train_data)
        train_data = pd.DataFrame(scaler.transform(train_data), index=train_data.index, columns=train_data.columns)
        test_data = pd.DataFrame(scaler.transform(test_data), index=test_data.index, columns=test_data.columns)
        
        return train_data,train_labels, test_data, test_labels 
    
        """ Train your Keras model passing in the training data and values for learning rate, dropout rate,and the number of epochs """

    def train_model(
        learning_rate: float, 
        dropout_rate: float,
        epochs: float,
        train_data: pd.DataFrame,
        train_labels: pd.DataFrame):
 
        # Train tensorflow model
        param = {"learning_rate": learning_rate, "dropout_rate": dropout_rate, "epochs": epochs}
        model = Sequential()
        model.add(Dense(500, input_dim=train_data.shape[1], activation= "relu"))
        model.add(Dropout(param['dropout_rate']))
        model.add(Dense(100, activation= "relu"))
        model.add(Dense(50, activation= "relu"))
        model.add(Dense(1))
            
        model.compile(
        tf.keras.optimizers.Adam(learning_rate= param['learning_rate']),
        loss='mse',
        metrics=[tf.keras.metrics.RootMeanSquaredError(),tf.keras.metrics.MeanAbsoluteError()])
        
        model.fit(train_data, train_labels, epochs= param['epochs'])
        
        return model

    # Get Predictions
    def get_predictions(model, test_data):

        dtest = pd.DataFrame(test_data)
        pred = model.predict(dtest)
        return pred

    # Evaluate predictions with MAE
    def evaluate_model_mae(pred, test_labels):
        
        mae = mean_absolute_error(test_labels, pred)
        return mae
    
    # Evaluate predictions with RMSE
    def evaluate_model_rmse(pred, test_labels):

        rmse = np.sqrt(np.mean((test_labels - pred)**2))
        return rmse    
 
    
    #Save your trained model in GCS     
    def save_model(model, model_path):

        model_id = str(uuid.uuid1())
        model_path = f"{model_path}/{model_id}"        
        path(model_path).parent.mkdir(parents=True, exist_ok=True)
        model.save(model_path + '/model_tensorflow')

        
    # Main ----------------------------------------------
    
    train_data, train_labels, test_data, test_labels = get_data(train_path, label_path)
    model = train_model(learning_rate, dropout_rate, epochs, train_data,train_labels )
    pred = get_predictions(model, test_data)
    mae = evaluate_model_mae(pred, test_labels)
    rmse = evaluate_model_rmse(pred, test_labels)
    save_model(model, model_path)

    # Metadata ------------------------------------------

    #convert numpy array to pandas series
    mae = pd.Series(mae)
    rmse = pd.Series(rmse)

    #log metrics and model artifacts with ML Metadata. Save metrics as a list. 
    metrics.log_metric("mae", mae.to_list()) 
    metrics.log_metric("rmse", rmse.to_list()) 
    model_metadata.uri = model_uri

مرحله ۳: ساخت خط تولید (Pipeline)

اکنون گردش کار خود را با استفاده از Domain Specific Language (DSL) موجود در KFP تنظیم می‌کنیم و خط لوله خود را در یک فایل JSON کامپایل می‌کنیم.

# define our workflow

@dsl.pipeline(name="gaming-custom-training-pipeline")
def pipeline(
    train_uri: str,
    label_uri: str,
    dropout_rate: float,
    learning_rate: float,
    epochs: int,
    model_uri: str,
):

    custom_trainer(
        train_uri,label_uri, dropout_rate,learning_rate,epochs, model_uri
    )
#compile our pipeline
compiler.Compiler().compile(pipeline_func=pipeline, package_path="gaming_pipeline.json")

مرحله ۴: اجرای خط لوله (های) خود را ارسال کنید

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

runs = [
    {"dropout_rate": 0.001, "learning_rate": 0.001,"epochs": 20},
    {"dropout_rate": 0.002, "learning_rate": 0.002,"epochs": 25},
    {"dropout_rate": 0.003, "learning_rate": 0.003,"epochs": 30},
    {"dropout_rate": 0.004, "learning_rate": 0.004,"epochs": 35},
    {"dropout_rate": 0.005, "learning_rate": 0.005,"epochs": 40},
]

با تعریف هایپرپارامترها، می‌توانیم از یک for loop برای تغذیه موفقیت‌آمیز در مراحل مختلف خط لوله استفاده کنیم:

for i, run in enumerate(runs):

    job = vertex_ai.PipelineJob(
        display_name=f"{EXPERIMENT_NAME}-pipeline-run-{i}",
        template_path="gaming_pipeline.json",
        pipeline_root=PIPELINE_URI,
        parameter_values={
            "train_uri": TRAIN_URI,
            "label_uri": LABEL_URI,
            "model_uri": MODEL_URI,
            **run,
        },
    )
    job.submit(experiment=EXPERIMENT_NAME)

مرحله ۵: استفاده از Vertex AI SDK برای مشاهده آزمایش‌ها

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

# see state/status of all the pipeline runs

vertex_ai.get_experiment_df(EXPERIMENT_NAME)

شما می‌توانید از کد زیر برای دریافت به‌روزرسانی‌ها در مورد وضعیت اجرای pipeline خود استفاده کنید.

#check on current status
while True:
    pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
    if all(
        pipeline_state != "COMPLETE" for pipeline_state in pipeline_experiments_df.state
    ):
        print("Pipeline runs are still running...")
        if any(
            pipeline_state == "FAILED"
            for pipeline_state in pipeline_experiments_df.state
        ):
            print("At least one Pipeline run failed")
            break
    else:
        print("Pipeline experiment runs have completed")
        break
    time.sleep(60)

همچنین می‌توانید با استفاده از run_name کارهای خاص خط لوله را فراخوانی کنید.

# Call the pipeline runs based on the experiment run name
pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
job = vertex_ai.PipelineJob.get(pipeline_experiments_df.run_name[0])
print(job.resource_name)
print(job._dashboard_uri())

در نهایت، می‌توانید وضعیت اجراهای خود را در فواصل زمانی مشخص (مثلاً هر ۶۰ ثانیه) به‌روزرسانی کنید تا تغییر وضعیت از RUNNING به FAILED یا COMPLETE مشاهده کنید.

# wait 60 seconds and view state again
import time
time.sleep(60)
vertex_ai.get_experiment_df(EXPERIMENT_NAME)

۷. بهترین عملکرد دویدن را شناسایی کنید

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

نتایج نهایی - عکس فوری

هر دو MAE و RMSE معیارهایی برای میانگین خطای پیش‌بینی مدل هستند، بنابراین در بیشتر موارد مقدار پایین‌تر برای هر دو معیار مطلوب است. بر اساس خروجی آزمایش‌های Vertex AI می‌توانیم ببینیم که موفق‌ترین اجرای ما در هر دو معیار، اجرای نهایی با dropout_rate برابر با 0.001، learning_rate برابر با 0.001 و تعداد کل epochs 20 بوده است. بر اساس این آزمایش، این پارامترهای مدل در نهایت در تولید استفاده می‌شوند زیرا منجر به بهترین عملکرد مدل می‌شوند.

با این کار، آزمایشگاه را تمام کردید!

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

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

  • یک مدل Keras سفارشی را برای پیش‌بینی رتبه‌بندی بازیکنان آموزش دهید (مثلاً رگرسیون)
  • استفاده از Kubeflow Pipelines SDK برای ساخت خطوط لوله یادگیری ماشینی مقیاس‌پذیر
  • یک خط لوله ۵ مرحله‌ای ایجاد و اجرا کنید که داده‌ها را از GCS دریافت می‌کند، داده‌ها را مقیاس‌بندی می‌کند، مدل را آموزش می‌دهد، آن را ارزیابی می‌کند و مدل حاصل را دوباره در GCS ذخیره می‌کند.
  • از فراداده‌های Vertex ML برای ذخیره مصنوعات مدل مانند مدل‌ها و معیارهای مدل استفاده کنید.
  • از آزمایش‌های هوش مصنوعی Vertex برای مقایسه نتایج اجرای خطوط لوله مختلف استفاده کنید.

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

۸. پاکسازی

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

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

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

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

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

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

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