О плюсах и минусах различных подходов к распространению вашей модели.

Как наставник по науке о данных, я получаю много вопросов об инфраструктурной стороне машинного обучения. Многие новички создают модели, которые хотят представить в Интернете через API, но даже при большом количестве доступных ресурсов у них все еще возникают проблемы с этим. Одна из основных причин этого заключается в том, что часто неясно, какой «лучший» способ достичь этой цели.

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

В этом посте я выделю 5 распространенных методов, которые вы можете использовать для развертывания в Интернете простого API машинного обучения в реальном времени (например, приложения Flask). Хотя этот список не является исчерпывающим, он должен указать вам правильное направление для выбора решения, которое подходит именно вам.

Разверните его на инстансе EC2

На мой взгляд, один из самых простых (но наименее надежных) способов развернуть вашу модель в Интернете - запустить ее на экземпляре EC2. Это так же просто, как получить виртуальную машину в облаке, сделать ее доступной для Интернета и запустить на ней свое приложение. Пошаговое руководство по этому решению см. В одном из моих предыдущих постов здесь.

Я рекомендую это решение пользователям, которым нужно сделать быстрые демонстрации или просто временно что-то продемонстрировать. Если ваше приложение достаточно маленькое, вам буквально ничего не будет стоить его размещение, и вы сможете запустить его всего за 5 минут. Вам даже не понадобится знакомство с такими инструментами, как Docker, только командная строка Linux. Для таких случаев использования это будет самый дешевый и простой вариант.

Однако этот подход требует множества хитрых ручных настроек, что не подходит для реальных производственных развертываний. Если вы хотите показать свое приложение друзьям, это решение отлично подойдет. Если вы ищете что-то устойчивое и долгосрочное - продолжайте читать.

Плюсы

  • Быстро и грязно
  • Дешево (потенциально бесплатно)
  • Простая установка / демонтаж
  • Практически не требуется опыт работы с инфраструктурой / сетью

Минусы

  • Не очень масштабируемый
  • Не производственный класс
  • Практически нет автоматизации
  • Не устойчив к ошибкам

Создайте функцию AWS Lambda

AWS Lambda - это сервис для развертывания бессерверных функций. «Бессерверный» не означает, что сервера нет, это просто означает, что вам не важна базовая инфраструктура для вашего кода, и вы платите только за то, что используете. Часто это предпочтительнее, чем инициализация и управление вашими собственными компьютерами, что вам и нужно было сделать на предыдущем шаге.

Хотя Lambda может не удовлетворять некоторым более сложным вариантам использования, она идеально подходит для простого и повторяемого кода. Он масштабируемый, чрезвычайно дешевый и довольно простой. Вам нужно будет работать с некоторыми другими службами, такими как API Gateway, но настройка будет гораздо более надежной, чем развертывание вашего приложения на автономном компьютере EC2. Для производства это, наверное, самый дешевый вариант.

Однако они менее гибкие, чем чисто контейнерные решения, которые вы можете увидеть с помощью ECS или EKS. Такие функции, как поддерживаемые языки программирования, ограничены. Я рекомендую это решение пользователям с простым кодом машинного обучения, которые вообще не хотят думать об инфраструктуре .

Плюсы:

  • Производственный класс
  • Отлично подходит для небольших простых приложений / функций
  • Бессерверный (очень дешевый)

Минусы:

  • Менее гибкий, чем другие решения
  • Требуется знание дополнительных сервисов AWS

Поместите его в контейнер и разверните в Kubernetes (EKS)

Kubernetes в настоящее время является одним из наиболее популярных вариантов управления контейнерными приложениями и их масштабирования. Декларативный характер Kubernetes помогает автоматизировать многие проблемы производственного уровня, такие как балансировка нагрузки или автомасштабирование. В отличие от более управляемых решений для оркестрации контейнеров, таких как ECS, Kubernetes обеспечивает детальный контроль над вашим приложением машинного обучения.

Простые приложения машинного обучения без сохранения состояния часто подходят для Kubernetes. Кроме того, существует множество зрелых решений с открытым исходным кодом для машинного обучения в Kubernetes (например, Seldon), которые обеспечивают поддержку конкретных предметных областей и дополнительно абстрагируют сложности инфраструктуры.

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

Сеть Kubernetes сложна и требует большого опыта для глубокого понимания и работы. Хотя кластер Kubernetes также может показаться дешевле, чем более управляемое решение машинного обучения, плохо управляемый кластер может привести к еще большим неожиданным денежным затратам. Я рекомендую этот подход пользователям, которым абсолютно необходимо решение производственного уровня, которые хотят детализированные элементы управления приложениями или просто хотят получить опыт работы с Kubernetes.

Плюсы:

  • Очень масштабируемый
  • Хорошая автоматизация
  • Производственный класс
  • Большая поддержка сообщества
  • Очень гибкий
  • Опыт работы с популярным фреймворком и низкоуровневой CS!

Минусы:

  • Потенциально много работы
  • Рисковано для новичков
  • В некоторых случаях просто ненужное
  • Для обеспечения паритета функций с управляемыми сервисами требуется множество настроек.

Поместите его в контейнер и разверните с помощью Elastic Container Service (ECS)

Как и Kuberenetes, ECS - это служба оркестровки контейнеров для развертывания приложений. Разница в распределении обязанностей. Вместо того, чтобы отвечать за некоторые проблемы с инфраструктурой нижнего уровня, которые вам придется решать в Kubernetes, отвечает за вас AWS. ECS похожа на Lambda тем, что абстрагирует инфраструктуру. С точки зрения гибкости он находится между Lambda и очень гибким Kubernetes.

Я рекомендую это решение людям без опыта Kubernetes, которые хотят развертывать контейнерные приложения. Если вы работаете в одиночку, может быть сложно управлять своим приложением в Kubernetes вместе со всеми проблемами управления кластером. Лучше избавиться от этих обязанностей и сосредоточиться на самом приложении. Если вы не используете Docker, я бы предпочел Lambda.

Плюсы:

  • Значительно более простая настройка, чем Kubernetes
  • Больше функций из коробки
  • Легче управлять как индивидуальный разработчик (с опытом работы с контейнерами)
  • Первоклассная поддержка контейнерных приложений

Минусы:

  • Менее детальный контроль
  • Потенциально дороже

Создать конечную точку Sagemaker

AWS Sagemaker - это первоклассный набор инструментов машинного обучения для облака. От размещенных до ноутбуков jupyter и конечных точек easy model - опыт работы с Sagemaker, вероятно, будет похож на создание развертываний локально на вашем компьютере. Специальная поддержка машинного обучения поставляется с целым набором сервисов, которые позволяют пользователям создавать и развертывать готовые к эксплуатации приложения машинного обучения со всеми наворотами, которые вам придется вручную настраивать для других опций.

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

Я рекомендую это решение новым пользователям облака, которые хотят изучить только одну новую технологию для развертывания своих моделей и хотят, чтобы все остальные аспекты инфраструктуры машинного обучения были удовлетворены с самого начала. Если у вас нет опыта работы с некоторыми из других вышеупомянутых технологий, исследования в Sagemaker, вероятно, позволят вам быстро развиваться, практически не имея опыта работы в облаке.

Плюсы:

  • Первоклассная поддержка машинного обучения
  • Управляемая инфраструктура и среды
  • Производственный уровень, масштабируемый

Минусы:

  • Возможно дороже некоторых других решений
  • Потенциально менее гибкий

И более…

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

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

Подпишитесь на меня в LinkedIn и Twitter, если вас ждет разочарование.