Denemelerden en iyi şekilde yararlanın: Vertex AI ile Makine Öğrenimi Denemelerini Yönetme

1. Genel Bakış

Bu laboratuvarda, TensorFlow'da özel bir Keras modelini eğiten bir ardışık düzen oluşturmak için Vertex AI'yı kullanacaksınız. Ardından, hangi hiperparametre kombinasyonunun en iyi performansı sağladığını belirlemek için model çalıştırma işlemlerini izlemek ve karşılaştırmak üzere Vertex AI Experiments'de bulunan yeni işlevi kullanırız.

Öğrenecekleriniz

Öğrenecekleriniz:

  • Oyuncu puanlarını tahmin etmek için özel bir Keras modeli eğitme (ör. regresyon)
  • Ölçeklenebilir ML ardışık düzenleri oluşturmak için Kubeflow Pipelines SDK'sını kullanma
  • Cloud Storage'dan veri alan, verileri ölçeklendiren, modeli eğiten, değerlendiren ve elde edilen modeli Cloud Storage'a geri kaydeden 5 adımlı bir ardışık düzen oluşturup çalıştırma
  • Modeller ve model metrikleri gibi model yapılarını kaydetmek için Vertex ML Meta Verileri'nden yararlanın
  • Çeşitli ardışık düzen çalıştırmalarının sonuçlarını karşılaştırmak için Vertex AI Denemelerini kullanma

Bu laboratuvarı Google Cloud'da çalıştırmanın toplam maliyeti yaklaşık 1 ABD dolarıdır.

2. Vertex AI'a giriş

Bu laboratuvarda, Google Cloud'daki en yeni AI ürün teklifi kullanılmaktadır. Vertex AI, Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyimiyle entegre eder. Önceden, AutoML ve özel modellerle eğitilen modellere ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, diğer yeni ürünlerle birlikte her ikisini de tek bir API'de birleştirir. Mevcut projeleri Vertex AI'a da taşıyabilirsiniz.

Vertex AI, uçtan uca makine öğrenimi iş akışlarını desteklemek için birçok farklı ürün içerir. Bu laboratuvarda aşağıdaki ürünler ele alınacaktır: Deneysel çalışmalar, Pipeline'ler, ML meta verileri ve Workbench

Vertex'e genel bakış

3. Kullanım Alanına Genel Bakış

EA Sports' FIFA video oyunu serisinden alınan popüler bir futbol veri kümesini kullanacağız. 2008-2016 sezonlarında 25.000'den fazla futbol maçı ve 10.000'den fazla oyuncu içerir. Veriler, daha kolay bir başlangıç yapabilmeniz için önceden işlenmiştir. Artık herkese açık bir Cloud Storage paketinde bulunan bu veri kümesini laboratuvar boyunca kullanacaksınız. Veri kümesine nasıl erişeceğinizle ilgili daha fazla bilgiyi codelab'in ilerleyen bölümlerinde bulabilirsiniz. Nihai hedefimiz, bir oyuncunun genel puanını, müdahaleler ve cezalar gibi çeşitli oyun içi işlemlere göre tahmin etmektir.

Vertex AI Experiments neden Veri Bilimi için yararlıdır?

Veri bilimi deneysel bir bilimdir. Veri bilimcilerin adı da bilimcidir. İyi veri bilimcileri, çeşitli hipotezleri test etmek için deneme yanılma yöntemini kullanarak hipoteze dayalı çalışır. Bu sayede, art arda yapılan iterasyonların daha yüksek performanslı bir modelle sonuçlanmasını umut ederler.

Veri bilimi ekipleri denemeleri benimsemiş olsa da genellikle çalışmalarını ve deneme çalışmalarıyla keşfedilen "gizli formülü" takip etmekte zorlanır. Bunun birkaç nedeni vardır:

  • Eğitim işlerini takip etmek zor olabilir. Bu da neyin işe yarayıp neyin yaramadığını gözden kaçırmanıza neden olabilir.
  • Bu sorun, bir veri bilimi ekibine baktığınızda daha da büyür. Çünkü tüm üyeler deneyleri takip etmiyor, hatta sonuçlarını başkalarıyla paylaşmıyor olabilir.
  • Veri yakalama zaman alır ve çoğu ekip, öğrenilmesi gereken bilgilerde tutarsız ve eksikliklere yol açan manuel yöntemlerden (ör.e-tablolar veya dokümanlar) yararlanır.

Özet: Vertex AI Experiments, denemelerinizi daha kolay izlemenize ve karşılaştırmanıza yardımcı olarak sizin için gerekenleri yapar.

Oyun için neden Vertex AI Experiments?

Oyunlar, geçmişte makine öğrenimi ve makine öğrenimi denemeleri için bir oyun alanı olmuştur. Oyunlar yalnızca günde milyarlarca gerçek zamanlı etkinlik üretmekle kalmaz, aynı zamanda oyun içi deneyimleri iyileştirmek, oyuncuları elde tutmak ve platformlarındaki farklı oyuncuları değerlendirmek için makine öğrenimi ve makine öğrenimi deneylerinden yararlanarak bu verilerin tümünü kullanır. Bu nedenle, oyun veri kümesinin genel deneme çalışmamıza uygun olacağını düşündük.

4. Ortamınızı ayarlama

Bu codelab'i çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projeniz olması gerekir. Proje oluşturmak için buradaki talimatları uygulayın.

1. Adım: Compute Engine API'yi etkinleştirin

Compute Engine'a gidin ve etkin değilse Etkinleştir'i seçin.

2. Adım: Vertex AI API'yi etkinleştirin

Cloud Console'unuzun Vertex AI bölümüne gidin ve Vertex AI API'yi etkinleştir'i tıklayın.

Vertex AI kontrol paneli

3. Adım: Vertex AI Workbench örneği oluşturun

Cloud Console'unuzun Vertex AI bölümünden Workbench'i tıklayın:

Vertex AI menüsü

Henüz etkinleştirilmemişse Notebooks API'yi etkinleştirin.

Notebook_api

Etkinleştirdikten sonra YÖNETİLEN NOT KİTAPLARI'nı tıklayın:

Notebooks_UI

Ardından YENİ NOT DEFTERİ'ni seçin.

new_notebook

Not defterinize bir ad verin ve ardından Gelişmiş Ayarlar'ı tıklayın.

create_notebook

Gelişmiş ayarlar bölümünde, boştayken kapatma özelliğini etkinleştirin ve dakika sayısını 60 olarak ayarlayın. Bu sayede, gereksiz maliyetlere maruz kalmamak için dizüstü bilgisayarınız kullanılmadığında otomatik olarak kapanır.

idle_timeout

4. Adım: Not defterinizi açın

Örnek oluşturulduktan sonra JupyterLab'i aç'ı seçin.

open_jupyterlab

5. Adım: Kimlik doğrulama (yalnızca ilk kez)

Yeni bir örneği ilk kez kullandığınızda kimliğinizi doğrulamanız istenir. Bu işlemi yapmak için kullanıcı arayüzündeki adımları uygulayın.

kimlik doğrulamak

6. Adım: Uygun Kernel'i seçin

Yönetilen not defterleri, tek bir kullanıcı arayüzünde birden fazla çekirdek sağlar. Tensorflow 2 (yerel) için çekirdeği seçin.

tensorflow_kernel

5. Not Defterinizde İlk Kurulum Adımları

Ardışık düzeninizi oluşturmadan önce not defterinizde ortamınızı ayarlamak için bir dizi ek adım uygulamanız gerekir. Bu adımlar arasında ek paketleri yükleme, değişkenleri ayarlama, Cloud Storage paketinizi oluşturma, oyun veri kümesini herkese açık bir depolama paketinden kopyalama, kitaplıkları içe aktarma ve ek sabitler tanımlama yer alır.

1. Adım: Ek Paketler Yükleyin

Not defteri ortamınızda şu anda yüklü olmayan ek paket bağımlılıkları yüklememiz gerekiyor. KFP SDK buna örnek olarak verilebilir.

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

Ardından, indirilen paketleri not defterinizde kullanabilmek için Not Defteri Kernel'i yeniden başlatmanız gerekir.

# 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)

2. Adım: Değişkenleri ayarlayın

PROJECT_ID'mizi tanımlamak istiyoruz. Project_ID değerinizi bilmiyorsanız gcloud'u kullanarak PROJECT_ID değerinizi alabilirsiniz.

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)

Aksi durumda PROJECT_ID ayarlarını burada yapabilirsiniz.

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

Ayrıca, bu not defterinin geri kalanında kullanılan REGION değişkenini de ayarlamak istiyoruz. Vertex AI için desteklenen bölgeler aşağıda verilmiştir. Size en yakın bölgeyi seçmenizi öneririz.

  • Kuzey ve Güney Amerika: us-central1
  • Avrupa: europe-west4
  • Asya Pasifik: asia-east1

Vertex AI ile eğitim için lütfen çok bölgeli bir paket kullanmayın. Bazı bölgeler tüm Vertex AI hizmetlerini desteklemez. Vertex AI bölgeleri hakkında daha fazla bilgi edinin.

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

Son olarak bir TIMESTAMP değişkeni ayarlayacağız. Bu değişkenler, oluşturulan kaynaklarda kullanıcılar arasındaki ad çakışmalarını önlemek için kullanılır. Her örnek oturumu için bir TIMESTAMP oluşturursunuz ve bunu, bu eğiticide oluşturduğunuz kaynakların adına eklersiniz.

#set timestamp to avoid collisions between multiple users

from datetime import datetime

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

3. Adım: Cloud Storage paketi oluşturun

Cloud Storage hazırlık paketi belirtip bu paketten yararlanmanız gerekir. Hazırlama paketi, veri kümeniz ve model kaynaklarınızla ilişkili tüm verilerin oturumlar arasında saklandığı yerdir.

Aşağıda Cloud Storage paketinizin adını ayarlayın. Paket adları, kuruluşunuzun dışındakiler de dahil olmak üzere tüm Google Cloud projeleri genelinde global olarak benzersiz olmalıdır.

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

Paketiniz HALEN mevcut değilse Cloud Storage paketinizi oluşturmak için aşağıdaki hücreyi çalıştırabilirsiniz.

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

Ardından, aşağıdaki hücreyi çalıştırarak Cloud Storage paketinize erişimi doğrulayabilirsiniz.

#verify access 
! gsutil ls -al $BUCKET_URI

4. Adım: Oyun veri kümesini kopyalayın

Daha önce de belirtildiği gibi, EA Sports'un popüler video oyunlarından FIFA'daki popüler bir oyun veri kümesinden yararlanacaksınız. Ön işleme çalışmasını sizin için yaptık. Dolayısıyla, veri kümesini herkese açık depolama alanından kopyalayıp oluşturduğunuz alana taşımanız yeterlidir.

# 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

5. Adım: Kitaplıkları İçe Aktarın ve Ek Sabitler Tanımlayın

Ardından, Vertex AI, KFP vb. için kitaplıklarımızı içe aktarmak isteriz.

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

Ayrıca, not defterinin geri kalanında referans vereceğimiz ek sabitler de tanımlayacağız(ör. eğitim verilerimizin dosya yolları).

#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"

6. Ardışık düzenimizi oluşturalım

Artık eğlence başlayabilir ve eğitim hattımızı oluşturmak için Vertex AI'dan yararlanmaya başlayabiliriz. Vertex AI SDK'sını başlatacak, eğitim işimizi bir ardışık düzen bileşeni olarak ayarlayacak, ardışık düzenimizi oluşturacak, ardışık düzen çalıştırmalarımızı gönderecek ve denemeleri görüntülemek ve durumlarını izlemek için Vertex AI SDK'sından yararlanacağız.

1. adım: Vertex AI SDK'sını başlatın

PROJECT_ID ve BUCKET_URI ayarlarını yaparak Vertex AI SDK'yı başlatın.

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

2. Adım: Eğitim İşimizi Ardışık Düzen Bileşeni olarak ayarlayın

Denemelerimizi çalıştırmaya başlamak için eğitim işimizi bir ardışık düzen bileşeni olarak tanımlayarak belirtmemiz gerekecek. Ardışık düzenimiz, eğitim verilerini ve hiperparametreleri (ör. DROPOUT_RATE, LEARNING_RATE, EPOCHS) giriş ve çıkış modeli metrikleri olarak (ör. MAE ve RMSE) ve bir model yapısını içerir.

@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

3. Adım: Akışımızı Oluşturuyoruz

Şimdi, KFP'de bulunan Domain Specific Language (DSL)'ü kullanarak iş akışımızı ayarlayacağız ve ardışık düzenimizi bir JSON dosyasına derleyeceğiz.

# 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")

4. Adım: Ardışık düzen çalıştırmalarımızı gönderin

Bileşenimizi oluşturup ardışık düzenimizi tanımlamak için gereken tüm çabayı gösterdik. Yukarıda belirttiğimiz ardışık düzenin çeşitli çalıştırmalarını göndermeye hazırız. Bunu yapmak için farklı hiperparametrelerimizin değerlerini aşağıdaki gibi tanımlamamız gerekir:

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},
]

Hiperparametreler tanımlandıktan sonra, for loop'ten yararlanarak ardışık düzenin farklı çalıştırmalarına başarılı bir şekilde feed sağlayabiliriz:

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)

5. Adım: Deneme Sonuçlarını Görüntülemek İçin Vertex AI SDK'sından Yararlanma

Vertex AI SDK'sı, ardışık düzen çalıştırmalarının durumunu izlemenizi sağlar. Bu işlevi, Vertex AI deneyindeki ardışık düzen çalıştırmalarının parametrelerini ve metriklerini döndürmek için de kullanabilirsiniz. Çalıştırmalarınızla ilişkili parametreleri ve mevcut durumunu görmek için aşağıdaki kodu kullanın.

# see state/status of all the pipeline runs

vertex_ai.get_experiment_df(EXPERIMENT_NAME)

Aşağıdaki koddan yararlanarak ardışık düzen çalıştırmalarınızın durumuyla ilgili güncellemeler alabilirsiniz.

#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 kullanarak belirli ardışık düzen işlerini de çağırabilirsiniz.

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

Son olarak, RUNNING olan durumların FAILED veya COMPLETE olarak değiştiğini görmek için çalıştırmalarınızın durumunu belirli aralıklarla (ör. 60 saniyede bir) yenileyebilirsiniz.

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

7. En İyi Performans Gösteren Çalıştırmayı Belirleme

Harika. Artık ardışık düzen çalıştırmalarımızın sonuçlarını elde ettik. Sonuçlardan neler öğrenebilirim? diye sorabilirsiniz. Denemelerinizden elde edilen çıkış, ardışık düzenin her çalıştırması için bir tane olmak üzere beş satır içermelidir. Bu, aşağıdaki gibi görünür:

Final-Results-Snapshot

Hem MAE hem de RMSE, ortalama model tahmini hatasının ölçümleridir. Bu nedenle, çoğu durumda her iki metrik için de daha düşük bir değer arzu edilir. Vertex AI Experiments'in çıktısına göre, her iki metrikte de en başarılı çalışmamızın, dropout_rate değerinin 0,001, learning_rate değerinin 0,001 ve toplam epochs sayısının 20 olduğu son çalışma olduğunu görebiliriz. Bu denemeye göre, en iyi model performansını sağladığı için bu model parametreleri nihayetinde üretimde kullanılacaktır.

Böylece laboratuvarı tamamlamış oldunuz.

🎉 Tebrikler. 🎉

Vertex AI'ı kullanarak şunları öğrendiniz:

  • Oyuncu puanlarını (ör. regresyon) tahmin etmek için özel bir Keras Modeli eğitin
  • Ölçeklenebilir ML ardışık düzenleri oluşturmak için Kubeflow Pipelines SDK'sını kullanma
  • GCS'den veri alan, verileri ölçeklendiren, modeli eğiten, değerlendiren ve elde edilen modeli tekrar GCS'ye kaydeden 5 adımlı bir ardışık düzen oluşturup çalıştırma
  • Modeller ve Model Metrikleri gibi model yapılarını kaydetmek için Vertex ML meta verilerinden yararlanın
  • Çeşitli ardışık düzen çalıştırmalarının sonuçlarını karşılaştırmak için Vertex AI Experiments'i kullanın

Vertex'in farklı bölümleri hakkında daha fazla bilgi edinmek için belgelere göz atın.

8. Temizleme

Ücret ödememek için bu laboratuvar boyunca oluşturulan kaynakları silmeniz önerilir.

1. Adım: Notebooks örneğinizi durdurun veya silin

Bu laboratuvarda oluşturduğunuz not defterini kullanmaya devam etmek istiyorsanız kullanmadığınızda kapatmanız önerilir. Cloud Console'daki Not Defteri kullanıcı arayüzünde not defterini ve ardından Durdur'u seçin. Örneği tamamen silmek istiyorsanız Sil'i seçin:

Örneği durdur

2. adım: Cloud Storage paketinizi silin

Depolama paketini silmek için Cloud Console'daki Gezinme menüsünü kullanarak Depolama'ya gidin, paketinizi seçin ve Sil'i tıklayın:

Depolama alanını silme