Управляемая событиями архитектура для развертывания модели машинного обучения почти в реальном времени.

Сегодня мы хотим поделиться с вами управляемой событиями архитектурой, которую мы недавно реализовали для развертывания и использования модели машинного обучения. Мы считаем, что эта архитектура может быть полезна в качестве руководства для развертывания и использования моделей 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.

Надеемся, эта информация окажется для вас полезной.

До следующего раза, друзья мои,

Спасибо за чтение.