1. Обзор
В этой лабораторной работе вы будете использовать Vertex AI для получения онлайн- и пакетных прогнозов от специально обученной модели.
Эта лабораторная работа является частью видеосерии «От прототипа к серийному производству ». Перед выполнением этой лабораторной работы обязательно пройдите предыдущую . Для получения дополнительной информации вы можете посмотреть прилагаемое видео:
.
Чему вы научитесь
Вы научитесь:
- Загрузите модели в реестр моделей Vertex AI.
- Разверните модель на конечной точке
- Получайте онлайн-прогнозы и пакетные прогнозы с помощью пользовательского интерфейса и SDK.
Общая стоимость запуска этой лабораторной работы в Google Cloud составляет около 1 доллара .
2. Введение в Vertex AI
В этой лабораторной работе используется новейший продукт для искусственного интеллекта, доступный в Google Cloud. Vertex AI интегрирует предложения машинного обучения в Google Cloud в единый процесс разработки. Ранее модели, обученные с помощью AutoML, и пользовательские модели были доступны через отдельные сервисы. Новое предложение объединяет оба варианта в единый API, а также включает другие новые продукты. Вы также можете перенести существующие проекты в Vertex AI.
Vertex AI предлагает множество различных продуктов для поддержки комплексных рабочих процессов машинного обучения. В этой лабораторной работе мы сосредоточимся на продуктах, перечисленных ниже: Predictions и Workbench.

3. Настройте свою среду.
Выполните шаги в лабораторной работе «Обучение пользовательских моделей с помощью Vertex AI» , чтобы настроить среду.
4. Загрузите модель в реестр.
Прежде чем мы сможем использовать нашу модель для получения прогнозов, нам необходимо загрузить ее в Vertex AI Model Registry , репозиторий, где можно управлять жизненным циклом ваших моделей машинного обучения.
Вы можете загружать модели при настройке пользовательского задания обучения, как показано ниже.

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

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

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

В настройках модели импортируйте модель с предварительно созданным контейнером и используйте TensorFlow 2.8. Полный список предварительно созданных контейнеров для прогнозирования можно посмотреть здесь .
Затем укажите путь к облачному хранилищу, где вы сохранили артефакты модели в пользовательском задании обучения. Это должно выглядеть примерно так gs://{PROJECT_ID}-bucket/model_output
Мы пропустим раздел о объяснимости, но если вы хотите узнать больше о Vertex Explainable AI, ознакомьтесь с документацией.
После импорта модели вы увидите её в реестре.

Обратите внимание, что если вы хотите сделать это через 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. Получите прогнозы
Онлайн-прогнозы
Когда ваша модель развернута на конечной точке, вы можете обращаться к ней так же, как и к любой другой REST-конечной точке, то есть вы можете вызывать ее из облачной функции, чат-бота, веб-приложения и т. д.
В демонстрационных целях мы вызовем эту конечную точку из Workbench.
Вернитесь к блокноту, созданному в предыдущей лабораторной работе. В меню запуска создайте новый блокнот TensorFlow 2.

Импортируйте Python SDK, numpy и PIL от Vertex AI.
from google.cloud import aiplatform
import numpy as np
from PIL import Image
Загрузите изображение ниже и загрузите его в свой экземпляр Workbench. Мы протестируем модель на этом изображении одуванчика.

Сначала определите конечную точку. Вам нужно будет заменить {PROJECT_NUMBER} и {ENDPOINT_ID} ниже.
endpoint = aiplatform.Endpoint(
endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")
Идентификатор вашей конечной точки (endpoint_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 нейронами. Если вы хотите написать собственную логику для возврата строковой метки вместо индекса, вы можете использовать пользовательские процедуры предсказания .
Прогнозирование партий
Существуют разные способы форматирования данных для пакетного прогнозирования . Для простоты мы выгрузим данные numpy в файл JSON и сохраним этот файл в Cloud Storage.
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}")
Идентификатор модели можно найти, выбрав название модели и версию в разделе «Модели» консоли, а затем выбрав «Подробности версии».

Наконец, используйте 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 Serving для декодирования байтов изображения. Это потребует немного больше работы, но будет намного эффективнее для больших изображений и создания приложений. Пример можно увидеть в этом блокноте.
🎉 Поздравляем! 🎉
Вы научились использовать Vertex AI для:
- Загрузите модели в реестр моделей Vertex AI.
- Получайте прогнозы партиями и онлайн.
Чтобы узнать больше о различных компонентах Vertex, ознакомьтесь с документацией .
7. Уборка
Если вы не планируете использовать модели с конечной точки, вам следует удалить их оттуда. Вы также можете полностью удалить конечную точку. При необходимости вы всегда можете повторно развернуть модель на конечной точке.

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

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