Статьи

Машинное обучение и аналитика в реальном времени в приложениях Apache Kafka

Ноутбук на столе рядом с кружкой и ноутбуком

Взаимоотношения между Apache Kafka и машинным обучением (ML) интересны, о которых я написал довольно много в « Как создать и развернуть масштабируемое машинное обучение в производстве с помощью Apache Kafka» и « Использование Apache Kafka для ускоренного машинного обучения» .

В этом посте рассматривается конкретная часть построения инфраструктуры машинного обучения: развертывание аналитической модели в приложении Kafka для прогнозов в реальном времени.

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

Мы обсудим и сравним два различных варианта развертывания моделей: серверы моделей с удаленными вызовами процедур (RPC) и встроенные модели в клиентские приложения Kafka. В нашем примере специально используется TensorFlow, но базовые принципы также действительны для других систем машинного обучения / глубокого обучения, таких как H2O.ai, Deeplearning4j, Google Cloud Machine Learning Engine и SAS.


Вам также может понравиться: 
Создание аналитических API в реальном времени в Scale

TensorFlow — библиотека с открытым исходным кодом для машинного обучения / глубокого обучения

TensorFlow — это программная библиотека с открытым исходным кодом для высокопроизводительных численных расчетов. Его гибкая архитектура позволяет легко развертывать вычисления на различных платформах (процессорах, графических процессорах, TPU и т. Д.), От настольных компьютеров до кластеров серверов, мобильных и периферийных устройств. Первоначально разработанный исследователями и инженерами из команды Google Brain в рамках организации по искусственному интеллекту Google, он имеет мощную поддержку машинного обучения и глубокого обучения и используется во многих областях. TensorFlow — это целая экосистема, а не просто один компонент.

Учитывая, что этот блог посвящен обслуживанию моделей, нас в первую очередь интересует объект SavedModel, в котором хранится обученная модель и TensorFlow Serving в качестве сервера моделей:

SavedModel — это, по сути, двоичный файл, сериализованный с использованием буферов протокола (Protobuf). Созданные классы в C, Python, Java и т. Д. Могут загружать, сохранять и получать доступ к данным. Формат файла — либо читаемый человеком TextFormat (.pbtxt), либо сжатые двоичные буферы протокола (.pb). Графовый объект является основой вычислений в TensorFlow. Веса хранятся в отдельных файлах контрольных точек.

Поскольку мы сосредоточены на развертывании модели TensorFlow, то, как модель была обучена заранее, не имеет значения. Вы можете использовать облачный сервис и конвейер интеграции, такой как Cloud ML Engine и его экосистему Google Cloud Platform (GCP), или создать свой собственный конвейер для обучения модели. Kafka может сыграть ключевую роль не только в развертывании модели, но и в интеграции данных, предварительной обработке и мониторинге.

Потоковая обработка с модельными серверами и RPC

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

Многие модели серверов доступны. Вы можете выбрать один из серверов моделей с открытым исходным кодом, таких как Seldon Server, PredictionIO и Hydrosphere.io, или использовать серверы моделей от поставщиков аналитики, таких как H2O.ai, DataRobot, IBM или SAS.

В этой статье используется TensorFlow Serving, модель сервера от TensorFlow. Он может быть размещен самостоятельно или использовать сервис Cloud ML Engine. TensorFlow Serving обладает следующими характеристиками:

  • Содержит конечные точки gRPC и HTTP
  • Выполняет управление версиями модели без изменения кода клиента
  • Планирует группирование отдельных запросов на вывод в пакеты для совместного выполнения
  • Оптимизирует время вывода для минимальной задержки
  • Поддерживает множество обслуживаемых объектов (обслуживаемая — это либо модель, либо задача для обслуживания данных, которые соответствуют вашей модели):

    • Модели TensorFlow
    • вложениях
    • Словарные справочные таблицы
    • Преобразования функций
    • Не основанные на TensorFlow модели
  • Способен канарейке и A / B тестированию

Вот как взаимодействует сервер приложений и моделей Kafka:

Процесс внедрения приложения Kafka прост. Вот фрагменты кода для приложения Kafka Streams и RPC для обслуживания TensorFlow:

1. Импорт Kafka и API обслуживания TensorFlow:


Джава