Khai thác tối đa khả năng thử nghiệm: Quản lý các thử nghiệm học máy bằng Vertex AI

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ sử dụng AI Vertex để xây dựng một quy trình huấn luyện Mô hình Keras tuỳ chỉnh trong TensorFlow. Sau đó, chúng tôi sẽ sử dụng chức năng mới có trong Thử nghiệm AI trên đỉnh để theo dõi và so sánh các lần chạy mô hình, từ đó xác định xem tổ hợp siêu tham số nào mang lại hiệu suất tốt nhất.

Kiến thức bạn sẽ học được

Bạn sẽ tìm hiểu cách:

  • Huấn luyện một Mô hình Keras tuỳ chỉnh để dự đoán điểm xếp hạng của người chơi (ví dụ: sự hồi quy)
  • Sử dụng SDK Quy trình Kubeflow để xây dựng các quy trình học máy có thể mở rộng
  • Tạo và chạy một quy trình 5 bước để nhập dữ liệu từ Cloud Storage, điều chỉnh quy mô dữ liệu, huấn luyện mô hình, đánh giá và lưu mô hình kết quả vào Cloud Storage
  • Tận dụng Siêu dữ liệu máy học của Vertex để lưu các cấu phần phần mềm của mô hình như Mô hình và Chỉ số mô hình
  • Sử dụng tính năng Thử nghiệm của Vertex AI để so sánh kết quả của nhiều quy trình chạy

Tổng chi phí để chạy phòng thí nghiệm này trên Google Cloud là khoảng 1 đô la.

2. Giới thiệu về Vertex AI

Phòng thí nghiệm này sử dụng sản phẩm AI mới nhất có trên Google Cloud. Vertex AI tích hợp các giải pháp học máy trên Google Cloud vào một trải nghiệm phát triển liền mạch. Trước đây, các mô hình được huấn luyện bằng AutoML và mô hình tuỳ chỉnh có thể truy cập được thông qua các dịch vụ riêng biệt. Dịch vụ mới kết hợp cả hai thành một API duy nhất, cùng với các sản phẩm mới khác. Bạn cũng có thể di chuyển các dự án hiện có sang Vertex AI.

Vertex AI có nhiều sản phẩm nhằm hỗ trợ quy trình học máy toàn diện. Phòng thí nghiệm này sẽ tập trung vào các sản phẩm được làm nổi bật dưới đây: Thử nghiệm, Đường dẫn, Siêu dữ liệu học máyBàn làm việc

Tổng quan về sản phẩm Vertex

3. Tổng quan về trường hợp sử dụng

Chúng tôi sẽ sử dụng một tập dữ liệu bóng đá phổ biến lấy nguồn từ EA Sports' Loạt trò chơi điện tử FIFA. Nó bao gồm hơn 25.000 trận đấu bóng đá và hơn 10.000 cầu thủ cho mùa giải 2008-2016. Dữ liệu đã được xử lý trước để bạn có thể bắt đầu dễ dàng hơn. Bạn sẽ sử dụng tập dữ liệu này trên toàn bộ phòng thí nghiệm và hiện có thể tìm thấy tập dữ liệu này trong một bộ chứa công khai của Cloud Storage. Chúng ta sẽ cung cấp thêm thông tin chi tiết ở phần sau của lớp học lập trình này về cách truy cập vào tập dữ liệu. Mục tiêu cuối cùng của chúng tôi là dự đoán điểm xếp hạng chung của người chơi dựa trên nhiều hành động trong trò chơi, chẳng hạn như chặn bóng và phạt đền.

Vì sao tính năng Thử nghiệm của Vertex AI lại hữu ích cho lĩnh vực Khoa học dữ liệu?

Khoa học dữ liệu mang tính chất thử nghiệm nên rốt cuộc thì họ được gọi là nhà khoa học. Các nhà khoa học dữ liệu giỏi dựa trên giả thuyết, sử dụng phương pháp thử và sai để kiểm tra nhiều giả thuyết với hy vọng rằng các lần lặp lại liên tiếp sẽ dẫn đến mô hình có hiệu suất cao hơn.

Mặc dù các nhóm khoa học dữ liệu đã ưa chuộng thử nghiệm, nhưng họ thường gặp khó khăn trong việc theo dõi công việc của họ và "bí quyết" mà các nhà xuất bản này phát hiện ra qua nỗ lực thử nghiệm của họ. Điều này xảy ra vì một vài lý do:

  • Việc theo dõi công việc đào tạo có thể trở nên rườm rà, khiến bạn dễ dàng quên mất những hoạt động nào đang hoạt động hiệu quả so với những hoạt động chưa hiệu quả.
  • Vấn đề này trở nên nghiêm trọng hơn khi bạn xem xét một nhóm khoa học dữ liệu vì không phải thành viên nào cũng có thể theo dõi các thí nghiệm hay thậm chí là chia sẻ kết quả của họ với người khác
  • Việc thu thập dữ liệu tốn nhiều thời gian và hầu hết các nhóm đều sử dụng phương pháp thủ công (ví dụ: trang tính hoặc tài liệu). Do đó, thông tin cần tìm hiểu không nhất quán và không đầy đủ

tl;dr: Các tính năng thử nghiệm của Vertex AI hỗ trợ bạn, giúp bạn theo dõi và so sánh các thử nghiệm của mình dễ dàng hơn

Lý do nên thử nghiệm Vertex AI cho lĩnh vực trò chơi

Trước đây, ngành trò chơi là một sân chơi cho công nghệ học máy và các thử nghiệm học máy. Các trò chơi không chỉ tạo ra hàng tỷ sự kiện theo thời gian thực mỗi ngày, mà còn khai thác toàn bộ dữ liệu đó bằng cách tận dụng các thử nghiệm học máy và học máy để cải thiện trải nghiệm trong trò chơi, giữ chân người chơi và đánh giá những người chơi khác nhau trên nền tảng của họ. Do đó, chúng tôi cho rằng tập dữ liệu trò chơi sẽ phù hợp với bài tập thử nghiệm tổng thể của mình.

4. Thiết lập môi trường

Bạn cần một dự án Google Cloud Platform đã bật tính năng thanh toán để chạy lớp học lập trình này. Để tạo một dự án, hãy làm theo hướng dẫn tại đây.

Bước 1: Bật Compute Engine API

Chuyển đến Compute Engine rồi chọn Enable (Bật) nếu bạn chưa bật tính năng này.

Bước 2: Bật Vertex AI API

Chuyển đến phần Vertex AI trong Cloud Console rồi nhấp vào Bật Vertex AI API.

Trang tổng quan Vertex AI

Bước 3: Tạo một thực thể Vertex AI Workbench

Trong mục Vertex AI trên Cloud Console, hãy nhấp vào Workbench:

Trình đơn Vertex AI

Bật API Notebooks nếu chưa bật.

Notebook_api

Sau khi bật, hãy nhấp vào SÁCH QUẢN LÝ SÁCH:

Notebooks_UI

Sau đó, chọn SÁCH LƯU Ý MỚI.

new_notebook

Đặt tên cho sổ tay của bạn, sau đó nhấp vào Cài đặt nâng cao.

create_notebook

Trong phần Advanced Settings (Cài đặt nâng cao), hãy bật chế độ tắt ở trạng thái rảnh và đặt số phút là 60 phút. Điều này có nghĩa là sổ tay của bạn sẽ tự động tắt khi không được sử dụng, do đó bạn không phải chịu các chi phí không cần thiết.

idle_timeout

Bước 4: Mở Sổ tay

Sau khi tạo phiên bản, hãy chọn Open JupyterLab.

open_jupyterlab

Bước 5: Xác thực (chỉ lần đầu tiên)

Vào lần đầu tiên sử dụng một phiên bản mới, bạn sẽ được yêu cầu xác thực. Hãy làm theo các bước trong giao diện người dùng để thực hiện việc này.

xác thực

Bước 6: Chọn Kernel thích hợp

Sổ tay được quản lý cung cấp nhiều nhân trong một giao diện người dùng. Chọn nhân cho Tensorflow 2 (cục bộ).

tensorflow_kernel

5. Các bước thiết lập ban đầu trong Sổ tay

Bạn sẽ cần thực hiện một loạt các bước bổ sung để thiết lập môi trường trong sổ tay trước khi xây dựng quy trình. Các bước này bao gồm: cài đặt bất kỳ gói bổ sung nào, đặt biến, tạo bộ chứa bộ nhớ trên đám mây, sao chép tập dữ liệu trò chơi từ bộ chứa lưu trữ công cộng, nhập thư viện và xác định các hằng số bổ sung.

Bước 1: Cài đặt các gói bổ sung

Chúng tôi sẽ cần cài đặt thêm các phần phụ thuộc của gói hiện chưa được cài đặt trong môi trường máy tính xách tay của bạn. Ví dụ như SDK KFP.

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

Sau đó, bạn muốn khởi động lại Hạt nhân của Sổ tay để có thể sử dụng các gói đã tải xuống trong sổ tay của mình.

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

Bước 2: Đặt biến

Chúng ta muốn xác định PROJECT_ID. Nếu không biết Project_ID của mình, bạn có thể nhận PROJECT_ID bằng 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)

Nếu không, hãy đặt PROJECT_ID tại đây.

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

Chúng ta cũng cần đặt biến REGION. Biến này được dùng xuyên suốt phần còn lại của sổ tay này. Dưới đây là các khu vực hỗ trợ Vertex AI. Bạn nên chọn khu vực gần bạn nhất.

  • Châu Mỹ: us-central1
  • Châu Âu: europe-west4
  • Châu Á Thái Bình Dương: asia-east1

Vui lòng không sử dụng bộ chứa đa khu vực để huấn luyện bằng Vertex AI. Một số khu vực không hỗ trợ mọi dịch vụ Vertex AI. Tìm hiểu thêm về các vùng AI của Vertex.

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

Cuối cùng, chúng ta sẽ đặt biến TIMESTAMP. Biến này được dùng để tránh xung đột tên giữa người dùng trên các tài nguyên được tạo. Bạn sẽ tạo một TIMESTAMP cho mỗi phiên thực thể và thêm biến này vào tên của tài nguyên mà bạn tạo trong hướng dẫn này.

#set timestamp to avoid collisions between multiple users

from datetime import datetime

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

Bước 3: Tạo một bộ chứa Cloud Storage

Bạn sẽ cần chỉ định và tận dụng một bộ chứa chạy thử của Cloud Storage. Bộ chứa thử nghiệm là nơi lưu giữ tất cả dữ liệu liên kết với tập dữ liệu và tài nguyên mô hình qua các phiên hoạt động.

Đặt tên bộ chứa Cloud Storage của bạn ở bên dưới. Tên bộ chứa phải là duy nhất trên toàn cầu cho mọi dự án trên Google Cloud, kể cả những dự án bên ngoài tổ chức của bạn.

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

Nếu bộ chứa của bạn KHÔNG tồn tại, bạn có thể chạy ô sau để tạo bộ chứa Cloud Storage.

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

Sau đó, bạn có thể xác minh quyền truy cập vào bộ chứa Cloud Storage của mình bằng cách chạy ô sau.

#verify access 
! gsutil ls -al $BUCKET_URI

Bước 4: Sao chép tập dữ liệu trò chơi

Như đã đề cập trước đó, bạn sẽ sử dụng tập dữ liệu trò chơi phổ biến từ các trò chơi điện tử đình đám của EA Sports, FIFA. Chúng tôi đã hoàn tất bước xử lý trước cho bạn, vì vậy, bạn chỉ cần sao chép tập dữ liệu từ bộ chứa lưu trữ công khai rồi chuyển sang tập dữ liệu mà bạn đã tạo.

# 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

Bước 5: Nhập thư viện và xác định các hằng số bổ sung

Tiếp theo, chúng ta sẽ nhập các thư viện của mình cho Vertex AI, KFP, v.v.

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

Chúng ta cũng sẽ xác định các hằng số bổ sung mà chúng ta sẽ tham chiếu đến trong phần còn lại của sổ tay, chẳng hạn như(các) đường dẫn tệp đến dữ liệu huấn luyện.

#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. Hãy cùng xây dựng quy trình

Giờ đây, niềm vui đã bắt đầu và chúng ta có thể bắt đầu tận dụng Vertex AI để xây dựng quy trình đào tạo của mình. Chúng tôi sẽ khởi chạy Vertex AI SDK, thiết lập công việc huấn luyện thành một thành phần của quy trình, xây dựng quy trình, gửi(các) lần chạy quy trình và tận dụng Vertex AI SDK để xem các thử nghiệm và theo dõi trạng thái của các thử nghiệm đó.

Bước 1: Khởi chạy Vertex AI SDK

Khởi chạy Vertex AI SDK, đặt PROJECT_IDBUCKET_URI của bạn.

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

Bước 2: Thiết lập công việc đào tạo của chúng tôi dưới dạng thành phần quy trình

Để bắt đầu chạy thử nghiệm, chúng ta sẽ cần chỉ định công việc huấn luyện của mình bằng cách xác định công việc đó là một thành phần của quy trình. Quy trình của chúng tôi sẽ lấy dữ liệu huấn luyện và các siêu tham số (ví dụ: DROPOUT_RATE, LEARNING_RATE, EPOCHS) làm chỉ số của mô hình đầu vào và đầu ra (ví dụ: MAERMSE) và một cấu phần phần mềm mô hình.

@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

Bước 3: Xây dựng quy trình

Bây giờ, chúng ta sẽ thiết lập quy trình công việc bằng cách sử dụng Domain Specific Language (DSL) có trong KFP và biên dịch quy trình thành tệp 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")

Bước 4: Gửi(các) quy trình Chạy quy trình

Công việc khó khăn là thiết lập thành phần và xác định quy trình. Chúng tôi đã sẵn sàng gửi nhiều lần chạy quy trình mà chúng tôi đã chỉ định ở trên. Để thực hiện điều này, chúng ta cần xác định giá trị cho các siêu tham số khác nhau như sau:

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

Với các siêu tham số đã xác định, chúng ta có thể tận dụng for loop để cấp dữ liệu thành công trong nhiều lần chạy quy trình:

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)

Bước 5: Tận dụng Vertex AI SDK để xem các thử nghiệm

Vertex AI SDK giúp bạn theo dõi trạng thái chạy quy trình. Bạn cũng có thể dùng hàm này để trả về các tham số và chỉ số của Quy trình chạy trong Thử nghiệm AI Vertex. Sử dụng mã sau để xem các tham số được liên kết với các lần chạy của bạn và trạng thái hiện tại của nó.

# see state/status of all the pipeline runs

vertex_ai.get_experiment_df(EXPERIMENT_NAME)

Bạn có thể tận dụng mã dưới đây để nhận thông tin cập nhật về trạng thái chạy của quy trình.

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

Bạn cũng có thể gọi các công việc quy trình cụ thể bằng 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())

Cuối cùng, bạn có thể làm mới trạng thái chạy theo các khoảng thời gian đã đặt (chẳng hạn như 60 giây một lần) để xem các trạng thái thay đổi từ RUNNING thành FAILED hoặc COMPLETE.

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

7. Xác định bài chạy hoạt động hiệu quả nhất

Tuyệt vời, giờ đây chúng ta đã có kết quả của quá trình chạy quy trình. Có thể bạn sẽ hỏi: Tôi có thể biết được điều gì từ những kết quả đó? Đầu ra từ các thử nghiệm của bạn phải chứa 5 hàng, mỗi hàng cho một quy trình. Mã sẽ có dạng như sau:

Final-Results-Snapshot

Cả MAE và RMSE đều là thước đo sai số dự đoán mô hình trung bình. Vì vậy, trong hầu hết các trường hợp, bạn nên đưa ra giá trị thấp hơn cho cả hai chỉ số. Dựa trên kết quả từ các Thử nghiệm AI của Vertex, chúng ta có thể thấy rằng lần chạy thành công nhất trên cả hai chỉ số là lần chạy cuối cùng với dropout_rate là 0,001, learning_rate nếu là 0,001 và tổng số epochs là 20. Dựa trên thử nghiệm này, các thông số mô hình này cuối cùng sẽ được dùng trong phiên bản chính thức để mang lại hiệu suất tốt nhất cho mô hình.

Vậy là bạn đã hoàn thành phòng thí nghiệm!

🎉 Xin chúc mừng! 🎉

Bạn đã tìm hiểu cách sử dụng Vertex AI để:

  • Huấn luyện một Mô hình Keras tuỳ chỉnh để dự đoán điểm xếp hạng của người chơi (ví dụ: sự hồi quy)
  • Sử dụng SDK Quy trình Kubeflow để xây dựng các quy trình học máy có thể mở rộng
  • Tạo và chạy một quy trình 5 bước để nhập dữ liệu từ GCS, chia tỷ lệ dữ liệu, huấn luyện mô hình, đánh giá, rồi lưu mô hình thu được vào GCS
  • Tận dụng Siêu dữ liệu máy học của Vertex để lưu các cấu phần phần mềm của mô hình như Mô hình và Chỉ số mô hình
  • Sử dụng tính năng Thử nghiệm của Vertex AI để so sánh kết quả của nhiều quy trình chạy

Để tìm hiểu thêm về các phần khác nhau của Vertex, hãy xem tài liệu này.

8. Dọn dẹp

Để không bị tính phí, bạn nên xoá các tài nguyên đã tạo trong toàn bộ phòng thí nghiệm này.

Bước 1: Dừng hoặc xoá phiên bản Sổ tay

Nếu muốn tiếp tục sử dụng sổ tay mà bạn đã tạo trong phòng thí nghiệm này, bạn nên tắt sổ tay đó khi không sử dụng. Trên giao diện người dùng của Sổ tay trong Cloud Console, hãy chọn sổ tay đó rồi chọn Dừng. Nếu bạn muốn xoá hoàn toàn phiên bản, hãy chọn Xoá:

Dừng thực thể

Bước 2: Xoá bộ chứa trong Cloud Storage

Để xoá Bộ chứa Storage, hãy sử dụng trình đơn Điều hướng trong Cloud Console, duyệt đến Bộ nhớ, chọn bộ chứa rồi nhấp vào Xoá:

Xoá bộ nhớ