Sử dụng siêu dữ liệu máy học của Vertex với các quy trình

1. Tổng quan

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách phân tích siêu dữ liệu từ Quy trình Vertex chạy bằng Siêu dữ liệu Vertex AI ML.

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

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

  • Sử dụng SDK Kubeflow Pipelines để xây dựng quy trình học máy giúp tạo tập dữ liệu trong Vertex AI, đồng thời huấn luyện và triển khai một mô hình học tập theo Scikit tuỳ chỉnh trên tập dữ liệu đó
  • Viết các thành phần quy trình tuỳ chỉnh tạo ra cấu phần phần mềm và siêu dữ liệu
  • So sánh các lần chạy Vertex Pipelines, cả trong Cloud Console và theo phương thức lập trình
  • Theo dõi dòng dõi của các cấu phần phần mềm do quy trình tạo
  • Truy vấn siêu dữ liệu về lần chạy quy trình

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

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

Lớp học 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, bạn có thể truy cập vào các mô hình được huấn luyện bằng AutoML và mô hình tuỳ chỉnh thông qua các dịch vụ riêng biệt. Sản phẩm 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.

Ngoài các dịch vụ huấn luyện và triển khai mô hình, Vertex AI còn cung cấp nhiều sản phẩm MLOps, bao gồm Vertex Pipelines, Siêu dữ liệu ML, Mô hình giám sát, Feature Store, v.v. Bạn có thể xem tất cả các sản phẩm của Vertex AI trong sơ đồ dưới đây.

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

Lớp học này tập trung vào Quy trình VertexSiêu dữ liệu Vertex ML.

Nếu bạn có ý kiến phản hồi về Vertex AI, vui lòng xem trang hỗ trợ.

Tại sao quy trình học máy lại hữu ích?

Trước khi đi sâu vào tìm hiểu, hãy cùng tìm hiểu lý do bạn nên sử dụng quy trình. Hãy tưởng tượng bạn đang xây dựng một quy trình làm việc về học máy bao gồm việc xử lý dữ liệu, huấn luyện mô hình, điều chỉnh tham số siêu dữ liệu, đánh giá và triển khai mô hình. Mỗi bước trong số này có thể có các phần phụ thuộc khác nhau và có thể trở nên khó sử dụng nếu bạn coi toàn bộ quy trình là một khối duy nhất. Khi bắt đầu mở rộng quy mô quy trình học máy, bạn nên chia sẻ quy trình làm việc về học máy với những người khác trong nhóm để họ có thể chạy quy trình đó và đóng góp mã. Nếu không có quy trình đáng tin cậy và có thể tái tạo, việc này có thể trở nên khó khăn. Với quy trình, mỗi bước trong quy trình học máy của bạn là một vùng chứa riêng. Điều này cho phép bạn phát triển các bước một cách độc lập và theo dõi dữ liệu đầu vào và đầu ra của từng bước theo cách có thể tái tạo. Bạn cũng có thể lên lịch hoặc kích hoạt các lần chạy quy trình dựa trên các sự kiện khác trong môi trường trên đám mây, chẳng hạn như bắt đầu chạy quy trình khi có dữ liệu huấn luyện mới.

Tóm tắt: quy trình giúp bạn tự động hoásản xuất lại quy trình làm việc về máy học.

3. Thiết lập môi trường đám mây

Bạn cần có một dự án trê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 dự án, hãy làm theo hướng dẫn tại đây.

Khởi động Cloud Shell

Trong lớp học này, bạn sẽ làm việc trong một phiên Cloud Shell (Lọt vào đám mây). Đây là một trình thông dịch lệnh do máy ảo lưu trữ và chạy trong đám mây của Google. Bạn cũng có thể dễ dàng chạy phần này trên máy tính của riêng mình, nhưng việc sử dụng Cloud Shell sẽ giúp mọi người có thể truy cập vào một trải nghiệm có thể tái tạo trong một môi trường nhất quán. Sau khi hoàn thành lớp học lập trình, bạn có thể thử lại phần này trên máy tính của riêng mình.

Uỷ quyền cho Cloud Shell

Kích hoạt Cloud Shell

Ở góc trên cùng bên phải của Cloud Console, hãy nhấp vào nút bên dưới để Kích hoạt Cloud Shell:

Kích hoạt Cloud Shell

Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (dưới màn hình đầu tiên) mô tả về Cloud Shell. Nếu vậy, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ thấy màn hình này nữa). Dưới đây là giao diện một lần đó:

Thiết lập Cloud Shell

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

Khởi động Cloud Shell

Máy ảo này được tải sẵn tất cả các công cụ phát triển mà bạn cần. Ứng dụng này cung cấp một thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp cải thiện đáng kể hiệu suất mạng và xác thực. Bạn có thể thực hiện hầu hết (nếu không phải tất cả) công việc trong lớp học lập trình này chỉ bằng một trình duyệt hoặc Chromebook.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án của bạn.

Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:

gcloud auth list

Kết quả của lệnh

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:

gcloud config list project

Kết quả của lệnh

[core]
project = <PROJECT_ID>

Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Kết quả của lệnh

Updated property [core/project].

Cloud Shell có một vài biến môi trường, trong đó có GOOGLE_CLOUD_PROJECT chứa tên của dự án Cloud hiện tại. Chúng ta sẽ sử dụng hàm này ở nhiều nơi trong lớp học lập trình này. Bạn có thể xem bằng cách chạy:

echo $GOOGLE_CLOUD_PROJECT

Bật API

Trong các bước sau, bạn sẽ thấy những dịch vụ này cần thiết ở đâu (và lý do tại sao). Tuy nhiên, hiện tại, hãy chạy lệnh này để cấp cho dự án của bạn quyền truy cập vào các dịch vụ Compute Engine, Container Registry và Vertex AI:

gcloud services enable compute.googleapis.com         \
                       containerregistry.googleapis.com  \
                       aiplatform.googleapis.com

Thao tác này sẽ tạo ra một thông báo thành công tương tự như sau:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

Tạo bộ chứa Cloud Storage

Để chạy một công việc huấn luyện trên Vertex AI, chúng ta cần có một bộ chứa bộ nhớ để lưu trữ các thành phần mô hình đã lưu. Bộ chứa phải là theo khu vực. Chúng ta đang sử dụng us-central ở đây, nhưng bạn có thể sử dụng một khu vực khác (chỉ cần thay thế khu vực đó trong suốt lớp học này). Nếu đã có bộ chứa, bạn có thể bỏ qua bước này.

Chạy các lệnh sau trong dòng lệnh Cloud Shell để tạo một nhóm:

BUCKET_NAME=gs://$GOOGLE_CLOUD_PROJECT-bucket
gsutil mb -l us-central1 $BUCKET_NAME

Tiếp theo, chúng ta sẽ cấp quyền truy cập vào bộ chứa này cho tài khoản dịch vụ Compute Engine. Thao tác này sẽ đảm bảo rằng Vertex Pipelines có các quyền cần thiết để ghi tệp vào bộ chứa này. Chạy lệnh sau để thêm quyền này:

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

Tạo một thực thể Vertex AI Workbench

Trong phần Vertex AI của Cloud Console, hãy nhấp vào Workbench (Bảng điều khiển):

Trình đơn Vertex AI

Tại đó, trong sổ tay do người dùng quản lý, hãy nhấp vào Sổ tay mới:

Tạo sổ ghi chú mới

Sau đó, chọn loại thực thể TensorFlow Enterprise 2.3 (có LTS) không có GPU:

Phiên bản TFE

Sử dụng các tuỳ chọn mặc định rồi nhấp vào Tạo.

Mở Sổ tay

Sau khi tạo thực thể, hãy chọn Mở JupyterLab:

Mở Sổ tay

4. Thiết lập Quy trình Vertex

Chúng ta cần cài đặt thêm một số thư viện để sử dụng Vertex Pipelines:

  • Kubeflow Pipelines: Đây là SDK mà chúng ta sẽ sử dụng để xây dựng quy trình. Vertex Pipelines hỗ trợ các quy trình đang chạy được xây dựng bằng cả Quy trình Kubeflow hoặc TFX.
  • SDK Vertex AI: SDK này tối ưu hoá trải nghiệm gọi API Vertex AI. Chúng ta sẽ sử dụng mã này để chạy quy trình trên Vertex AI.

Tạo sổ tay Python và cài đặt thư viện

Trước tiên, trên trình đơn Trình chạy trong phiên bản của Sổ tay, hãy tạo một sổ tay bằng cách chọn Python 3:

Tạo sổ tay Python3

Để cài đặt cả hai dịch vụ mà chúng ta sẽ sử dụng trong lớp học lập trình này, trước tiên, hãy đặt cờ người dùng trong một ô trong sổ tay:

USER_FLAG = "--user"

Sau đó, chạy lệnh sau từ sổ tay của bạn:

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

Sau khi cài đặt các gói này, bạn cần khởi động lại hạt nhân:

import os

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

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

Tiếp theo, hãy kiểm tra để đảm bảo bạn đã cài đặt đúng phiên bản SDK KFP. Phải lớn hơn hoặc bằng 1,8:

!python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"

Sau đó, hãy xác nhận rằng phiên bản SDK Vertex AI của bạn là >= 1.6.2:

!pip list | grep aiplatform

Đặt mã dự án và bộ chứa

Trong suốt lớp học này, bạn sẽ tham chiếu mã dự án trên Google Cloud và bộ chứa mà bạn đã tạo trước đó. Tiếp theo, chúng ta sẽ tạo biến cho từng biến đó.

Nếu không biết mã dự án của mình, bạn có thể lấy mã đó bằng cách chạy mã sau:

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 giá trị này tại đây:

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

Sau đó, hãy tạo một biến để lưu trữ tên bộ chứa. Nếu bạn đã tạo trong lớp học này, thì cách sau sẽ hoạt động. Nếu không, bạn cần phải đặt giá trị này theo cách thủ công:

BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"

Nhập thư viện

Thêm phần sau đây để nhập các thư viện mà chúng ta sẽ sử dụng trong suốt lớp học lập trình này:

import matplotlib.pyplot as plt
import pandas as pd

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline, component, Artifact, Dataset, Input, Metrics, Model, Output, InputPath, OutputPath

from google.cloud import aiplatform

# We'll use this namespace for metadata querying
from google.cloud import aiplatform_v1

Xác định hằng số

Việc cuối cùng chúng ta cần làm trước khi xây dựng quy trình là xác định một số biến hằng. PIPELINE_ROOT là đường dẫn Cloud Storage nơi các cấu phần phần mềm do quy trình của chúng ta tạo ra sẽ được ghi. Ở đây, chúng ta đang sử dụng us-central1 làm khu vực, nhưng nếu bạn đã sử dụng một khu vực khác khi tạo bộ chứa, hãy cập nhật biến REGION trong mã dưới đây:

PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
REGION="us-central1"

PIPELINE_ROOT = f"{BUCKET_NAME}/pipeline_root/"
PIPELINE_ROOT

Sau khi chạy mã trên, bạn sẽ thấy thư mục gốc cho quy trình của mình được in ra. Đây là vị trí trong Cloud Storage nơi các cấu phần phần mềm trong quy trình của bạn sẽ được ghi. Tệp này sẽ có định dạng gs://YOUR-BUCKET-NAME/pipeline_root/

5. Tạo quy trình 3 bước bằng các thành phần tuỳ chỉnh

Trọng tâm của lớp học lập trình này là tìm hiểu siêu dữ liệu từ các lần chạy quy trình. Để làm được điều đó, chúng ta cần có một quy trình để chạy trên Vertex Pipelines, đây là nơi chúng ta sẽ bắt đầu. Ở đây, chúng ta sẽ xác định một quy trình gồm 3 bước với các thành phần tuỳ chỉnh sau:

  • get_dataframe: Truy xuất dữ liệu từ bảng BigQuery và chuyển đổi dữ liệu đó thành Pandas DataFrame
  • train_sklearn_model: Sử dụng DataFrame Pandas để huấn luyện và xuất mô hình Scikit Learn, cùng với một số chỉ số
  • deploy_model: Triển khai mô hình Scikit Learn đã xuất sang một điểm cuối trong Vertex AI

Trong quy trình này, chúng ta sẽ sử dụng Dữ liệu về đậu khô của UCI Machine Learning, từ: KOKLU, M. và OZKAN, I.A., (2020), "Phân loại nhiều lớp đậu khô bằng kỹ thuật máy học và thị giác máy tính". Trong Máy tính và Điện tử trong nông nghiệp, 174, 105507. DOI.

Đây là một tập dữ liệu dạng bảng và trong quy trình của mình, chúng ta sẽ sử dụng tập dữ liệu này để huấn luyện, đánh giá và triển khai một mô hình Scikit-learn phân loại đậu thành một trong 7 loại dựa trên đặc điểm của đậu. Hãy bắt đầu lập trình!

Tạo các thành phần dựa trên hàm Python

Bằng cách sử dụng SDK KFP, chúng ta có thể tạo các thành phần dựa trên hàm Python. Chúng ta sẽ sử dụng giá trị đó cho 3 thành phần trong quy trình này.

Tải dữ liệu BigQuery xuống rồi chuyển đổi thành tệp CSV

Trước tiên, chúng ta sẽ tạo thành phần get_dataframe:

@component(
    packages_to_install=["google-cloud-bigquery", "pandas", "pyarrow", "db-dtypes"],
    base_image="python:3.9",
    output_component_file="create_dataset.yaml"
)
def get_dataframe(
    bq_table: str,
    output_data_path: OutputPath("Dataset")
):
    from google.cloud import bigquery
    import pandas as pd
    import os

    project_number = os.environ["CLOUD_ML_PROJECT_ID"]
    bqclient = bigquery.Client(project=project_number)
    table = bigquery.TableReference.from_string(
        bq_table
    )
    rows = bqclient.list_rows(
        table
    )
    dataframe = rows.to_dataframe(
        create_bqstorage_client=True,
    )
    dataframe = dataframe.sample(frac=1, random_state=2)
    dataframe.to_csv(output_data_path)

Hãy xem xét kỹ hơn những gì đang xảy ra trong thành phần này:

  • Trình trang trí @component biên dịch hàm này thành một thành phần khi quy trình được chạy. Bạn sẽ sử dụng phương thức này bất cứ khi nào viết một thành phần tuỳ chỉnh.
  • Tham số base_image chỉ định hình ảnh vùng chứa mà thành phần này sẽ sử dụng.
  • Thành phần này sẽ sử dụng một số thư viện Python mà chúng ta chỉ định thông qua tham số packages_to_install.
  • Thông số output_component_file là không bắt buộc và chỉ định tệp yaml để ghi thành phần đã biên dịch. Sau khi chạy ô, bạn sẽ thấy tệp được ghi vào thực thể sổ tay của mình. Nếu muốn chia sẻ thành phần này với người khác, bạn có thể gửi cho họ tệp yaml đã tạo và yêu cầu họ tải tệp đó bằng cách sau:
# This is optional, it shows how to load a component from a yaml file
# dataset_component = kfp.components.load_component_from_file('./create_dataset.yaml')
  • Tiếp theo, thành phần này sử dụng thư viện ứng dụng BigQuery Python để tải dữ liệu của chúng ta từ BigQuery xuống Pandas DataFrame, sau đó tạo một cấu phần phần mềm đầu ra của dữ liệu đó dưới dạng tệp CSV. Dữ liệu này sẽ được chuyển dưới dạng dữ liệu đầu vào cho thành phần tiếp theo

Tạo một thành phần để huấn luyện mô hình học tập theo Scikit

Trong thành phần này, chúng ta sẽ lấy tệp CSV đã tạo trước đó và sử dụng tệp này để huấn luyện mô hình cây quyết định Scikit-learn. Thành phần này xuất mô hình Scikit thu được, cùng với một cấu phần phần mềm Metrics bao gồm độ chính xác, khung và kích thước của tập dữ liệu dùng để huấn luyện mô hình:

@component(
    packages_to_install=["sklearn", "pandas", "joblib", "db-dtypes"],
    base_image="python:3.9",
    output_component_file="beans_model_component.yaml",
)
def sklearn_train(
    dataset: Input[Dataset],
    metrics: Output[Metrics],
    model: Output[Model]
):
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import roc_curve
    from sklearn.model_selection import train_test_split
    from joblib import dump

    import pandas as pd
    df = pd.read_csv(dataset.path)
    labels = df.pop("Class").tolist()
    data = df.values.tolist()
    x_train, x_test, y_train, y_test = train_test_split(data, labels)

    skmodel = DecisionTreeClassifier()
    skmodel.fit(x_train,y_train)
    score = skmodel.score(x_test,y_test)
    print('accuracy is:',score)

    metrics.log_metric("accuracy",(score * 100.0))
    metrics.log_metric("framework", "Scikit Learn")
    metrics.log_metric("dataset_size", len(df))
    dump(skmodel, model.path + ".joblib")

Xác định một thành phần để tải lên và triển khai mô hình lên Vertex AI

Cuối cùng, thành phần cuối cùng của chúng ta sẽ lấy mô hình đã huấn luyện từ bước trước, tải mô hình đó lên Vertex AI và triển khai mô hình đó đến một điểm cuối:

@component(
    packages_to_install=["google-cloud-aiplatform"],
    base_image="python:3.9",
    output_component_file="beans_deploy_component.yaml",
)
def deploy_model(
    model: Input[Model],
    project: str,
    region: str,
    vertex_endpoint: Output[Artifact],
    vertex_model: Output[Model]
):
    from google.cloud import aiplatform

    aiplatform.init(project=project, location=region)

    deployed_model = aiplatform.Model.upload(
        display_name="beans-model-pipeline",
        artifact_uri = model.uri.replace("model", ""),
        serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest"
    )
    endpoint = deployed_model.deploy(machine_type="n1-standard-4")

    # Save data to the output params
    vertex_endpoint.uri = endpoint.resource_name
    vertex_model.uri = deployed_model.resource_name

Ở đây, chúng ta sẽ sử dụng SDK Vertex AI để tải mô hình lên bằng cách sử dụng vùng chứa tạo sẵn để dự đoán. Sau đó, Google Play sẽ triển khai mô hình đến một điểm cuối và trả về URI cho cả tài nguyên mô hình và tài nguyên điểm cuối. Trong phần sau của lớp học lập trình này, bạn sẽ tìm hiểu thêm về ý nghĩa của việc trả về dữ liệu này dưới dạng cấu phần phần mềm.

Xác định và biên dịch quy trình

Giờ đây, khi đã xác định được 3 thành phần, tiếp theo, chúng ta sẽ tạo định nghĩa quy trình. Phần này mô tả cách cấu phần phần mềm đầu vào và đầu ra luân chuyển giữa các bước:

@pipeline(
    # Default pipeline root. You can override it when submitting the pipeline.
    pipeline_root=PIPELINE_ROOT,
    # A name for the pipeline.
    name="mlmd-pipeline",
)
def pipeline(
    bq_table: str = "",
    output_data_path: str = "data.csv",
    project: str = PROJECT_ID,
    region: str = REGION
):
    dataset_task = get_dataframe(bq_table)

    model_task = sklearn_train(
        dataset_task.output
    )

    deploy_task = deploy_model(
        model=model_task.outputs["model"],
        project=project,
        region=region
    )

Thao tác sau đây sẽ tạo một tệp JSON mà bạn sẽ dùng để chạy quy trình:

compiler.Compiler().compile(
    pipeline_func=pipeline, package_path="mlmd_pipeline.json"
)

Bắt đầu chạy 2 quy trình

Tiếp theo, chúng ta sẽ bắt đầu 2 lần chạy quy trình. Trước tiên, hãy xác định dấu thời gian để sử dụng cho mã công việc của quy trình:

from datetime import datetime

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

Hãy nhớ rằng quy trình của chúng ta sẽ lấy một tham số khi chạy: bq_table mà chúng ta muốn sử dụng cho dữ liệu huấn luyện. Lần chạy quy trình này sẽ sử dụng phiên bản nhỏ hơn của tập dữ liệu beans:

run1 = aiplatform.PipelineJob(
    display_name="mlmd-pipeline",
    template_path="mlmd_pipeline.json",
    job_id="mlmd-pipeline-small-{0}".format(TIMESTAMP),
    parameter_values={"bq_table": "sara-vertex-demos.beans_demo.small_dataset"},
    enable_caching=True,
)

Tiếp theo, hãy tạo một quy trình chạy khác bằng cách sử dụng phiên bản lớn hơn của cùng một tập dữ liệu.

run2 = aiplatform.PipelineJob(
    display_name="mlmd-pipeline",
    template_path="mlmd_pipeline.json",
    job_id="mlmd-pipeline-large-{0}".format(TIMESTAMP),
    parameter_values={"bq_table": "sara-vertex-demos.beans_demo.large_dataset"},
    enable_caching=True,
)

Cuối cùng, hãy bắt đầu quá trình thực thi quy trình cho cả hai lần chạy. Tốt nhất là bạn nên thực hiện việc này trong hai ô riêng biệt của sổ tay để có thể xem kết quả cho mỗi lần chạy.

run1.submit()

Sau đó, hãy bắt đầu lần chạy thứ hai:

run2.submit()

Sau khi chạy ô này, bạn sẽ thấy một đường liên kết để xem từng quy trình trong bảng điều khiển Vertex AI. Hãy mở đường liên kết đó để xem thêm thông tin chi tiết về quy trình của bạn:

URL chạy quy trình

Khi quá trình này hoàn tất (quy trình này mất khoảng 10 đến 15 phút mỗi lần chạy), bạn sẽ thấy nội dung như sau:

Quy trình sklearn đã hoàn tất

Giờ đây, khi đã hoàn tất hai lần chạy quy trình, bạn có thể tìm hiểu kỹ hơn về các cấu phần phần mềm, chỉ số và dòng phân cấp của quy trình.

6. Tìm hiểu các cấu phần phần mềm và dòng phân cấp của quy trình

Trong biểu đồ quy trình, bạn sẽ thấy các hộp nhỏ sau mỗi bước. Đó là cấu phần phần mềm hoặc đầu ra được tạo từ một bước trong quy trình. Có nhiều loại cấu phần phần mềm. Trong quy trình cụ thể này, chúng ta có tập dữ liệu, chỉ số, mô hình và cấu phần phần mềm điểm cuối. Nhấp vào thanh trượt Mở rộng cấu phần phần mềm ở đầu giao diện người dùng để xem thêm chi tiết về từng cấu phần phần mềm:

Mở rộng cấu phần phần mềm

Khi nhấp vào một cấu phần phần mềm, bạn sẽ thấy thêm thông tin chi tiết về cấu phần phần mềm đó, bao gồm cả URI của cấu phần phần mềm. Ví dụ: khi nhấp vào cấu phần phần mềm vertex_endpoint, bạn sẽ thấy URI nơi bạn có thể tìm thấy điểm cuối đã triển khai đó trong bảng điều khiển Vertex AI:

Thông tin chi tiết về cấu phần phần mềm của điểm cuối

Cấu phần phần mềm Metrics cho phép bạn truyền các chỉ số tuỳ chỉnh được liên kết với một bước cụ thể trong quy trình. Trong thành phần sklearn_train của quy trình, chúng tôi đã ghi lại các chỉ số về độ chính xác, khung và kích thước tập dữ liệu của mô hình. Nhấp vào cấu phần phần mềm chỉ số để xem những thông tin chi tiết đó:

Chỉ số mô hình

Mỗi cấu phần phần mềm đều có Lineage (Dòng dõi) mô tả các cấu phần phần mềm khác mà cấu phần phần mềm đó kết nối. Nhấp lại vào cấu phần phần mềm vertex_endpoint của quy trình, rồi nhấp vào nút View Lineage (Xem dòng dõi):

Hiển thị dòng dõi

Thao tác này sẽ mở một thẻ mới để bạn có thể xem tất cả cấu phần phần mềm được kết nối với cấu phần phần mềm bạn đã chọn. Biểu đồ dòng dõi của bạn sẽ có dạng như sau:

Biểu đồ phân cấp thiết bị đầu cuối

Thao tác này cho chúng ta thấy mô hình, chỉ số và tập dữ liệu liên kết với điểm cuối này. Tại sao thông tin này hữu ích? Có thể bạn đã triển khai một mô hình cho nhiều điểm cuối, hoặc bạn cần biết tập dữ liệu cụ thể dùng để huấn luyện mô hình được triển khai đến điểm cuối mà bạn đang xem xét. Biểu đồ dòng dõi giúp bạn hiểu được từng cấu phần phần mềm trong ngữ cảnh của phần còn lại của hệ thống học máy. Bạn cũng có thể truy cập vào dòng dõi theo phương thức lập trình, như chúng ta sẽ thấy sau trong lớp học lập trình này.

7. So sánh các lần chạy quy trình

Một quy trình duy nhất có thể sẽ được chạy nhiều lần, có thể với các thông số đầu vào khác nhau, dữ liệu mới hoặc bởi thành viên trong nhóm của bạn. Để theo dõi các lần chạy quy trình, bạn nên có cách so sánh các lần chạy đó theo nhiều chỉ số. Trong phần này, chúng ta sẽ khám phá hai cách so sánh các lần chạy.

So sánh các lần chạy trong giao diện người dùng Pipelines

Trong Cloud Console, hãy chuyển đến trang tổng quan về Quy trình. Trang này cung cấp thông tin tổng quan về mọi lần chạy quy trình mà bạn đã thực thi. Kiểm tra hai lần chạy gần đây nhất, rồi nhấp vào nút So sánh ở trên cùng:

So sánh các lần chạy

Thao tác này sẽ đưa chúng ta đến một trang mà chúng ta có thể so sánh các tham số đầu vào và chỉ số cho từng lần chạy mà chúng ta đã chọn. Đối với hai lần chạy này, hãy lưu ý các bảng BigQuery, kích thước tập dữ liệu và giá trị độ chính xác khác nhau:

Chỉ số so sánh

Bạn có thể sử dụng chức năng giao diện người dùng này để so sánh nhiều lần chạy, thậm chí là các lần chạy từ nhiều quy trình.

So sánh các lần chạy bằng Vertex AI SDK

Với nhiều lần thực thi quy trình, bạn có thể muốn có một cách để lấy các chỉ số so sánh này theo phương thức lập trình để tìm hiểu sâu hơn về thông tin chi tiết về chỉ số và tạo hình ảnh trực quan.

Bạn có thể sử dụng phương thức aiplatform.get_pipeline_df() để truy cập siêu dữ liệu về lượt chạy. Ở đây, chúng ta sẽ lấy siêu dữ liệu cho hai lần chạy gần đây nhất của cùng một quy trình và tải siêu dữ liệu đó vào DataFrame Pandas. Tham số pipeline ở đây đề cập đến tên mà chúng ta đã đặt cho quy trình trong định nghĩa quy trình:

df = aiplatform.get_pipeline_df(pipeline="mlmd-pipeline")
df

Khi in DataFrame, bạn sẽ thấy nội dung như sau:

DataFrame chỉ số quy trình

Chúng ta chỉ thực thi quy trình này hai lần, nhưng bạn có thể tưởng tượng được số lượng chỉ số mà bạn sẽ có khi thực thi nhiều lần hơn. Tiếp theo, chúng ta sẽ tạo một hình ảnh tuỳ chỉnh bằng matplotlib để xem mối quan hệ giữa độ chính xác của mô hình và lượng dữ liệu dùng để huấn luyện.

Chạy lệnh sau trong một ô mới trong sổ tay:

plt.plot(df["metric.dataset_size"], df["metric.accuracy"],label="Accuracy")
plt.title("Accuracy and dataset size")
plt.legend(loc=4)
plt.show()

Bạn sẽ thấy như sau:

Biểu đồ siêu dữ liệu Matplotlib

8. Truy vấn các chỉ số của quy trình

Ngoài việc nhận DataFrame của tất cả chỉ số quy trình, bạn có thể muốn truy vấn các cấu phần phần mềm truy vấn theo phương thức lập trình được tạo trong hệ thống máy học của mình. Từ đó, bạn có thể tạo một trang tổng quan tuỳ chỉnh hoặc cho phép những người khác trong tổ chức của bạn xem thông tin chi tiết về các cấu phần phần mềm cụ thể.

Nhận tất cả cấu phần phần mềm của Mô hình

Để truy vấn các cấu phần phần mềm theo cách này, chúng ta sẽ tạo một MetadataServiceClient:

API_ENDPOINT = "{}-aiplatform.googleapis.com".format(REGION)
metadata_client = aiplatform_v1.MetadataServiceClient(
  client_options={
      "api_endpoint": API_ENDPOINT
  }
)

Tiếp theo, chúng ta sẽ tạo một yêu cầu list_artifacts đến điểm cuối đó và truyền một bộ lọc cho biết chúng ta muốn có cấu phần phần mềm nào trong phản hồi. Trước tiên, hãy lấy tất cả cấu phần phần mềm mô hình trong dự án. Để thực hiện việc đó, hãy chạy mã sau trong sổ tay:

MODEL_FILTER="schema_title = \"system.Model\""
artifact_request = aiplatform_v1.ListArtifactsRequest(
    parent="projects/{0}/locations/{1}/metadataStores/default".format(PROJECT_ID, REGION),
    filter=MODEL_FILTER
)
model_artifacts = metadata_client.list_artifacts(artifact_request)

Phản hồi model_artifacts thu được chứa một đối tượng có thể lặp lại cho mỗi cấu phần phần mềm mô hình trong dự án, cùng với siêu dữ liệu liên kết cho mỗi mô hình.

Lọc đối tượng và hiển thị trong DataFrame

Sẽ rất hữu ích nếu chúng ta có thể dễ dàng hình dung truy vấn cấu phần phần mềm thu được. Tiếp theo, hãy lấy tất cả các cấu phần phần mềm được tạo sau ngày 10 tháng 8 năm 2021 ở trạng thái LIVE. Sau khi chạy yêu cầu này, chúng ta sẽ hiển thị kết quả trong một DataFrame Pandas. Trước tiên, hãy thực thi yêu cầu:

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

Sau đó, hiển thị kết quả trong DataFrame:

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

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

df = pd.DataFrame.from_dict(data)
df

Bạn sẽ thấy nội dung như sau:

Khung dữ liệu cấu phần phần mềm đã lọc

Ngoài những tiêu chí đã thử ở đây, bạn cũng có thể lọc cấu phần phần mềm dựa trên các tiêu chí khác.

Vậy là bạn đã hoàn thành lớp học lập trình!

🎉 Xin chúc mừng! 🎉

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

  • Sử dụng SDK Quy trình Kubeflow để tạo quy trình máy học tạo một tập dữ liệu trong Vertex AI, đồng thời huấn luyện và triển khai mô hình Scikit-learn tuỳ chỉnh trên tập dữ liệu đó
  • Viết các thành phần quy trình tuỳ chỉnh tạo ra cấu phần phần mềm và siêu dữ liệu
  • So sánh các lần chạy Vertex Pipelines, cả trong Cloud Console và theo phương thức lập trình
  • Theo dõi dòng dõi của các cấu phần phần mềm do quy trình tạo
  • Truy vấn siêu dữ liệu chạy quy trình

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

9. Dọn dẹp

Để không bị tính phí, bạn nên xoá các tài nguyên được tạo trong suốt lớp học này.

Dừng hoặc xoá thực thể Notebooks

Nếu muốn tiếp tục sử dụng sổ tay mà bạn đã tạo trong lớp học 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 thực thể, hãy chọn Xoá:

Dừng thực thể

Xoá các điểm cuối Vertex AI

Để xoá điểm cuối mà bạn đã triển khai, hãy chuyển đến phần Điểm cuối của bảng điều khiển Vertex AI rồi nhấp vào biểu tượng xoá:

Xoá điểm cuối

Xoá bộ chứa 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ớ