(Первоначальная публикация в блоге Кая Венера: «Машинное обучение и развертывание моделей на основе Kafka)

Apache Kafka стал стандартом де-факто для стриминга событий по всему миру и в разных отраслях. Машинное обучение (ML) включает в себя обучение модели на исторических данных и развертывание модели для оценки и прогнозирования. В то время как обучение в основном является пакетным, для оценки обычно требуются возможности реального времени в масштабе и надежности. Apache Kafka играет ключевую роль в современных инфраструктурах машинного обучения. Архитектура следующего поколения использует собственный сервер модели потоковой передачи Kafka вместо вызовов RPC (HTTP/gRPC):

В этой записи блога рассматриваются архитектуры и компромиссы между тремя вариантами развертывания модели с помощью Kafka: встроенная модель в приложение Kafka, модельный сервер и RPC, модельный сервер и встроенная связь Kafka.

Кафка и архитектура машинного обучения

Развертывание модели обычно полностью отделено от обучения модели (с точки зрения процесса и технологии). Обучение модели часто выполняется в эластичной облачной инфраструктуре или озерах данных, таких как Hadoop или Spark. Оценка модели (т. е. выполнение прогнозов) обычно является критически важной рабочей нагрузкой с различными SLA по времени безотказной работы и требованиями к задержке:

Узнайте больше об этой архитектуре и ее связи с современными подходами машинного обучения, такими как архитектуры гибридного машинного обучения или AutoML, в записи блога Использование Apache Kafka для передового машинного обучения.

Две альтернативы развертывания модели в инфраструктурах Kafka: модель может быть встроена в приложение Kafka или развернута на отдельном сервере моделей. В сообщении блога Модельный сервер и варианты развертывания модели в инфраструктуре Kafka подробно рассматриваются варианты использования и архитектуры, а также рассматриваются некоторые примеры кода.

Далее рассматриваются компромиссы между обоими вариантами и представлен третий вариант: собственный сервер модели потоковой передачи Kafka.

RPC между приложением Kafka и сервером моделей

Аналитическая модель развертывается на сервере моделей. Потоковое приложение Kafka выполняет вызов запрос-ответ, чтобы отправить входные данные в модель и получить взамен прогноз:

Почти каждый продукт или платформа машинного обучения предоставляет модельный сервер. Это включает в себя фреймворки с открытым исходным кодом, такие как TensorFlow и сервер соответствующей модели TF Serving, а также проприетарные инструменты, такие как SAS, поставщиков AutoML, таких как DataRobot, и облачные службы ML от всех основных поставщиков облачных услуг, таких как AWS, Azure, GCP.

Плюсы и минусы модельного сервера с RPC

Компромиссы при использовании Kafka в сочетании с модельным сервером на основе RPC и HTTP/gRPC:

  • Простая интеграция с существующими технологиями и организационными процессами.
  • Легче всего понять, если вы из мира, где нет потокового вещания.
  • Тесная связь доступности, масштабируемости и задержки/пропускной способности между приложением и модельным сервером.
  • Разделение проблем (например, модель Python + приложение потоковой передачи Java)
  • Ограниченная масштабируемость и надежность
  • Поздний переход на реальную потоковую передачу также возможен
  • Встроенное управление моделями для различных моделей, управления версиями и A/B-тестирования.
  • Встроенный мониторинг моделей

Пример: обслуживание TensorFlow с потоками GRPC и Kafka.

Пример такого подхода доступен на Github: TensorFlow Serving + gRPC + Java + Kafka Streams. В этом случае модель TensorFlow экспортируется и развертывается в инфраструктуре TensorFlow Serving.

Встроенная модель в приложение Kafka

Аналитическая модель — это просто двоичный файл, т. е. файл, хранящийся в памяти или постоянном хранилище.

Тип данных отличается и зависит от платформы ML. Но неважно, Java ли это (например, с H2O), Protobuf (например, с TensorFlow) или проприетарное (со многими коммерческими инструментами ML).

Любая модель может быть встроена в приложение Kafka (если решение машинного обучения предоставляет программные API, но почти каждый инструмент делает это):

Приложением Kafka для внедрения модели может быть либо собственный механизм обработки потоков Kafka, такой как Kafka Streams или ksqlDB, либо «обычное» приложение Kafka, использующее любой клиент Kafka, например Java, Scala. , Python, Go, C, C++ и т. д.

Плюсы и минусы встраивания аналитической модели в приложение Kafka

Компромиссы внедрения аналитических моделей в приложение Kafka:

  • Лучшая задержка как локальный вывод вместо удаленного вызова
  • Отсутствие взаимосвязи доступности, масштабируемости и задержки/пропускной способности вашего приложения Kafka Streams.
  • Вывод в автономном режиме (устройства, обработка границ и т. д.)
  • Нет побочных эффектов (например, в случае сбоя), все покрывается обработкой Kafka (например, ровно один раз)
  • Нет встроенного управления моделями и мониторинга

Пример: приложение Kafka Python со встроенной моделью TensorFlow

Надежный и масштабируемый пример подхода со встроенной моделью представлен в проекте Github Потоковое машинное обучение с помощью Kafka, MQTT и TensorFlow для 100 000 подключенных автомобилей. В этой демонстрации Python используется как для обучения модели, так и для ее развертывания в отдельных масштабируемых контейнерах в инфраструктуре Kubernetes.

Несколько других (более простых) демонстраций для опробования этого подхода доступны здесь: Примеры Machine Learning + Kafka Streams. В примерах используются TensorFlow, H2O.ai и DeepLearning4J (DL4J) в сочетании с Kafka Streams и ksqlDB.

Kafka-native Streaming Model Server

Сервер модели потоковой передачи на основе Kafka сочетает в себе некоторые характеристики обоих рассмотренных выше подходов. Это позволяет разделить задачи, предоставив образцовому серверу все ожидаемые функции. Но сервер модели не использует связь RPC через HTTP/gRPC и все недостатки, которые это создает для потоковой архитектуры. Вместо этого модельный сервер общается через собственный протокол Kafka и темы Kafka с клиентским приложением:

Плюсы и минусы Kafka-native Streaming Model Server

Недостатки сервера модели потоковой передачи на основе Kafka:

  • Хорошая задержка благодаря потоковой передаче, встроенной в Kafka.
  • Некоторая взаимосвязь доступности, масштабируемости и задержки/пропускной способности вашего приложения Kafka Streams.
  • Некоторые побочные эффекты (например, в случае сбоя), но большинство потенциальных проблем покрывается обработкой Kafka( например, разделение и постоянство через темы Кафки)
  • Встроенное управление моделями для различных моделей, управления версиями и A/B-тестирования.
  • Встроенный мониторинг моделей
  • Разделение проблем (например, модель Python + приложение потоковой передачи Java)
  • Масштабируемость и надежность модельного сервера не обязательно похожа на Kafka (поскольку базовая реализация часто еще не является родной для Kafka)

Сервер модели потоковой передачи, встроенный в Kafka, предоставляет множество преимуществ архитектуры потоковой передачи и функций сервера модели. Просто имейте в виду, что родной интерфейс Kafka НЕ означает, что сам модельный сервер реализован с помощью Kafka. Следовательно, проверьте свои требования к масштабируемости, надежности и задержке, чтобы решить, может ли встроенная модель быть лучшим подходом.

Пример: развертывание потоковой модели с помощью Kafka и Seldon

Seldon — это надежный и масштабируемый модельный сервер с открытым исходным кодом. Это позволяет нам управлять, обслуживать и масштабировать модели на любом языке или платформе Kubernetes.

В середине 2020 года Seldon добавил ключевое отличие от многих других моделей серверов на рынке: Seldon добавил поддержку Kafka. Таким образом, Seldon сочетает в себе преимущества отдельной модели сервера с потоковой парадигмой Kafka:

Блокнот Jupyter демонстрирует этот пример с использованием scikit-learn, фреймворка NLP spaCy, Seldon и нативной интеграции Kafka с приложениями-производителями и потребителями. Ознакомьтесь с записью в блоге Масштабируемое машинное обучение в реальном времени с использованием SpaCy, Kafka и Seldon Core для получения более подробной информации.

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

В этом сообщении блога рассматриваются три альтернативы развертывания моделей в инфраструктуре Kafka: сервер моделей с RPC, встраивание моделей в приложение Kafka и собственный сервер моделей Kafka. Все три имеют свои компромиссы. Узнайте их и оцените правильный выбор для вашего проекта. Хорошей новостью является то, что также довольно просто перейти от одного подхода к другому.

Если вы хотите узнать больше о развертывании собственной модели Kafka, ознакомьтесь со следующей видеозаписью и набором слайдов с Kafka Summit:

В докладе не рассматривается подход «сервер потоковой модели» (поскольку в 2019 году ни один модельный сервер не предоставлял собственный интерфейс Kafka). Но вы все равно можете многое узнать о различных архитектурах и передовых практиках.

Если вы хотите узнать больше о «Потоковом машинном обучении с Kafka — без другого озера данных», ознакомьтесь со следующей видеозаписью и набором слайдов. В нем исследуется упрощенная архитектура и преимущества многоуровневого хранилища для Kafka:

Каков ваш опыт работы с Kafka и развертыванием моделей? Каковы ваши варианты использования? Какой подход лучше всего подходит для вас? Какова ваша стратегия? Давайте подключимся на LinkedIn и обсудим это!