От прототипа к производству: получение прогнозов на основе специально обученных моделей

1. Обзор

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

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

.

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

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

  • Загрузка моделей в реестр моделей Vertex AI
  • Развертывание модели в конечной точке
  • Получайте онлайн-предсказания и групповые прогнозы с помощью пользовательского интерфейса и SDK.

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

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

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

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

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

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

Выполните действия, описанные в разделе «Обучение пользовательских моделей с помощью лаборатории Vertex AI», чтобы настроить среду.

4. Загрузите модель в реестр.

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

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

Training_prediction

Или вы можете импортировать модели после завершения задания обучения, если вы храните сохраненные артефакты модели в корзине Cloud Storage. Именно этот вариант мы будем использовать в этой лабораторной работе.

Перейдите в раздел «Модели» в консоли.

меню модели

Выберите ИМПОРТ

import_model

Выберите «Импортировать как новую модель» , а затем укажите имя своей модели.

новая_модель

В настройках модели импортируйте модель с помощью предварительно созданного контейнера и используйте TensorFlow 2.8. Полный список готовых контейнеров прогнозирования вы можете увидеть здесь .

Затем укажите путь к сегменту облачного хранилища, в котором вы сохранили артефакты модели в пользовательском задании обучения. Это должно выглядеть примерно так gs://{PROJECT_ID}-bucket/model_output

Мы пропустим раздел «Объяснимость», но если вы хотите узнать больше об объяснимом ИИ Vertex, ознакомьтесь с документацией.

Когда модель будет импортирована, вы увидите ее в реестре.

цветок_модель

Обратите внимание: если вы хотите сделать это через SDK, а не через пользовательский интерфейс, вы можете запустить следующую команду из своей записной книжки Workbench, чтобы загрузить модель.

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

5. Развертывание модели в конечной точке

В Vertex AI можно выполнять два типа заданий прогнозирования: пакетные и онлайн.

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

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

Теперь, когда модель находится в реестре, мы можем использовать ее для пакетного прогнозирования.

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

Чтобы развернуть в конечной точке, выберите три точки в крайнем правом углу модели, затем выберите «Развернуть в конечной точке» .

развертывание_модель

Дайте своей конечной точке имя, а затем оставьте остальные настройки без изменений и нажмите ПРОДОЛЖИТЬ.

имя_конечной_точки

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

Поскольку эта лабораторная работа предназначена только для демонстрации, и мы не собираемся использовать эту конечную точку для высокого трафика, вы можете установить Максимальное количество вычислительных заметок равным 1 и выбрать n1-standard-4 в качестве Типа машины .

конечная_точка_вычисление

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

Затем нажмите РАЗВЕРНУТЬ

Развертывание займет несколько минут, но как только оно будет завершено, вы увидите, что статус развертывания вашей модели изменился на «Развернуто на Vertex AI» .

Если вы хотите развернуть модель через SDK, выполните команду ниже.

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

6. Получайте прогнозы

Онлайн прогнозы

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

В демонстрационных целях мы вызовем эту конечную точку из Workbench.

Вернитесь к блокноту, который вы создали на предыдущей лабораторной работе. В панели запуска создайте новый блокнот TensorFlow 2.

tf_kernel

Импортируйте Vertex AI Python SDK, numpy и PIL.

from google.cloud import aiplatform

import numpy as np
from PIL import Image

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

test_image

Сначала определите конечную точку. Вам потребуется заменить {PROJECT_NUMBER} и {ENDPOINT_ID} ниже.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

Вы можете найти свой endpoint_id в разделе «Конечные точки» облачной консоли.

конечная_точка_id

И вы можете найти свой номер проекта на домашней странице консоли. Обратите внимание, что это отличается от идентификатора проекта.

номер_проекта

Код ниже открывает и изменяет размер изображения с помощью PIL.

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

Затем преобразуйте данные numpy в тип float32 и в список. Мы преобразуем их в список, поскольку данные numpy не являются сериализуемыми в формате JSON, поэтому мы не можем отправить их в теле нашего запроса.

x_test = np.asarray(im).astype(np.float32).tolist()

Наконец, вызовите endpoint.predict .

endpoint.predict(instances=x_test).predictions

Результат, который вы получаете, — это выходные данные модели, представляющие собой слой softmax с 5 единицами. Если вы хотите написать собственную логику для возврата метки строки вместо индекса, вы можете использовать собственные процедуры прогнозирования .

Пакетные прогнозы

Существуют разные способы форматирования данных для пакетного прогнозирования . Для простоты мы выгрузим числовые данные в файл json и сохраним его в облачном хранилище.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

Далее определите модель. Это похоже на определение конечной точки, за исключением того, что вам нужно будет указать MODEL_ID вместо ENDPOINT_ID .

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

Идентификатор модели можно найти, выбрав название модели и версию в разделе «Модели» консоли, а затем выбрав «ДЕТАЛИ ВЕРСИИ».

model_id

Наконец, используйте SDK для вызова пакетного задания прогнозирования, передав путь к облачному хранилищу, в котором вы сохранили файл json, и предоставив место в облачном хранилище для хранения результатов прогнозирования.

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

Вы можете отслеживать ход выполнения задания в разделе консоли «Пакетные прогнозы». Обратите внимание, что выполнение пакетного задания прогнозирования для одного изображения неэффективно.

пакет_пред

Что дальше

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

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

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

  • Загрузите модели в реестр моделей Vertex AI.
  • Получайте пакетные и онлайн-прогнозы

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

7. Очистка

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

undeploy_model

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

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

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

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