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 từ các lần chạy Vertex Pipelines bằng Vertex ML Metadata.
Kiến thức bạn sẽ học được
Bạn sẽ tìm hiểu cách:
- Sử dụng Kubeflow Pipelines SDK để tạo một quy trình ML 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 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ác 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 bảng điều khiển Cloud 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 ra
- Truy vấn siêu dữ liệu của lượt chạy quy trình
Tổng chi phí để chạy bài tập 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 sản phẩm ML trên Google Cloud để mang đến 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à các mô hình tuỳ chỉnh có thể truy cập thông qua các dịch vụ riêng biệt. Sản phẩm mới này 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 mô hình và triển khai mô hình, Vertex AI còn có nhiều sản phẩm MLOps, bao gồm Vertex Pipelines, ML Metadata, Model Monitoring, Feature Store và nhiều sản phẩm khác. Bạn có thể xem tất cả các sản phẩm/dịch vụ của Vertex AI trong biểu đồ bên dưới.

Phòng thí nghiệm này tập trung vào Vertex Pipelines và Vertex ML Metadata.
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 ML lại hữu ích?
Trước khi đi sâu vào vấn đề này, hãy cùng tìm hiểu lý do bạn nên sử dụng một 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 ML bao gồm 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, có thể trở nên khó quản lý nếu bạn coi toàn bộ quy trình làm việc là một khối duy nhất. Khi bắt đầu mở rộng quy trình học máy, bạn có thể muốn chia sẻ quy trình học máy của mình với những người khác trong nhóm để họ có thể kích hoạt 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 đều 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 những sự kiện khác trong môi trường đám mây của mình, chẳng hạn như bắt đầu một lần chạy quy trình khi có dữ liệu huấn luyện mới.
Tóm tắt: các quy trình giúp bạn tự động hoá và tái tạo quy trình làm việc về học máy.
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 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ẽ làm việc trong một phiên Cloud Shell. Đây là một trình thông dịch lệnh do một máy ảo chạy trong đám mây của Google lưu trữ. 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ó được 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 bài thực hành, bạn có thể thử lại phần này trên máy tính của mình.

Kích hoạt Cloud Shell
Ở 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:

Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (bên dưới phần hiển thị đầ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). Sau đây là giao diện của màn hình xuất hiện một lần:

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là 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 rằng 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
Đầu ra 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
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của 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 trên đám mây hiện tại. Chúng ta sẽ sử dụng thông tin này ở nhiều nơi trong lớp học 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 nơi cần đến các dịch vụ này (và lý do), nhưng 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ư thông báo sau:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
Tạo một bộ chứa Cloud Storage
Để chạy một quy trình huấn luyện trên Vertex AI, chúng ta cần một vùng lưu trữ để lưu trữ các thành phần mô hình đã lưu. Nhóm này cần phải theo khu vực. Chúng ta sẽ 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 này trong toàn bộ phòng thí nghiệm). Nếu đã có một vùng 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 để 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 nhóm này cho tài khoản dịch vụ điện toán. 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 phiên bản Vertex AI Workbench
Trong phần Vertex AI của Cloud Console, hãy nhấp vào Workbench:

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

Sau đó, hãy chọn loại phiên bản TensorFlow Enterprise 2.3 (có LTS) không có GPU:

Sử dụng các lựa 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ở JupyterLab):

4. Thiết lập Vertex Pipelines
Bạn 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ẽ dùng để tạo quy trình. Vertex Pipelines hỗ trợ chạy các quy trình được tạo bằng cả Kubeflow Pipelines hoặc TFX.
- Vertex AI SDK: SDK này tối ưu hoá trải nghiệm gọi Vertex AI API. Chúng ta sẽ dùng công cụ 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, trong trình đơn Trình chạy của phiên bản Sổ tay, hãy tạo một sổ tay bằng cách chọn Python 3:

Để 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 ô sổ tay:
USER_FLAG = "--user"
Sau đó, hãy chạy lệnh sau trong 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. Tỷ lệ này 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 Vertex AI SDK của bạn là >= 1.6.2:
!pip list | grep aiplatform
Đặt mã dự án và nhóm của bạn
Trong suốt bài thực hành này, bạn sẽ tham chiếu đến mã dự án trên đám mây và vùng lưu trữ mà bạn đã tạo trước đó. Tiếp theo, chúng ta sẽ tạo các biến cho từng biến đó.
Nếu không biết mã dự án, bạn có thể chạy lệnh sau để lấy mã dự án:
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 thiết lập 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 nhóm của bạn. Nếu bạn đã tạo nó trong lớp học này, thì những bước sau sẽ có hiệu quả. Nếu không, bạn sẽ phải đặt thông số này theo cách thủ công:
BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"
Nhập thư viện
Thêm nội dung sau để 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 số. 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. Chúng ta đ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 vùng chứa, hãy cập nhật biến REGION trong mã bên dưới:
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 đoạn mã ở trên, bạn sẽ thấy thư mục gốc cho quy trình được in. Đâ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. Mã này sẽ có định dạng gs://YOUR-BUCKET-NAME/pipeline_root/
5. Tạo quy trình gồm 3 bước bằng các thành phần tuỳ chỉnh
Lớp học lập trình này tập trung vào việc tìm hiểu siêu dữ liệu từ các lượt chạy quy trình. Để làm được điều đó, chúng ta cần 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ừ một bảng BigQuery và chuyển đổi dữ liệu đó thành Pandas DataFrametrain_sklearn_model: Sử dụng Pandas DataFrame để 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 tập dữ liệu Đậu khô của UCI Machine Learning, từ: KOKLU, M. và OZKAN, I.A., (2020), "Phân loại nhiều lớp các loại đậu khô bằng kỹ thuật thị giác máy tính và học máy". Trong Computers and Electronics in Agriculture, 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 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
Bằng cách 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 dữ liệu đó cho 3 thành phần trong quy trình này.
Tải dữ liệu BigQuery xuống và chuyển đổi sang 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 cùng tìm hiểu kỹ hơn về những gì đang diễn ra trong thành phần này:
- Trình trang trí
@componentbiê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_imagechỉ đị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_filelà 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 phiên bản 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 sử dụng lệ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 một cấu phần phần mềm đầu ra của dữ liệu đó dưới dạng tệp CSV. Điều này sẽ được truyền dưới dạng đầu vào cho thành phần tiếp theo của chúng ta
Tạo một thành phần để huấn luyện mô hình Scikit-learn
Trong thành phần này, chúng ta sẽ lấy tệp CSV đã tạo trước đó và dùng tệp này để huấn luyện một 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 được 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 Vertex AI SDK để tải mô hình lên bằng vùng chứa dựng sẵn để dự đoán. Sau đó, nó 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à đ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ác cấu phần phần mềm.
Xác định và biên dịch quy trình
Giờ đây, sau khi xác định 3 thành phần, tiếp theo chúng ta sẽ tạo định nghĩa quy trình. Điều 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 nà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 hai quy trình
Tiếp theo, chúng ta sẽ bắt đầu hai 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ã nhận dạng công việc trong quy trình của chúng ta:
from datetime import datetime
TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")
Xin lưu ý rằng quy trình của chúng ta sẽ lấy một tham số khi chúng ta kích hoạt quy trình đó: bq_table mà chúng ta muốn dùng cho dữ liệu huấn luyện. Lần 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 lần chạy quy trình 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 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 ô sổ tay riêng biệt để có thể xem đầu ra 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. Mở đường liên kết đó để xem thêm thông tin chi tiết về quy trình của bạn:

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

Giờ đây, khi đã hoàn thành 2 lần chạy quy trình, bạn đã sẵn sàng xem xét kỹ hơn các cấu phần phần mềm, chỉ số và dòng dõi của quy trình.
6. Tìm hiểu về các cấu phần phần mềm và dòng dõi 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ó các cấu phần phần mềm tập dữ liệu, chỉ số, mô hình và điểm cuối. Nhấp vào thanh trượt Mở rộng các cấu phần phần mềm ở đầu giao diện người dùng để xem thêm thông tin chi tiết về từng cấu phần:

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:

Một 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 đó:

Mỗi cấu phần phần mềm đều có 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 đó đượ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, rồi nhấp vào nút Xem dòng dõi:

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

Điều này cho chúng ta thấy mô hình, chỉ số và tập dữ liệu được liên kết với điểm cuối này. Tại sao thông tin này hữu ích? Bạn có thể triển khai một mô hình đến nhiều điểm cuối hoặc cần biết tập dữ liệu cụ thể được dùng để huấn luyện mô hình được triển khai đến điểm cuối mà bạn đang xem. Biểu đồ dòng dõi giúp bạn hiểu rõ từng cấu phần phần mềm trong bối cảnh của phần còn lại trong 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
Có thể một quy trình duy nhất sẽ được chạy nhiều lần, có thể với các tham số đầu vào khác nhau, dữ liệu mới hoặc do nhiều người trong nhóm của bạn thực hiệ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 nhiều chỉ số. Trong phần này, chúng ta sẽ khám phá 2 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 của quy trình
Trong bảng điều khiển Cloud, hãy chuyển đến trang tổng quan về quy trình. Điều 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 hiện. Kiểm tra 2 lần chạy gần đây nhất rồi nhấp vào nút So sánh ở trên cùng:

Thao tác này sẽ đưa chúng ta đến một trang nơi chúng ta có thể so sánh các thông 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:

Bạn có thể sử dụng chức năng này trên giao diện người dùng để so sánh nhiều hơn 2 lần chạy, thậm chí là các lần 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 có thể muốn một cách để nhận 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ề chi tiết 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 vào siêu dữ liệu chạy. Ở đây, chúng ta sẽ lấy siêu dữ liệu cho 2 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 một Pandas DataFrame. 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:

Chúng ta chỉ thực thi quy trình hai lần ở đây, nhưng bạn có thể hình dung đượ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 trực quan 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 được dùng để huấn luyện.
Chạy lệnh sau trong một ô sổ tay mới:
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:

8. Truy vấn các chỉ số về quy trình
Ngoài việc nhận được một DataFrame gồm tất cả các chỉ số của quy trình, bạn có thể muốn truy vấn theo chương trình các cấu phần phần mềm được tạo trong hệ thống học máy 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ẽ thực hiện một yêu cầu list_artifacts đến điểm cuối đó và truyền một bộ lọc cho biết những cấu phần phần mềm mà chúng ta muốn trong phản hồi. Trước tiên, hãy lấy tất cả các cấu phần phần mềm trong dự án là các mô hình. Để thực hiện 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 từng 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 được liên kết cho từng mô hình.
Lọc cá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 tạo tác kết quả. 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 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 nội dung tương tự như sau:

Ngoài những tiêu chí bạn đã 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 này!
🎉 Xin chúc mừng! 🎉
Bạn đã tìm hiểu cách sử dụng Vertex AI để:
- Sử dụng Kubeflow Pipelines SDK để tạo một quy trình ML 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 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ác 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 bảng điều khiển Cloud 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 ra
- Truy vấn siêu dữ liệu của lượt 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 đã tạo trong suốt quá trình thực hành này.
Dừng hoặc xoá phiên bản Notebooks
Nếu muốn tiếp tục sử dụng sổ tay 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. Trong giao diện người dùng Notebook trên 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 này, hãy chọn Xoá:

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 trong bảng điều khiển Vertex AI rồi nhấp vào biểu tượng xoá:

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