1. Обзор
В этой лабораторной работе вы узнаете, как запустить пользовательское задание по обучению модели с помощью SDK Kubeflow Pipelines на платформе Vertex Pipelines .
Чему вы научитесь
Вы научитесь:
- Используйте SDK Kubeflow Pipelines для создания масштабируемых конвейеров машинного обучения.
- Создайте и упакуйте в контейнер пользовательскую задачу обучения модели 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 в области машинного обучения в Google Cloud, обеспечивая бесшовный процесс разработки. Помимо услуг по обучению и развертыванию моделей, Vertex AI также включает в себя множество продуктов MLOps, в том числе Vertex Pipelines (на котором сосредоточена эта лабораторная работа), мониторинг моделей, хранилище признаков и многое другое. Все продукты Vertex AI представлены на диаграмме ниже.

Если у вас есть какие-либо замечания, пожалуйста, посетите страницу поддержки .
Почему конвейеры машинного обучения полезны?
Прежде чем углубиться в детали, давайте сначала разберемся, зачем вам может понадобиться конвейер. Представьте, что вы создаете рабочий процесс машинного обучения, который включает обработку данных, обучение модели, настройку гиперпараметров, оценку и развертывание модели. Каждый из этих шагов может иметь различные зависимости, что может стать громоздким, если рассматривать весь рабочий процесс как монолит. По мере масштабирования вашего процесса машинного обучения вы можете захотеть поделиться своим рабочим процессом с другими членами вашей команды, чтобы они могли запускать его и вносить свой вклад в код. Без надежного, воспроизводимого процесса это может стать сложно. В конвейерах каждый шаг вашего процесса машинного обучения является собственным контейнером. Это позволяет разрабатывать шаги независимо и отслеживать входные и выходные данные каждого шага воспроизводимым образом. Вы также можете планировать или запускать запуск вашего конвейера на основе других событий в вашей облачной среде, например, запускать запуск конвейера при появлении новых обучающих данных.
Вкратце : конвейеры помогают оптимизировать и воспроизводить рабочие процессы машинного обучения.
3. Настройка облачной среды
Для выполнения этого практического задания вам потребуется проект Google Cloud Platform с включенной оплатой. Чтобы создать проект, следуйте инструкциям здесь .
Шаг 1: Запустите Cloud Shell
В этой лабораторной работе вы будете работать в сеансе Cloud Shell , который представляет собой интерпретатор команд, размещенный на виртуальной машине, работающей в облаке Google. Вы с таким же успехом могли бы выполнить этот раздел локально на своем компьютере, но использование Cloud Shell обеспечивает всем доступ к воспроизводимому опыту в согласованной среде. После завершения лабораторной работы вы можете повторить этот раздел на своем компьютере.

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

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

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

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

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

Затем в разделе «Управляемые пользователем блокноты» нажмите «Создать блокнот» :

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

Используйте параметры по умолчанию, а затем нажмите «Создать» .
Шаг 5: Откройте свой блокнот
После создания экземпляра выберите «Открыть JupyterLab» :

4. Настройка вершинных конвейеров
Для использования Vertex Pipelines нам потребуется установить несколько дополнительных библиотек:
- Kubeflow Pipelines : Это SDK, который мы будем использовать для создания нашего конвейера. Vertex Pipelines поддерживает запуск конвейеров, созданных как с помощью Kubeflow Pipelines, так и с помощью TFX.
- Компоненты Google Cloud Pipeline : Эта библиотека предоставляет готовые компоненты, упрощающие взаимодействие с сервисами Vertex AI на этапах вашего конвейера.
Шаг 1: Создайте блокнот Python и установите библиотеки.
Сначала в меню «Запуск» вашего блокнота (доступ к которому можно получить, нажав на значок «+» в верхнем левом углу блокнота) создайте блокнот, выбрав Python 3 :

Доступ к меню запуска можно получить, нажав на знак «+» в верхнем левом углу вашего экземпляра ноутбука.
Для установки обеих служб, которые мы будем использовать в этой лабораторной работе, сначала установите пользовательский флаг в ячейке блокнота:
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: Укажите идентификатор проекта и категорию (bucket).
В ходе этой лабораторной работы вы будете использовать идентификатор вашего облачного проекта и созданный ранее сегмент. Далее мы создадим переменные для каждого из них.
Если вы не знаете идентификатор своего проекта, вы можете получить его, выполнив следующую команду:
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 — это путь к Cloud Storage, куда будут записываться артефакты, созданные нашим конвейером. В данном случае мы используем регион 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
После выполнения приведенного выше кода вы должны увидеть корневой каталог вашего конвейера. Это местоположение в Cloud Storage, куда будут записываться артефакты из вашего конвейера. Оно будет иметь формат gs://YOUR-BUCKET-NAME/pipeline_root/
5. Настройка пользовательского задания обучения модели.
Прежде чем настраивать наш конвейер обработки данных, нам необходимо написать код для обучения нашей пользовательской модели. Для обучения модели мы будем использовать набор данных UCI Machine Learning Dry beans , взятый из: KOKLU, M. и OZKAN, IA, (2020), "Многоклассовая классификация сухих бобов с использованием методов компьютерного зрения и машинного обучения." В журнале Computers and Electronics in Agriculture, 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 . Это позволит получить данные из нашего управляемого набора данных, поместить их в DataFrame Pandas, обучить модель Scikit-learn и загрузить обученную модель в Cloud Storage:
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 Container Registry. Позже, при настройке компонента обучения нашего конвейера, мы укажем 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
Перейдите в раздел «Реестр контейнеров» в консоли Cloud, чтобы убедиться, что ваш контейнер там присутствует. Он будет выглядеть примерно так:

6. Настройка задания пакетного прогнозирования
На последнем этапе нашего конвейера будет запущена задача пакетного прогнозирования. Для этого нам необходимо предоставить CSV-файл в Cloud Storage, содержащий примеры, для которых мы хотим получить прогнозы. Мы создадим этот CSV-файл в нашем ноутбуке и скопируем его в Cloud Storage с помощью инструмента командной строки gsutil .
Копирование примеров пакетного прогнозирования в облачное хранилище.
В следующем файле содержится по 3 примера из каждого класса нашего набора данных Beans. В приведенном ниже примере отсутствует столбец 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
Затем скопируйте файл в свой облачный накопитель:
!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()
После выполнения этой ячейки вы должны увидеть журналы со ссылкой для просмотра хода выполнения конвейера в консоли:

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

Выполнение этого конвейера займет 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 будет создан ресурс Model. Затем мы можем развернуть эту модель на конечной точке для онлайн-прогнозирования или создать задание пакетного прогнозирования, что мы сделаем на следующем этапе конвейера.
Этап 3 конвейера: Запуск пакетной задачи прогнозирования на нашей модели.
Наконец, наш конвейер получит прогнозы по примерам, переданным через CSV-файл. После завершения пакетного прогнозирования Vertex AI запишет CSV-файл в указанное нами место в Cloud Storage. После запуска этого этапа конвейера вы можете перейти в раздел «Пакетные прогнозы» в консоли 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 для:
- Используйте SDK Kubeflow Pipelines для создания сквозных конвейеров с пользовательскими компонентами.
- Запускайте свои конвейеры на Vertex Pipelines и запускайте их выполнение с помощью SDK.
- Просматривайте и анализируйте граф Vertex Pipelines в консоли.
- Используйте готовые компоненты конвейера для добавления сервисов Vertex AI в ваш конвейер.
- Планирование повторяющихся заданий конвейера
Чтобы узнать больше о различных компонентах Vertex, ознакомьтесь с документацией .
9. Уборка
Чтобы избежать списания средств, рекомендуется удалить ресурсы, созданные в ходе этой лабораторной работы.
Шаг 1: Остановите или удалите свой экземпляр Notebooks.
Если вы хотите продолжить использовать созданный в этой лабораторной работе блокнот, рекомендуется выключать его, когда он не используется. В интерфейсе блокнотов в вашей облачной консоли выберите блокнот, а затем выберите «Остановить» . Если вы хотите полностью удалить экземпляр, выберите «Удалить» .

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