(Первоначальная публикация в блоге Кая Венера: «Машинное обучение и развертывание моделей на основе 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 и обсудим это!