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.
3. Настройте свою среду
Выполните действия, описанные в разделе «Обучение пользовательских моделей с помощью лаборатории Vertex AI», чтобы настроить среду.
4. Загрузите модель в реестр.
Прежде чем мы сможем использовать нашу модель для получения прогнозов, нам необходимо загрузить ее в реестр моделей Vertex AI , который представляет собой репозиторий, в котором вы можете управлять жизненным циклом ваших моделей ML.
Вы можете загружать модели при настройке пользовательского задания обучения, как показано ниже.
Или вы можете импортировать модели после завершения задания обучения, если вы храните сохраненные артефакты модели в корзине Cloud Storage. Именно этот вариант мы будем использовать в этой лабораторной работе.
Перейдите в раздел «Модели» в консоли.
Выберите ИМПОРТ
Выберите «Импортировать как новую модель» , а затем укажите имя своей модели.
В настройках модели импортируйте модель с помощью предварительно созданного контейнера и используйте 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.
Импортируйте Vertex AI Python SDK, numpy и PIL.
from google.cloud import aiplatform
import numpy as np
from PIL import Image
Загрузите изображение ниже и загрузите его в свой экземпляр рабочей среды. Мы проверим модель на этом изображении одуванчика.
Сначала определите конечную точку. Вам потребуется заменить {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 единицами. Если вы хотите написать собственную логику для возврата метки строки вместо индекса, вы можете использовать собственные процедуры прогнозирования .
Пакетные прогнозы
Существуют разные способы форматирования данных для пакетного прогнозирования . Для простоты мы выгрузим числовые данные в файл 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}")
Идентификатор модели можно найти, выбрав название модели и версию в разделе «Модели» консоли, а затем выбрав «ДЕТАЛИ ВЕРСИИ».
Наконец, используйте 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. Очистка
Вам потребуется отменить развертывание моделей с конечной точки, если вы не планируете их использовать. Вы также можете полностью удалить конечную точку. При необходимости вы всегда можете повторно развернуть модель в конечной точке.
Блокноты, управляемые Workbench, автоматически отключаются после 180 минут простоя, поэтому вам не нужно беспокоиться об отключении экземпляра. Если вы хотите вручную завершить работу экземпляра, нажмите кнопку «Стоп» в разделе консоли Vertex AI Workbench. Если вы хотите полностью удалить блокнот, нажмите кнопку «Удалить».
Чтобы удалить сегмент хранилища, в меню навигации облачной консоли перейдите к разделу «Хранилище», выберите сегмент и нажмите «Удалить»: