Управляемая событиями архитектура для развертывания модели машинного обучения почти в реальном времени.
Сегодня мы хотим поделиться с вами управляемой событиями архитектурой, которую мы недавно реализовали для развертывания и использования модели машинного обучения. Мы считаем, что эта архитектура может быть полезна в качестве руководства для развертывания и использования моделей ML / DL на AWS.
Мы считаем эту архитектуру полезной, поскольку она может обеспечивать классификацию почти в реальном времени при определенных условиях - например, масштабируемость и ограничения параллелизма.
В частности, мы использовали эту архитектуру для развертывания и использования модели классификации изображений. Однако мы считаем, что его можно адаптировать к другим моделям ML / DL благодаря его архитектурным принципам.
Ключевые архитектурные принципы
Архитектура следует двум основным принципам:
- Слабо связанная архитектура: мы разбиваем процесс на отдельные несвязанные службы. Эти сервисы как можно меньше пересекаются по функциональности. Таким образом, мы можем гарантировать масштабируемость, простоту обслуживания и расширяемость для других вариантов использования.
- Архитектура, управляемая событиями. Архитектура использует события для запуска и обмена данными между разделенными службами. В нашем случае он обрабатывает события для классификации данного изображения.
Архитектура AWS
На следующем изображении вы можете увидеть предлагаемую архитектуру и то, как взаимодействуют различные службы.
Архитектура включает шесть основных функций: хранение, развертывание модели, обработка данных, уведомление о событиях, хранилище событий и оповещение о событиях.
- Хранилище: мы используем AWS S3 в качестве хранилища для объектов, которые будут обрабатываться и классифицироваться в соответствии с нашей моделью ML / DL - изображением в соответствии с нашим вариантом использования.
- Развертывание модели. Модель обучается и развертывается с помощью AWS Sagemaker. Одним из преимуществ использования AWS Sagemaker является то, что модель легко развертывается в конечной точке. Итак, вы получаете прогнозы, предоставляя данные конечной точке с помощью простого запроса - подробнее здесь.
- Обработка данных: триггер S3 вызывает лямбда-функцию обработки данных каждый раз, когда объект помещается в корзину S3. В нашем случае функция Lambda принимает изображение и изменяет его размер. Затем он вызывает конечную точку Sagemaker, чтобы получить классификацию изображения. Lambda публикует ответ в теме AWS SNS после того, как конечная точка Sagemaker вернет классификацию.
- Уведомление о событиях: мы используем AWS SNS в качестве сервиса для координации и управления доставкой сообщений другим сервисам, которым требуется информация о классификации изображений. В нашем случае сообщение SNS может содержать метаданные изображения, ответ Sagemaker Endpoint и некоторые поля управления, такие как дата запроса, версия модели , и так далее.
- Хранение событий: триггер SNS вызывает лямбда-функцию хранения событий после публикации сообщения в SNS. В нашем случае функция Lambda записывает сообщение SNS в AWS Dynamo. Затем он отправляет изображение и ответ Sagemaker в канал Slack через Slack API.
- Оповещение о событии: мы используем Slack API для публикации изображения и ответа Sagemaker в канале Slack.
Выводы
Мы настоятельно рекомендуем оценить ваш конкретный вариант использования, прежде чем переходить на эту архитектуру. Иногда простой подход может быть более полезным - например, размещение вашей модели с использованием лямбда-выражений и шлюза API, как указано в этом сообщении.
Вот несколько выводов:
- Мы считаем, что степень разделения архитектуры можно улучшить, разделив функциональность, реализованную в лямбда-функциях - это фактор, который следует учитывать в зависимости от вашего варианта использования.
- Мы использовали AWS Sagemaker, так как используемые в модели библиотеки имеют размер более 250 МБ. Таким образом, развертывание модели с использованием AWS Lambdas оказалось невозможным.
- AWS SageMaker Elastic Inference можно подключить к конечной точке Sagemaker, чтобы вы могли увеличить пропускную способность и уменьшить задержку при получении выводов в реальном времени из ваших моделей глубокого обучения - дополнительная информация здесь.
- Мы используем метод files.upload из приложения Slack для публикации изображений в канал Slack. Если размещать изображения не нужно, можно использовать простой Slack webhook.
Надеемся, эта информация окажется для вас полезной.
До следующего раза, друзья мои,
Спасибо за чтение.