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 phòng thí nghiệm này, bạn sẽ tìm hiểu cách phân tích siêu dữ liệu khi chạy Quy trình công nghệ Vertex bằng Siêu dữ liệu máy học của Vertex.

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 cấu phần phần mềm và siêu dữ liệu
  • So sánh các quy trình chạy Vertex Pipelines, cả trong bảng điều khiển Cloud và theo phương thức lập trình
  • Theo dõi sự khác biệt nối tiếp 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ổ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

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.

Ngoài các dịch vụ huấn luyện và triển khai mô hình, Vertex AI còn có nhiều sản phẩm MLOps như Vertex Pipelines, ML Metadata, Giám sát mô hình, Feature Store và nhiều sản phẩm khác. Bạn có thể xem tất cả sản phẩm mà Vertex AI cung cấp trong biểu đồ bên dưới.

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

Phòng thí nghiệm này tập trung vào Quy trình công nghệ đỉnh caoSiêu dữ liệu máy học đỉnh cao.

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 tìm hiểu kỹ hơn, trước tiên, hãy 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 công việc 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 siêu tham số, đá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 trình công nghệ học máy, bạn nên chia sẻ quy trình công việc với công nghệ này với những thành viên khác trong nhóm để họ có thể chạy quy trình và đóng góp mã. Nếu không có một quy trình đáng tin cậy và có thể tái lập, 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, đồng thời theo dõi dữ liệu đầu vào và đầu ra của mỗi bước theo cách có thể tái lập. 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 đám mây, chẳng hạn như bắt đầu một quy trình chạy khi có dữ liệu huấn luyện mới.

Tl;dr: quy trình giúp bạn tự động hoátái hiện quy trình công nghệ học máy.

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

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.

Khởi động Cloud Shell

Trong phòng thí nghiệm này, bạn sẽ thực hiện phiên Cloud Shell, đây là phiên dịch lệnh được lưu trữ bởi một máy ảo chạy trên đám mây của Google. Dù bạn có thể dễ dàng chạy phần này trên máy tính của mình, nhưng việc sử dụng Cloud Shell sẽ giúp mọi người có thể tiếp cận trải nghiệm có thể tái tạo trong một môi trường nhất quán. Sau phòng thí nghiệm này, bạn có thể thử lại phần này trên máy tính của mình.

Cho phép 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 trước đây bạn chưa từng khởi động Cloud Shell, thì 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ề ứng dụng này. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không thấy thông báo đó nữa). Màn hình một lần đó sẽ có dạng như sau:

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.

Init Cloud Shell

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Trong lớp học lập trình này, đa số mọi người đều có thể thực hiện 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.

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ả 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ả lệnh

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

Kết quả lệnh

Updated property [core/project].

Cloud Shell có một số biến môi trường, trong đó có GOOGLE_CLOUD_PROJECT chứa tên của dự án Cloud hiện tại của chúng tôi. Chúng tôi sẽ dùng dữ liệu này ở nhiều vị trí trong phòng thí nghiệm này. Bạn có thể xem chỉ số này bằng cách chạy:

echo $GOOGLE_CLOUD_PROJECT

Bật API

Trong các bước sau, bạn sẽ biết những dịch vụ này cần thiết ở đâu (và vì sao). Tuy nhiên, bây giờ, 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ư thông báo sau:

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

Tạo bộ chứa Cloud Storage

Để chạy công việc huấn luyện trên Vertex AI, chúng tôi cần có một bộ chứa lưu trữ để lưu trữ những thành phần mô hình đã lưu. Bộ chứa phải là theo khu vực. Chúng tôi đang sử dụng us-central tại đây, nhưng bạn vẫn có thể sử dụng một khu vực khác (chỉ cần thay thế khu vực đó trong toàn bộ phòng thí nghiệm 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 thiết bị đầu cuối Cloud Shell của bạn để tạo một bộ chứa:

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ụ điện toán của mình. Điều này giúp đả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 mục Vertex AI trên Cloud Console, hãy nhấp vào Workbench:

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ổ tay mới

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

Thực thể 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 phiên bản, hãy chọn Open JupyterLab:

Mở Sổ tay

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

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

  • Quy trình Kubeflow: Đây là SDK mà chúng tôi sẽ sử dụng để xây dựng quy trình của mì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.
  • Vertex AI SDK: SDK này tối ưu hoá trải nghiệm để gọi Vertex AI API. Chúng tôi sẽ dùng dữ liệu này để vận hành 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 phòng thí nghiệm này, trước tiên hãy đặt cờ người dùng trong một ô của 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 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 KFP SDK. Giá trị này phải >=1,8:

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

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

!pip list | grep aiplatform

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

Trong phòng thí nghiệm này, bạn sẽ đề cập đến mã dự án trên Cloud của mình 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 loại.

Nếu không biết mã dự án, bạn có thể lấy mã này bằng cách chạy lệnh 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 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 mã trong phòng thí nghiệm này, thì các bước sau sẽ có hiệu lực. Nếu không, bạn cần đặt chế độ cài đặt 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

Định nghĩa hằng số

Điều 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 không đổi. PIPELINE_ROOT là đường dẫn của Cloud Storage, nơi các cấu phần phần mềm do quy trình của chúng tôi tạo ra sẽ được ghi. Chúng tôi đang sử dụng us-central1 làm khu vực ở đây, nhưng nếu bạn đã sử dụng một khu vực khác khi tạo bộ chứa của mình, hãy cập nhật biến REGION trong đoạn 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í của 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. Mã này sẽ có định dạng gs://YOUR-BUCKET-NAME/pipeline_root/

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

Trọng tâm của phòng thí nghiệm 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 quy trình 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 Pandas DataFrame để huấn luyện và xuất mô hình Scikit Learn cùng một số chỉ số
  • deploy_model: Triển khai mô hình Scikit Learn đã xuất cho một điểm cuối trong Vertex AI

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

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

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

Khi sử dụng KFP SDK, chúng ta có thể tạo các thành phần dựa trên các 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ẽ dùng thuộc tính này mỗi khi 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.
  • Tham 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 vào đó. 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 như 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 tôi từ BigQuery xuống Pandas DataFrame, sau đó tạo 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 đó để huấn luyện mô hình cây quyết định cho tính năng Học tập bằng Scikit. Thành phần này sẽ xuất mô hình Scikit thu được, cùng với 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 tập dữ liệu của 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 cho Vertex AI

Cuối cùng, thành phần cuối cùng sẽ sử dụng 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 tôi đang sử dụng Vertex AI SDK để tải mô hình lên bằng vùng chứa tạo sẵn cho tính năng 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

Bây giờ, chúng ta đã 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ác 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 hai 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 nhận một tham số khi chạy: bq_table mà chúng ta muốn dùng để huấn luyện dữ liệu. Quá trình chạy quy trình này sẽ sử dụng một phiên bản nhỏ hơn của tập dữ liệu đậu:

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 khác chạy 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 thực thi quy trình cho cả hai lần chạy. Bạn nên thực hiện việc này trong 2 ô riêng biệt trong sổ tay để có thể xem kết quả cho mỗi lần chạy.

run1.submit()

Sau đó, 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 của Vertex AI. Mở đường liên kết đó để xem thêm chi tiết về quy trình của bạn:

URL chạy quy trình

Sau khi quá trình hoàn tất (quy trình này mất khoảng 10-15 phút mỗi lần chạy), bạn sẽ thấy 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ác cấu phần phần mềm (artifact) hoặc dữ liệu đầ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ô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 đ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. Hãy nhấp vào cấu phần phần mềm chỉ số để xem các thông tin chi tiết đó:

Chỉ số của mô hình

Mỗi cấu phần phần mềm đều có Lineage (Dòng tin), mô tả các cấu phần phần mềm khác được 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, sau đó nhấp vào nút Xem dòng chữ:

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 lệnh của bạn sẽ có dạng như sau:

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

Dữ liệu này cho chúng tôi biết 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 tính năng 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 đồ nối tiếp giúp bạn hiểu rõ từng cấu phần phần mềm trong bối cảnh 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 thừa theo phương thức lập trình, như chúng ta sẽ thấy ở phần sau của 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 chúng theo các chỉ số khác nhau. 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 bảng điều khiển Cloud, hãy chuyển đến trang tổng quan về Đường dẫn. Thao tác 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

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

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 hơn hai lần chạy, thậm chí chạy từ các quy trình khác nhau.

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 nên có cách lập trình để thu thập các chỉ số so sánh này nhằm tìm hiểu kỹ hơn thông tin chi tiết về các chỉ số và tạo hình ảnh trực quan.

Bạn có thể dùng phương thức aiplatform.get_pipeline_df() để truy cập vào siêu dữ liệu đang chạy. Tại đâ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 Pandas DataFrame. Tham số pipeline ở đây là tên mà chúng tôi đã đặ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 giao diện như sau:

Các chỉ số quy trình DataFrame

Chúng ta mới chỉ thực thi quy trình 2 lần ở đây, nhưng bạn có thể tưởng tượng mình sẽ có bao nhiêu chỉ số với nhiều lần thực thi 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 cho 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 chỉ số 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 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ẽ gửi một yêu cầu list_artifacts đến điểm cuối đó và chuyển một bộ lọc cho biết chúng ta muốn 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. Để làm việc đó, hãy chạy lệnh sau trong sổ tay của bạn:

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ủa bạn, cùng với siêu dữ liệu liên quan cho từng 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 trực quan hoá truy vấn cấu phần phần mềm tạo ra. 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 Pandas DataFrame. 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 giao diện như sau:

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

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

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 để:

  • 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 cấu phần phần mềm và siêu dữ liệu
  • So sánh các quy trình chạy Vertex Pipelines, cả trong bảng điều khiển Cloud và theo phương thức lập trình
  • Theo dõi sự khác biệt nối tiếp 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 này.

9. 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.

Dừng hoặc xoá thực thể 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ể

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

Để xoá điểm cuối bạn đã triển khai, hãy chuyển đến phần Điểm cuối trong 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ớ