От прототипа к производству: обучение пользовательских моделей с помощью Vertex AI

1. Обзор

В этой лабораторной работе вы будете использовать Vertex AI для выполнения специального задания по обучению.

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

.

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

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

  • Создайте управляемый блокнот Vertex AI Workbench.
  • Настройте и запустите пользовательское задание обучения из пользовательского интерфейса Vertex AI.
  • Настройте и запустите пользовательское задание обучения с помощью Vertex AI Python SDK.

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

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

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

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

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

3. Настройте свою среду

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

Шаг 1. Включите API Compute Engine.

Перейдите к Compute Engine и выберите «Включить» , если он еще не включен.

Шаг 2. Включите API реестра артефактов.

Перейдите в реестр артефактов и выберите «Включить» , если это еще не сделано. Вы будете использовать это для создания контейнера для своего индивидуального задания по обучению.

Шаг 3. Включите API Vertex AI.

Перейдите в раздел Vertex AI в облачной консоли и нажмите «Включить Vertex AI API» .

Панель управления Vertex AI

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

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

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

Включите API ноутбуков, если это еще не сделано.

Notebook_api

После включения нажмите «УПРАВЛЯЕМЫЕ НОУТБУКЫ» :

Ноутбуки_UI

Затем выберите НОВЫЙ НОУТБУК .

новый_ноутбук

Дайте своему блокноту имя и в разделе «Разрешение» выберите «Учетная запись службы».

create_notebook

Выберите Дополнительные настройки .

В разделе «Безопасность» выберите «Включить терминал», если он еще не включен.

Enable_terminal

Все остальные дополнительные настройки вы можете оставить как есть.

Далее нажмите Создать . Подготовка экземпляра займет пару минут.

После создания экземпляра выберите OPEN JUPYTERLAB .

open_jupyterlab

4. Контейнеризация кода обучающего приложения

Вы отправите это задание на обучение в Vertex AI, поместив код своего учебного приложения в контейнер Docker и отправив этот контейнер в реестр Google Artifact . Используя этот подход, вы можете обучить модель, построенную с помощью любого фреймворка.

Для начала в меню Launcher откройте окно терминала в экземпляре вашего ноутбука:

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

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

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

В своем терминале выполните следующую команду, чтобы определить переменную env для вашего проекта, обязательно заменяя your-cloud-project идентификатором вашего проекта:

PROJECT_ID='your-cloud-project'

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

BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET

Шаг 2. Скопируйте данные в корзину Cloud Storage.

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

Загрузите и распакуйте данные.

wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz

Затем скопируйте его в только что созданную корзину. Мы добавляем -r, потому что хотим скопировать весь каталог, и -m, чтобы выполнить копирование с несколькими процессорами, что ускорит работу.

gsutil -m cp -r flower_photos $BUCKET

Шаг 3. Напишите обучающий код

Создайте новый каталог с именем flowers и перейдите в него:

mkdir flowers
cd flowers

Выполните следующую команду, чтобы создать каталог для обучающего кода и файл Python, в который вы добавите код.

mkdir trainer
touch trainer/task.py

Теперь в каталоге flowers/ у вас должно быть следующее:

+ trainer/
    + task.py

Более подробную информацию о том, как структурировать код приложения для обучения, можно найти в документации.

Затем откройте только что созданный файл task.py и скопируйте приведенный ниже код.

Вам нужно будет заменить {your-gcs-bucket} именем только что созданного сегмента Cloud Storage.

С помощью инструмента Cloud Storage FUSE учебные задания в Vertex AI Training могут получать доступ к данным в Cloud Storage в виде файлов в локальной файловой системе. Когда вы запускаете пользовательское задание обучения, оно видит каталог /gcs , который содержит все ваши сегменты Cloud Storage в качестве подкаталогов. Вот почему пути к данным в обучающем коде начинаются с /gcs .

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''
  
  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset


def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  return model

# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

# TRAIN MODEL
history = model.fit(
  train_dataset,
  validation_data=validation_dataset,
  epochs=EPOCHS
)

# SAVE MODEL
model.save(f'{BUCKET_ROOT}/model_output')

Шаг 4. Создайте файл Dockerfile.

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

В терминале создайте пустой Dockerfile в корне каталога цветов:

touch Dockerfile

Теперь в каталоге flowers/ у вас должно быть следующее:

+ Dockerfile
+ trainer/
    + task.py

Откройте Dockerfile и скопируйте в него следующее:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8

WORKDIR /

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

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

Давайте рассмотрим команды в этом файле.

Команда FROM указывает базовый образ, который является родительским образом, на основе которого будет построен создаваемый вами образ. В качестве базового образа вы будете использовать образ Docker Deep Learning Container TensorFlow Enterprise 2.8 GPU . Контейнеры глубокого обучения в Google Cloud поставляются со многими предустановленными стандартными платформами машинного обучения и обработки данных.

Команда WORKDIR указывает каталог образа, в котором выполняются последующие инструкции.

Команда COPY копирует код трейнера в образ Docker. Обратите внимание, что в этом примере у нас есть только один файл Python в каталоге нашего тренера, но для более реалистичного примера у вас, вероятно, будут дополнительные файлы. Возможно, один из них называется data.py , который занимается предварительной обработкой данных, а другой — model.py , который содержит только код модели и т. д. Для более сложного кода обучения ознакомьтесь с документацией Python по упаковке проектов Python.

Если вы хотите добавить какие-либо дополнительные библиотеки, вы можете использовать команду RUN для установки pip (например: RUN pip install -r requirements.txt ). Но для нашего примера нам не нужно ничего дополнительного.

Наконец, команда ENTRYPOINT устанавливает точку входа для вызова тренера. Это то, что будет работать, когда мы начнем нашу работу по обучению. В нашем случае это выполнение файла task.py

Подробнее о написании Dockerfiles для Vertex AI Training можно узнать здесь.

Шаг 4. Создайте контейнер.

На терминале вашего блокнота Workbench выполните следующую команду, чтобы определить переменную env для вашего проекта, обязательно заменяя your-cloud-project идентификатором вашего проекта:

PROJECT_ID='your-cloud-project'

Создайте репозиторий в реестре артефактов.

REPO_NAME='flower-app'

gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"

Определите переменную с URI вашего образа контейнера в реестре Google Artifact:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest

Настроить докер

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

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

docker build ./ -t $IMAGE_URI

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

docker push $IMAGE_URI

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

5. Запустите специальное задание обучения на Vertex AI.

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

Для начала перейдите в раздел «Обучение» в разделе Vertex вашей облачной консоли:

меню поезда

Шаг 1. Настройте задание обучения

Нажмите «Создать» , чтобы ввести параметры вашего учебного задания.

create_training

  • В разделе «Набор данных» выберите «Нет управляемого набора данных».
  • Затем выберите «Индивидуальное обучение (расширенное)» в качестве метода обучения и нажмите « Продолжить» .
  • Выберите «Обучить новую модель» , затем введите flowers-model (или как вы хотите назвать свою модель) в поле «Название модели».
  • Нажмите Продолжить

На шаге «Настройки контейнера» выберите «Пользовательский контейнер» :

Вариант индивидуального контейнера

В первом поле ( Образ контейнера ) введите значение переменной IMAGE_URI из предыдущего раздела. Это должно быть: us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest с вашим собственным идентификатором проекта. Остальные поля оставьте пустыми и нажмите «Продолжить» .

Пропустите шаг «Гиперпараметры», снова нажав «Продолжить» .

Шаг 2. Настройка вычислительного кластера

Настройте рабочий пул 0 следующим образом:

рабочий_пул_0

Сейчас вы пропустите шаг 6 и настроите контейнер прогнозирования в следующей лабораторной работе этой серии.

Нажмите НАЧАТЬ ТРЕНИРОВКУ , чтобы начать обучение. В разделе «Обучение» консоли на вкладке «ПРОВОДЫ ОБУЧЕНИЯ» вы увидите недавно запущенное задание:

Учебные вакансии

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

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

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

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

6. [Необязательно] Используйте Vertex AI Python SDK.

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

Вернитесь к экземпляру своего блокнота и создайте блокнот TensorFlow 2 из панели запуска:

новый_ноутбук

Импортируйте Vertex AI SDK.

from google.cloud import aiplatform

Затем создайте CustomContainerTrainingJob . Вам нужно будет заменить {PROJECT_ID} в container_uri на имя вашего проекта, а {BUCKET} в staging_bucket нужно будет заменить на корзину, которую вы создали ранее.

my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
                                               container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
                                               staging_bucket='gs://{BUCKET}')

Затем запустите задание.

my_job.run(replica_count=1,
           machine_type='n1-standard-8',
           accelerator_type='NVIDIA_TESLA_V100',
           accelerator_count=1)

В демонстрационных целях это задание настроено для запуска на более крупной машине, чем в предыдущем разделе. Кроме того, мы работаем с графическим процессором. Если вы не укажете machine-type , accelerator_type или accelerator_count , задание будет выполняться по умолчанию на n1-standard-4 .

В разделе «Обучение» консоли на вкладке «ПОЛЬЗОВАТЕЛЬСКИЕ ЗАДАНИЯ» вы увидите свое учебное задание.

7. Очистка

Поскольку ноутбуки, управляемые Vertex AI Workbench, имеют функцию отключения в режиме ожидания, нам не нужно беспокоиться об отключении экземпляра. Если вы хотите вручную завершить работу экземпляра, нажмите кнопку «Стоп» в разделе консоли Vertex AI Workbench. Если вы хотите полностью удалить блокнот, нажмите кнопку «Удалить».

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

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

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