Использование метаданных Vertex ML с конвейерами

1. Обзор

В этой лабораторной работе вы узнаете, как анализировать метаданные ваших запусков Vertex Pipelines с помощью метаданных Vertex ML .

Что вы узнаете

Вы узнаете, как:

  • Используйте Kubeflow Pipelines SDK для создания конвейера машинного обучения, который создает набор данных в Vertex AI, а затем обучает и развертывает пользовательскую модель обучения Scikit на этом наборе данных.
  • Написание пользовательских компонентов конвейера, которые генерируют артефакты и метаданные.
  • Сравнение запусков Vertex Pipelines как в облачной консоли, так и программно.
  • Проследите происхождение артефактов, генерируемых конвейером.
  • Запросите метаданные запуска конвейера

Общая стоимость запуска этой лаборатории в Google Cloud составляет около 2 долларов США .

2. Знакомство с Vertex AI

В этой лаборатории используется новейшее предложение продуктов искусственного интеллекта, доступное в Google Cloud. Vertex AI интегрирует предложения машинного обучения в Google Cloud в единый процесс разработки. Раньше модели, обученные с помощью AutoML, и пользовательские модели были доступны через отдельные сервисы. Новое предложение объединяет оба API в одном API, а также другие новые продукты. Вы также можете перенести существующие проекты на Vertex AI.

Помимо услуг по обучению и развертыванию моделей, Vertex AI также включает в себя различные продукты MLOps, в том числе Vertex Pipelines, метаданные машинного обучения, мониторинг моделей, хранилище функций и многое другое. Вы можете увидеть все предложения продуктов Vertex AI на диаграмме ниже.

Обзор продукта Vertex

Эта лабораторная работа посвящена конвейерам Vertex и метаданным Vertex ML .

Если у вас есть отзывы о Vertex AI, посетите страницу поддержки .

Чем полезны конвейеры машинного обучения?

Прежде чем мы углубимся, давайте сначала поймем, почему вам нужно использовать конвейер. Представьте, что вы строите рабочий процесс машинного обучения, который включает обработку данных, обучение модели, настройку гиперпараметров, оценку и развертывание модели. Каждый из этих шагов может иметь разные зависимости, которые могут стать громоздкими, если рассматривать весь рабочий процесс как монолит. Когда вы начнете масштабировать свой процесс машинного обучения, вы, возможно, захотите поделиться своим рабочим процессом машинного обучения с другими членами вашей команды, чтобы они могли запустить его и внести свой код. Без надежного и воспроизводимого процесса это может оказаться затруднительным. При использовании конвейеров каждый шаг процесса машинного обучения представляет собой отдельный контейнер. Это позволяет вам разрабатывать шаги независимо и отслеживать входные и выходные данные каждого шага воспроизводимым образом. Вы также можете запланировать или инициировать запуск вашего конвейера на основе других событий в вашей облачной среде, например запуск конвейера при появлении новых данных обучения.

Конвейеры tl;dr : помогают автоматизировать и воспроизвести рабочий процесс машинного обучения.

3. Настройка облачной среды

Для запуска этой лаборатории кода вам понадобится проект Google Cloud Platform с включенной оплатой. Чтобы создать проект, следуйте инструкциям здесь .

Запустить Cloud Shell

В этой лабораторной работе вы будете работать в сеансе Cloud Shell , который представляет собой интерпретатор команд, размещенный на виртуальной машине, работающей в облаке Google. Вы также можете легко запустить этот раздел локально на своем компьютере, но использование Cloud Shell дает каждому доступ к воспроизводимому опыту в согласованной среде. После лабораторной работы вы можете повторить этот раздел на своем компьютере.

Авторизовать облачную оболочку

Активировать Cloud Shell

В правом верхнем углу Cloud Console нажмите кнопку ниже, чтобы активировать Cloud Shell :

Активировать Cloud Shell

Если вы никогда раньше не запускали Cloud Shell, вам будет представлен промежуточный экран (ниже сгиба) с описанием того, что это такое. В этом случае нажмите «Продолжить» (и вы больше никогда этого не увидите). Вот как выглядит этот одноразовый экран:

Настройка Cloud Shell

Подготовка и подключение к Cloud Shell займет всего несколько минут.

Инициализация Cloud Shell

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью просто браузера или Chromebook.

После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен идентификатор вашего проекта.

Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:

gcloud auth list

Вывод команды

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

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

Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:

gcloud config list project

Вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить это с помощью этой команды:

gcloud config set project <PROJECT_ID>

Вывод команды

Updated property [core/project].

Cloud Shell имеет несколько переменных среды, включая GOOGLE_CLOUD_PROJECT , которая содержит имя нашего текущего проекта Cloud. Мы будем использовать это в разных местах этой лабораторной работы. Вы можете увидеть это, запустив:

echo $GOOGLE_CLOUD_PROJECT

Включить API

На последующих шагах вы увидите, где нужны эти службы (и почему), а пока запустите эту команду, чтобы предоставить вашему проекту доступ к службам Compute Engine, Container Registry и Vertex AI:

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

Это должно привести к успешному сообщению, похожему на это:

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

Создайте сегмент облачного хранилища

Чтобы запустить задание обучения на Vertex AI, нам понадобится сегмент хранилища для хранения сохраненных ресурсов модели. Ведро должно быть региональным. Здесь мы используем us-central , но вы можете использовать другой регион (просто замените его в ходе этой лабораторной работы). Если у вас уже есть ведро, вы можете пропустить этот шаг.

Выполните следующие команды в терминале Cloud Shell, чтобы создать корзину:

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

Далее мы предоставим нашей учетной записи вычислительной службы доступ к этому сегменту. Это гарантирует, что Vertex Pipelines имеет необходимые разрешения для записи файлов в эту корзину. Запустите следующую команду, чтобы добавить это разрешение:

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

Создайте экземпляр Vertex AI Workbench.

В разделе Vertex AI облачной консоли нажмите Workbench:

Меню вершинного AI

Оттуда в блокнотах, управляемых пользователями , нажмите «Новый блокнот» :

Создать новый блокнот

Затем выберите тип экземпляра TensorFlow Enterprise 2.3 (с LTS) без графических процессоров :

Экземпляр TFE

Используйте параметры по умолчанию и нажмите «Создать» .

Откройте свой блокнот

После создания экземпляра выберите «Открыть JupyterLab» :

Открыть блокнот

4. Настройка вершинных конвейеров

Чтобы использовать Vertex Pipelines, нам необходимо установить несколько дополнительных библиотек:

  • Kubeflow Pipelines : это SDK, который мы будем использовать для создания нашего конвейера. Vertex Pipelines поддерживает запуск конвейеров, созданных с помощью Kubeflow Pipelines или TFX.
  • Vertex AI SDK : этот SDK оптимизирует процесс вызова Vertex AI API. Мы будем использовать его для запуска нашего конвейера на Vertex AI.

Создайте блокнот Python и установите библиотеки.

Сначала в меню запуска экземпляра ноутбука создайте блокнот, выбрав Python 3 :

Создать блокнот Python3

Чтобы установить обе службы, которые мы будем использовать в этой лабораторной работе, сначала установите пользовательский флаг в ячейке блокнота:

USER_FLAG = "--user"

Затем запустите из своего блокнота следующее:

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

После установки этих пакетов вам необходимо перезапустить ядро:

import os

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

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

Затем убедитесь, что вы правильно установили версию KFP SDK. Оно должно быть >=1,8:

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

Затем убедитесь, что ваша версия Vertex AI SDK >= 1.6.2:

!pip list | grep aiplatform

Установите идентификатор проекта и корзину

На протяжении всего практического занятия вы будете ссылаться на идентификатор своего облачного проекта и корзину, которую вы создали ранее. Далее мы создадим переменные для каждого из них.

Если вы не знаете идентификатор своего проекта, вы можете получить его, выполнив следующую команду:

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)

В противном случае установите его здесь:

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

Затем создайте переменную для хранения имени вашего сегмента. Если вы создали его в этой лабораторной работе, будет работать следующее. В противном случае вам придется установить это вручную:

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

Импортировать библиотеки

Добавьте следующее, чтобы импортировать библиотеки, которые мы будем использовать в этой лаборатории кода:

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

Определение констант

Последнее, что нам нужно сделать перед созданием нашего конвейера, — это определить некоторые постоянные переменные. PIPELINE_ROOT — это путь к облачному хранилищу, куда будут записываться артефакты, созданные нашим конвейером. В качестве региона мы используем us-central1 , но если при создании сегмента вы использовали другой регион, обновите переменную REGION в приведенном ниже коде:

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

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

После запуска приведенного выше кода вы должны увидеть напечатанный корневой каталог вашего конвейера. Это место в облачном хранилище, куда будут записываться артефакты из вашего конвейера. Он будет в формате gs://YOUR-BUCKET-NAME/pipeline_root/

5. Создание трехэтапного конвейера с пользовательскими компонентами

Основное внимание в этой лабораторной работе уделяется пониманию метаданных запусков конвейера. Для этого нам понадобится конвейер, работающий на Vertex Pipelines, с которого мы и начнем. Здесь мы определим трехэтапный конвейер со следующими пользовательскими компонентами:

  • get_dataframe : получить данные из таблицы BigQuery и преобразовать их в DataFrame Pandas.
  • train_sklearn_model : используйте Pandas DataFrame для обучения и экспорта модели Scikit Learn вместе с некоторыми метриками.
  • deploy_model : развертывание экспортированной модели Scikit Learn в конечной точке в Vertex AI.

В этом конвейере мы будем использовать набор данных UCI Machine Learning Dry Beans из: KOKLU, M. и OZKAN, IA, (2020), «Многоклассовая классификация сухих бобов с использованием методов компьютерного зрения и машинного обучения». В «Компьютерах и электронике в сельском хозяйстве», 174, 105507. DOI .

Это табличный набор данных, и в нашем конвейере мы будем использовать этот набор данных для обучения, оценки и развертывания модели обучения Scikit, которая классифицирует компоненты bean-компоненты по одному из 7 типов на основе их характеристик. Давайте начнем кодировать!

Создание компонентов на основе функций Python

Используя KFP SDK, мы можем создавать компоненты на основе функций Python. Мы будем использовать это для трех компонентов в этом конвейере.

Загрузите данные BigQuery и конвертируйте их в CSV.

Сначала мы создадим компонент 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)

Давайте подробнее посмотрим, что происходит в этом компоненте:

  • Декоратор @component компилирует эту функцию в компонент при запуске конвейера. Вы будете использовать это каждый раз, когда будете писать собственный компонент.
  • Параметр base_image указывает образ контейнера, который будет использовать этот компонент.
  • Этот компонент будет использовать несколько библиотек Python, которые мы указываем с помощью параметра packages_to_install .
  • Параметр output_component_file является необязательным и указывает файл yaml, в который будет записываться скомпилированный компонент. После запуска ячейки вы должны увидеть этот файл, записанный в экземпляр вашего блокнота. Если вы хотите поделиться этим компонентом с кем-то, вы можете отправить ему сгенерированный файл yaml и попросить загрузить его со следующим:
# 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')
  • Затем этот компонент использует клиентскую библиотеку BigQuery Python для загрузки наших данных из BigQuery в DataFrame Pandas, а затем создает выходной артефакт этих данных в виде CSV-файла. Это будет передано в качестве входных данных для нашего следующего компонента.

Создайте компонент для обучения модели обучения Scikit.

В этом компоненте мы возьмем CSV, который мы сгенерировали ранее, и будем использовать его для обучения модели дерева решений Scikit-learn. Этот компонент экспортирует полученную модель Scikit вместе с артефактом Metrics , который включает точность нашей модели, структуру и размер набора данных, использованного для ее обучения:

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

Определите компонент для загрузки и развертывания модели в Vertex AI.

Наконец, наш последний компонент возьмет обученную модель из предыдущего шага, загрузит ее в Vertex AI и развернет в конечной точке:

@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

Здесь мы используем Vertex AI SDK для загрузки модели с использованием предварительно созданного контейнера для прогнозирования . Затем он развертывает модель в конечной точке и возвращает URI как модели, так и ресурсам конечной точки. Далее в этой лаборатории вы узнаете больше о том, что значит возвращать эти данные в виде артефактов.

Определить и скомпилировать конвейер

Теперь, когда мы определили наши три компонента, мы создадим определение конвейера . Здесь описывается, как артефакты ввода и вывода передаются между этапами:

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

Следующее действие создаст файл JSON, который вы будете использовать для запуска конвейера:

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

Запустить два пробега конвейера

Далее мы запустим два запуска нашего конвейера. Сначала давайте определим временную метку, которая будет использоваться для идентификаторов заданий конвейера:

from datetime import datetime

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

Помните, что наш конвейер при запуске принимает один параметр: таблицу bq_table которую мы хотим использовать для обучения данных. Этот запуск конвейера будет использовать уменьшенную версию набора данных bean-компонентов:

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

Затем создайте еще один запуск конвейера, используя более крупную версию того же набора данных.

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

Наконец, запустите выполнение конвейера для обоих запусков. Лучше всего сделать это в двух отдельных ячейках блокнота, чтобы вы могли видеть результаты каждого запуска.

run1.submit()

Затем начните второй прогон:

run2.submit()

После запуска этой ячейки вы увидите ссылку для просмотра каждого конвейера в консоли Vertex AI. Откройте эту ссылку, чтобы увидеть более подробную информацию о вашем конвейере:

URL-адрес запуска конвейера

Когда он завершится (этот конвейер занимает около 10-15 минут на запуск), вы увидите что-то вроде этого:

Завершенный конвейер склеарна

Теперь, когда у вас есть два завершенных запуска конвейера, вы готовы более внимательно изучить артефакты конвейера, метрики и происхождение.

6. Понимание артефактов и происхождения конвейера

На графике конвейера после каждого шага вы увидите небольшие прямоугольники. Это артефакты или выходные данные, созданные на этапе конвейера. Существует много типов артефактов. В этом конкретном конвейере у нас есть наборы данных, метрики, модели и артефакты конечных точек. Нажмите на ползунок «Развернуть артефакты» в верхней части пользовательского интерфейса, чтобы просмотреть более подробную информацию о каждом из них:

Развернуть артефакты

Нажав на артефакт, вы увидите более подробную информацию о нем, включая его URI. Например, нажав на артефакт vertex_endpoint , вы увидите URI, по которому вы можете найти эту развернутую конечную точку в консоли Vertex AI:

Подробности об артефакте конечной точки

Артефакт Metrics позволяет передавать пользовательские метрики, связанные с определенным шагом конвейера. В компоненте sklearn_train нашего конвейера мы регистрировали показатели точности нашей модели, ее структуры и размера набора данных. Нажмите на артефакт метрики, чтобы просмотреть подробности:

Метрики модели

У каждого артефакта есть Lineage , который описывает другие артефакты, с которыми он связан. Снова щелкните артефакт vertex_endpoint вашего конвейера, а затем нажмите кнопку «Просмотреть происхождение» :

Показать происхождение

Откроется новая вкладка, где вы сможете увидеть все артефакты, связанные с выбранным вами. Ваш график происхождения будет выглядеть примерно так:

Граф происхождения конечных точек

Это показывает нам модель, метрики и набор данных, связанные с этой конечной точкой. Почему это полезно? Возможно, у вас есть модель, развернутая на нескольких конечных точках, или вам необходимо знать конкретный набор данных, используемый для обучения модели, развернутой на рассматриваемой вами конечной точке. График происхождения помогает вам понять каждый артефакт в контексте остальной части вашей системы машинного обучения. Вы также можете получить доступ к Lineage программным путем, как мы увидим позже в этой кодовой лаборатории.

7. Сравнение участков трубопровода

Скорее всего, один конвейер будет запускаться несколько раз, возможно, с разными входными параметрами, новыми данными или людьми из вашей команды. Чтобы отслеживать работу конвейера, было бы удобно иметь возможность сравнивать их по различным показателям. В этом разделе мы рассмотрим два способа сравнения прогонов.

Сравнение запусков в пользовательском интерфейсе Pipelines

В облачной консоли перейдите на панель мониторинга Pipelines . Это обеспечивает обзор каждого выполненного вами запуска конвейера. Проверьте два последних запуска, а затем нажмите кнопку «Сравнить» вверху:

Сравнить прогоны

Это приведет нас на страницу, где мы сможем сравнить входные параметры и метрики для каждого из выбранных нами запусков. Обратите внимание на разные таблицы BigQuery, размеры наборов данных и значения точности для этих двух прогонов:

Метрики сравнения

Вы можете использовать эту функцию пользовательского интерфейса для сравнения более чем двух запусков и даже запусков из разных конвейеров.

Сравнение прогонов с Vertex AI SDK

При многих выполнениях конвейера вам может потребоваться программный способ получения этих показателей сравнения, чтобы глубже изучить детали показателей и создать визуализации.

Вы можете использовать метод aiplatform.get_pipeline_df() для доступа к метаданным запуска. Здесь мы получим метаданные для двух последних запусков одного и того же конвейера и загрузим их в DataFrame Pandas. Параметр pipeline здесь относится к имени, которое мы дали нашему конвейеру в определении конвейера:

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

Когда вы распечатаете DataFrame, вы увидите что-то вроде этого:

Метрики конвейера DataFrame

Здесь мы запустили наш конвейер только дважды, но вы можете себе представить, сколько метрик вы получите при большем количестве выполнений. Далее мы создадим собственную визуализацию с помощью matplotlib, чтобы увидеть взаимосвязь между точностью нашей модели и объемом данных, используемых для обучения.

Запустите следующее в новой ячейке блокнота:

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

Вы должны увидеть что-то вроде этого:

График метаданных Matplotlib

8. Запрос метрик конвейера

Помимо получения DataFrame всех метрик конвейера, вы можете захотеть программно запросить артефакты, созданные в вашей системе машинного обучения. Отсюда вы можете создать собственную панель мониторинга или позволить другим сотрудникам вашей организации получать подробную информацию о конкретных артефактах.

Получение всех артефактов модели

Чтобы запросить артефакты таким способом, мы создадим MetadataServiceClient :

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

Затем мы отправим запрос list_artifacts к этой конечной точке и передадим фильтр, указывающий, какие артефакты нам нужны в нашем ответе. Для начала давайте получим все артефакты нашего проекта, которые являются моделями . Для этого запустите в своем блокноте следующую команду:

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)

Результирующий ответ model_artifacts содержит итерируемый объект для каждого артефакта модели в вашем проекте, а также связанные метаданные для каждой модели.

Фильтрация объектов и отображение в DataFrame

Было бы удобно, если бы нам было проще визуализировать результирующий запрос артефакта. Далее давайте получим все артефакты, созданные после 10 августа 2021 года, в состоянии LIVE . После выполнения этого запроса мы отобразим результаты в DataFrame Pandas. Сначала выполните запрос:

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)

Затем отобразите результаты в 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

Вы увидите что-то вроде этого:

Отфильтрованный кадр данных артефакта

Вы также можете фильтровать артефакты на основе других критериев в дополнение к тому, что вы пробовали здесь.

На этом вы закончили лабораторию!

🎉Поздравляем! 🎉

Вы узнали, как использовать Vertex AI, чтобы:

  • Используйте Kubeflow Pipelines SDK для создания конвейера машинного обучения, который создает набор данных в Vertex AI, а затем обучает и развертывает пользовательскую модель обучения Scikit на этом наборе данных.
  • Написание пользовательских компонентов конвейера, которые генерируют артефакты и метаданные.
  • Сравнение запусков Vertex Pipelines как в облачной консоли, так и программно.
  • Проследите происхождение артефактов, генерируемых конвейером.
  • Запросите метаданные запуска конвейера

Чтобы узнать больше о различных частях Vertex, ознакомьтесь с документацией .

9. Очистка

Чтобы с вас не взималась плата, рекомендуется удалить ресурсы, созданные в ходе этого практического занятия.

Остановите или удалите экземпляр Notebook

Если вы хотите продолжать использовать записную книжку, созданную в ходе этой лабораторной работы, рекомендуется выключать ее, когда она не используется. В пользовательском интерфейсе «Блокноты» в облачной консоли выберите блокнот и нажмите «Стоп» . Если вы хотите полностью удалить экземпляр, выберите «Удалить» :

Остановить экземпляр

Удалите конечные точки Vertex AI

Чтобы удалить развернутую конечную точку, перейдите в раздел «Конечные точки» консоли Vertex AI и щелкните значок удаления:

Удалить конечную точку

Удалите корзину Cloud Storage

Чтобы удалить сегмент хранилища, в меню навигации облачной консоли перейдите к разделу «Хранилище», выберите сегмент и нажмите «Удалить»:

Удалить хранилище