Запуск обучения пользовательской модели на Vertex Pipelines

1. Обзор

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

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

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

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

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

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

В этой лаборатории используется Vertex AI , наша комплексная управляемая платформа машинного обучения в Google Cloud. Vertex AI интегрирует предложения Google ML в Google Cloud в единый процесс разработки. Помимо услуг по обучению и развертыванию моделей, Vertex AI также включает в себя множество продуктов MLOps, в том числе Vertex Pipelines (особое внимание в этой лабораторной работе), Model Monitoring, Feature Store и многое другое. Вы можете увидеть все предложения продуктов Vertex AI на диаграмме ниже.

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

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

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

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

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

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

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

Шаг 1. Запустите 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

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

Вывод Cloud Shell

Выполните следующую команду в 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

Шаг 2. Включите 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.

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

Чтобы запустить задание обучения на 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

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

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

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

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

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

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

Экземпляр TFE

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

Шаг 5. Откройте свой блокнот

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

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

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

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

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

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

Сначала в меню запуска вашего экземпляра ноутбука (к которому вы можете получить доступ, щелкнув значок + в левом верхнем углу вашего блокнота), создайте блокнот, выбрав Python 3 :

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

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

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

USER_FLAG = "--user"

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

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0 --upgrade
!pip3 install {USER_FLAG} kfp==1.8.9 google-cloud-pipeline-components==0.2.0

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

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__))"
!python3 -c "import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))"

Шаг 2. Установите идентификатор проекта и сегмент.

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

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

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"

Шаг 3. Импортируйте библиотеки

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

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline

from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip

Шаг 4. Определите константы

Последнее, что нам нужно сделать перед созданием нашего конвейера, — это определить некоторые постоянные переменные. 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. Настройка задания по обучению пользовательской модели.

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

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

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

  • Напишите модель DecisionTreeClassifier на основе Scikit-learn для классификации типов компонентов в наших данных.
  • Упакуйте обучающий код в контейнер Docker и отправьте его в реестр контейнеров.

После этого мы сможем начать задание по обучению Vertex AI непосредственно из нашего конвейера. Давайте начнем!

Шаг 1. Определите наш обучающий код в контейнере Docker.

В экземпляре ноутбуков откройте панель запуска и выберите «Терминал»:

Открыть терминал

Затем выполните следующую команду, чтобы настроить каталог, в который вы добавите контейнерный код:

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

После выполнения этих команд вы должны увидеть каталог с именем traincontainer/ созданный слева (возможно, вам придется щелкнуть значок обновления, чтобы увидеть его). В каталоге traincontainer/ вы увидите следующее:

+ Dockerfile
+ trainer/
    + train.py

Наш первый шаг в контейнеризации нашего кода — создание Dockerfile. В наш Dockerfile мы добавим все команды, необходимые для запуска нашего образа. Он установит все библиотеки, которые мы используем, и настроит точку входа для нашего обучающего кода. Откройте только что созданный Dockerfile и добавьте следующее:

FROM gcr.io/deeplearning-platform-release/sklearn-cpu.0-23
WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

RUN pip install sklearn google-cloud-bigquery joblib pandas google-cloud-storage

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.train"]

Чтобы сохранять файлы по мере их редактирования в экземпляре записной книжки, вы можете использовать ctrl+s .

Затем откройте файл train.py . Здесь мы добавим наш обучающий код. Скопируйте следующее в train.py . Это извлекает данные из нашего управляемого набора данных, помещает их в Pandas DataFrame, обучает модель обучения Scikit и загружает обученную модель в облачное хранилище:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from google.cloud import bigquery
from google.cloud import storage
from joblib import dump

import os
import pandas as pd

bqclient = bigquery.Client()
storage_client = storage.Client()

def download_table(bq_table_uri: str):
    prefix = "bq://"
    if bq_table_uri.startswith(prefix):
        bq_table_uri = bq_table_uri[len(prefix):]

    table = bigquery.TableReference.from_string(bq_table_uri)
    rows = bqclient.list_rows(
        table,
    )
    return rows.to_dataframe(create_bqstorage_client=False)

# These environment variables are from Vertex AI managed datasets
training_data_uri = os.environ["AIP_TRAINING_DATA_URI"]
test_data_uri = os.environ["AIP_TEST_DATA_URI"]

# Download data into Pandas DataFrames, split into train / test
df = download_table(training_data_uri)
test_df = download_table(test_data_uri)
labels = df.pop("Class").tolist()
data = df.values.tolist()
test_labels = test_df.pop("Class").tolist()
test_data = test_df.values.tolist()

# Define and train the Scikit model
skmodel = DecisionTreeClassifier()
skmodel.fit(data, labels)
score = skmodel.score(test_data, test_labels)
print('accuracy is:',score)

# Save the model to a local file
dump(skmodel, "model.joblib")

# Upload the saved model file to GCS
bucket = storage_client.get_bucket("YOUR_GCS_BUCKET")
model_directory = os.environ["AIP_MODEL_DIR"]
storage_path = os.path.join(model_directory, "model.joblib")
blob = storage.blob.Blob.from_string(storage_path, client=storage_client)
blob.upload_from_filename("model.joblib")

Затем вернитесь в свой блокнот и выполните следующую команду, чтобы заменить YOUR_GCS_BUCKET из приведенного выше сценария на имя вашего сегмента Cloud Storage:

BUCKET = BUCKET_NAME[5:] # Trim the 'gs://' before adding to train script
!sed -i -r 's@YOUR_GCS_BUCKET@'"$BUCKET"'@' traincontainer/trainer/train.py

При желании вы также можете сделать это вручную. Если да, то не включайте gs:// в имя корзины при обновлении скрипта.

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

Шаг 2. Отправьте контейнер в реестр контейнеров.

Когда наш обучающий код готов, мы готовы отправить его в реестр контейнеров Google. Позже, когда мы настроим обучающий компонент нашего конвейера, мы укажем Vertex Pipelines на этот контейнер.

Вернитесь к своему терминалу и в корне вашего каталога traincontainer/ определите переменную с URI для вашего образа контейнера в реестре контейнеров.

PROJECT_ID=$(gcloud config get-value project)
IMAGE_URI="gcr.io/$PROJECT_ID/scikit:v1"

Затем создайте свой контейнер, выполнив следующее:

docker build ./ -t $IMAGE_URI

Наконец, отправьте контейнер в реестр контейнеров:

docker push $IMAGE_URI

Перейдите в раздел «Реестр контейнеров» вашей облачной консоли, чтобы убедиться, что ваш контейнер там. Это будет выглядеть примерно так:

Реестр контейнеров

6. Настройка пакетного задания прогнозирования

На последнем этапе нашего конвейера будет выполнено пакетное задание прогнозирования. Чтобы это работало, нам нужно предоставить CSV-файл в облачном хранилище, содержащий примеры, по которым мы хотим получить прогнозы. Мы создадим этот CSV-файл в нашем блокноте и скопируем его в облачное хранилище с помощью инструмента командной строки gsutil .

Копирование примеров пакетного прогнозирования в Cloud Storage

Следующий файл содержит по 3 примера из каждого класса в нашем наборе данных компонентов. В приведенном ниже примере столбец Class не указан, поскольку именно его будет прогнозировать наша модель. Выполните следующую команду, чтобы создать этот CSV-файл локально в записной книжке:

%%writefile batch_examples.csv
Area,Perimeter,MajorAxisLength,MinorAxisLength,AspectRation,Eccentricity,ConvexArea,EquivDiameter,Extent,Solidity,roundness,Compactness,ShapeFactor1,ShapeFactor2,ShapeFactor3,ShapeFactor4
23288,558.113,207.567738,143.085693,1.450653336,0.7244336162,23545,172.1952453,0.8045881703,0.9890847314,0.9395021523,0.8295857874,0.008913077034,0.002604069884,0.6882125787,0.9983578734
23689,575.638,205.9678003,146.7475015,1.403552348,0.7016945718,24018,173.6714472,0.7652721693,0.9863019402,0.8983750474,0.8431970773,0.00869465998,0.002711119968,0.7109813112,0.9978994889
23727,559.503,189.7993849,159.3717704,1.190922235,0.5430731512,24021,173.8106863,0.8037601626,0.9877607094,0.952462433,0.9157600082,0.007999299741,0.003470231343,0.8386163926,0.9987269085
31158,641.105,212.0669751,187.1929601,1.132879009,0.4699241567,31474,199.1773023,0.7813134733,0.989959967,0.9526231013,0.9392188582,0.0068061806,0.003267009878,0.8821320637,0.9993488983
32514,649.012,221.4454899,187.1344232,1.183349841,0.5346736437,32843,203.4652564,0.7849831,0.9899826447,0.9700068737,0.9188051492,0.00681077351,0.002994124691,0.8442029022,0.9989873701
33078,659.456,235.5600775,178.9312328,1.316483846,0.6503915309,33333,205.2223615,0.7877214708,0.9923499235,0.9558229607,0.8712102818,0.007121351881,0.002530662194,0.7590073551,0.9992209221
33680,683.09,256.203255,167.9334938,1.525623324,0.7552213942,34019,207.081404,0.80680321,0.9900349805,0.9070392732,0.8082699962,0.007606985006,0.002002710402,0.6533003868,0.9966903078
33954,716.75,277.3684803,156.3563259,1.773951126,0.825970469,34420,207.9220419,0.7994819873,0.9864613597,0.8305492781,0.7496238998,0.008168948587,0.001591181142,0.5619359911,0.996846984
36322,719.437,272.0582306,170.8914975,1.591993952,0.7780978465,36717,215.0502424,0.7718560075,0.9892420405,0.8818487005,0.7904566678,0.007490177594,0.001803782407,0.6248217437,0.9947124371
36675,742.917,285.8908964,166.8819538,1.713132487,0.8119506999,37613,216.0927123,0.7788277766,0.9750618137,0.8350248381,0.7558572692,0.0077952528,0.001569528272,0.5713202115,0.9787472145
37454,772.679,297.6274753,162.1493177,1.835514817,0.8385619338,38113,218.3756257,0.8016695205,0.9827093118,0.7883332637,0.7337213257,0.007946480356,0.001420623993,0.5383469838,0.9881438654
37789,766.378,313.5680678,154.3409867,2.031657789,0.8704771226,38251,219.3500608,0.7805870567,0.9879218844,0.8085170916,0.6995293312,0.008297866252,0.001225659709,0.4893412853,0.9941740339
47883,873.536,327.9986493,186.5201272,1.758516115,0.822571799,48753,246.9140116,0.7584464543,0.9821549443,0.7885506623,0.7527897207,0.006850002074,0.00135695419,0.5666923636,0.9965376533
49777,861.277,300.7570338,211.6168613,1.42123379,0.7105823885,50590,251.7499649,0.8019106536,0.9839296304,0.843243269,0.8370542883,0.00604208839,0.001829706116,0.7006598815,0.9958014989
49882,891.505,357.1890036,179.8346914,1.986207449,0.8640114945,51042,252.0153467,0.7260210171,0.9772736178,0.7886896753,0.7055518063,0.007160679276,0.001094585314,0.4978033513,0.9887407248
53249,919.923,325.3866286,208.9174205,1.557489212,0.7666552108,54195,260.3818974,0.6966846347,0.9825445152,0.7907120655,0.8002231025,0.00611066177,0.001545654241,0.6403570138,0.9973491406
61129,964.969,369.3481688,210.9473449,1.750902193,0.8208567513,61796,278.9836198,0.7501135067,0.9892064211,0.8249553283,0.7553404711,0.006042110436,0.001213219664,0.5705392272,0.9989583843
61918,960.372,353.1381442,224.0962377,1.575832543,0.7728529173,62627,280.7782864,0.7539207091,0.9886790043,0.8436218213,0.7950947556,0.005703319619,0.00140599258,0.6321756704,0.9962029945
141953,1402.05,524.2311633,346.3974998,1.513380332,0.7505863011,143704,425.1354762,0.7147107987,0.9878152313,0.9074598849,0.8109694843,0.003692991084,0.0009853172185,0.6576715044,0.9953071199
145285,1440.991,524.9567463,353.0769977,1.486805285,0.7400216694,146709,430.0960442,0.7860466375,0.9902937107,0.8792413513,0.8192980608,0.003613289371,0.001004269363,0.6712493125,0.9980170255
146153,1476.383,526.1933264,356.528288,1.475881001,0.7354662103,149267,431.3789276,0.7319360978,0.9791380546,0.8425962592,0.8198107159,0.003600290972,0.001003163512,0.6720896099,0.991924286

Затем скопируйте файл в корзину Cloud Storage:

!gsutil cp batch_examples.csv $BUCKET_NAME

Мы будем ссылаться на этот файл на следующем этапе, когда будем определять наш конвейер.

7. Создание конвейера из готовых компонентов

Теперь, когда наш обучающий код находится в облаке, мы готовы вызывать его из нашего конвейера. Конвейер, который мы определим, будет использовать три предварительно созданных компонента из библиотеки google_cloud_pipeline_components , которую мы установили ранее. Эти предопределенные компоненты упрощают код, который нам нужно написать для настройки нашего конвейера, и позволят нам использовать сервисы Vertex AI, такие как обучение модели и пакетное прогнозирование.

Вот что будет делать наш трехэтапный конвейер:

  • Создайте управляемый набор данных в Vertex AI.
  • Запустите обучающее задание на Vertx AI, используя настроенный нами специальный контейнер.
  • Запустите задание пакетного прогнозирования на нашей обученной модели классификации Scikit-learn.

Шаг 1. Определите наш конвейер

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

@pipeline(name="automl-beans-custom",
                  pipeline_root=PIPELINE_ROOT)
def pipeline(
    bq_source: str = "bq://sara-vertex-demos.beans_demo.large_dataset",
    bucket: str = BUCKET_NAME,
    project: str = PROJECT_ID,
    gcp_region: str = REGION,
    bq_dest: str = "",
    container_uri: str = "",
    batch_destination: str = ""
):
    dataset_create_op = gcc_aip.TabularDatasetCreateOp(
        display_name="tabular-beans-dataset",
        bq_source=bq_source,
        project=project,
        location=gcp_region
    )

    training_op = gcc_aip.CustomContainerTrainingJobRunOp(
        display_name="pipeline-beans-custom-train",
        container_uri=container_uri,
        project=project,
        location=gcp_region,
        dataset=dataset_create_op.outputs["dataset"],
        staging_bucket=bucket,
        training_fraction_split=0.8,
        validation_fraction_split=0.1,
        test_fraction_split=0.1,
        bigquery_destination=bq_dest,
        model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest",
        model_display_name="scikit-beans-model-pipeline",
        machine_type="n1-standard-4",
    )
    batch_predict_op = gcc_aip.ModelBatchPredictOp(
        project=project,
        location=gcp_region,
        job_display_name="beans-batch-predict",
        model=training_op.outputs["model"],
        gcs_source_uris=["{0}/batch_examples.csv".format(BUCKET_NAME)],
        instances_format="csv",
        gcs_destination_output_uri_prefix=batch_destination,
        machine_type="n1-standard-4"
    )

Шаг 2. Скомпилируйте и запустите конвейер.

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

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

Затем создайте переменную TIMESTAMP . Мы будем использовать это в нашем идентификаторе задания:

from datetime import datetime

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

Затем определите задание конвейера, передав несколько параметров, специфичных для проекта:

pipeline_job = aiplatform.PipelineJob(
    display_name="custom-train-pipeline",
    template_path="custom_train_pipeline.json",
    job_id="custom-train-pipeline-{0}".format(TIMESTAMP),
    parameter_values={
        "project": PROJECT_ID,
        "bucket": BUCKET_NAME,
        "bq_dest": "bq://{0}".format(PROJECT_ID),
        "container_uri": "gcr.io/{0}/scikit:v1".format(PROJECT_ID),
        "batch_destination": "{0}/batchpredresults".format(BUCKET_NAME)
    },
    enable_caching=True,
)

Наконец, запустите задание, чтобы создать новый конвейер выполнения:

pipeline_job.submit()

После запуска этой ячейки вы должны увидеть журналы со ссылкой для просмотра запуска конвейера в вашей консоли:

Журналы заданий конвейера

Перейдите по этой ссылке. Вы также можете получить к нему доступ, открыв панель управления Pipelines . После завершения ваш конвейер должен выглядеть так:

Завершен вводный конвейер

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

8. Понимание выполнения вашего конвейера

Давайте более подробно рассмотрим каждый из трех этапов конвейера.

Шаг конвейера 1. Создание управляемого набора данных

На первом этапе нашего конвейера создается управляемый набор данных в Vertex AI. Если вы нажмете следующую ссылку на набор данных в разделе «Конвейеры» консоли:

Ссылка на набор данных из конвейера

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

Для заданий пользовательской модели, использующих управляемые наборы данных, Vertex AI передает специальные переменные среды в ваши задания обучения и обрабатывает разделение ваших данных на обучающие и тестовые наборы. Мы воспользуемся этим на следующем этапе конвейера.

Шаг конвейера 2. Обучение модели в Vertex AI Training

Пока выполняется пользовательское задание обучения, вы можете просмотреть журналы непосредственно в консоли Vertex Pipelines:

Пользовательские журналы тренировок

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

Шаг конвейера 3. Запуск пакетного задания прогнозирования для нашей модели.

Наконец, наш конвейер получит прогнозы по примерам, которые мы передали через файл CSV. Когда задание пакетного прогнозирования завершится, Vertex AI запишет CSV-файл в местоположение, указанное нами в облачном хранилище. Когда этот шаг конвейера начнет выполняться, вы можете перейти в раздел «Пакетные прогнозы» консоли Vertex AI, чтобы увидеть созданное задание.

Нажмите на задание после его завершения, чтобы увидеть URL-адрес облачного хранилища ваших пакетных прогнозов:

Пакетное задание прогнозирования

Нажмите на эту ссылку, чтобы перейти в каталог Cloud Storage, где можно найти результаты прогноза, а затем нажмите, чтобы загрузить один из файлов prediction.results . В файле вы должны увидеть строки, которые выглядят следующим образом:

{"instance": [33954.0, 716.75, 277.3684803, 156.3563259, 1.773951126, 0.825970469, 34420.0, 207.9220419, 0.7994819873, 0.9864613597, 0.8305492781, 0.7496238998, 0.008168948587, 0.001591181142, 0.5619359911, 0.996846984], "prediction": "HOROZ"}

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

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

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

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

  • Используйте Kubeflow Pipelines SDK для создания комплексных конвейеров с использованием пользовательских компонентов.
  • Запускайте свои конвейеры на Vertex Pipelines и запускайте запуск конвейеров с помощью SDK.
  • Просмотр и анализ графика Vertex Pipelines в консоли.
  • Используйте готовые компоненты конвейера для добавления сервисов Vertex AI в свой конвейер.
  • Планирование повторяющихся заданий конвейера

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

9. Очистка

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

Шаг 1. Остановите или удалите экземпляр Notebooks

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

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

Шаг 2. Удалите корзину Cloud Storage

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

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