Создавайте крупномасштабное машинное обучение в производственной среде с помощью Apache Kafka
Интеллектуальные приложения реального времени революционизируют все отрасли. Машинное обучение и его ответвление, глубокое обучение, переживают бум, потому что машинное обучение позволяет компьютерам находить глубокое понимание без участия человека. Это именно то, что необходимо в таких областях, как анализ неструктурированных данных, распознавание изображений, распознавание речи и интеллектуальное принятие решений, что полностью отличается от традиционных методов программирования, таких как Java, .NET или Python.
Машинное обучение не ново: появление больших наборов данных и повышение вычислительной мощности позволило каждому предприятию создавать аналитические модели. Все отрасли применяют аналитические модели к корпоративным приложениям и микросервисам для увеличения прибыли, снижения затрат или улучшения взаимодействия с пользователем.
В этом посте будет представлено применение машинного обучения в критически важных системах реального времени с использованием Apache Kafka в качестве централизованной, масштабируемой критически важной системы, а также представлено использование API Kafka Streams для создания интеллектуальных потоковых приложений.
Масштабируемые критически важные системы реального времени
Появление Интернета, смартфонов и постоянное онлайн-мышление изменили поведение людей. К ним относятся ожидания относительно того, как люди взаимодействуют с устройствами, продуктами и услугами: люди хотят иметь возможность получать информацию в режиме реального времени. Это также ставит перед компаниями огромную задачу: как действовать быстро, чтобы воспользоваться возможностью. Пакетные системы больше не могут удовлетворить спрос, и системы реального времени должны быть заменены.
Традиционные предприятия могут реализовать очень мощные механизмы обработки в реальном времени для удовлетворения повседневных потребностей бизнеса. Для этого часто требуется знание предметной области, чтобы понимать различные сценарии приложений и создавать новые модели потоковой аналитики для повышения ценности бизнеса. Стриминг уже существует в различных отраслях.
- Обнаружение мошенничества. Сопоставляйте информацию о платежах с историческими данными или известными шаблонами, чтобы обнаруживать мошенничество до того, как оно произойдет. Это предъявляет высокие требования к скорости обработки, поскольку вы должны отменить транзакцию до того, как она произойдет.
- перекрестные продажи. Используйте данные о клиентах, чтобы предлагать покупателям индивидуальные распродажи или скидки, и старайтесь, чтобы покупатели закрывали свои заказы до того, как они покинут магазин. В этом случае вам необходимо использовать данные в реальном времени (такие как данные о местоположении, данные о платежах) и исторические данные (из вашей CRM-системы или платформы лояльности), чтобы предоставить каждому клиенту наиболее подходящий план продаж.
- профилактическое обслуживание. Используйте машинные данные для прогнозирования отказов машин и замены старых деталей до того, как они выйдут из строя. С практической точки зрения это может сэкономить много денег (производство), увеличить прибыль (торговые автоматы) или улучшить взаимодействие с пользователем (прогнозирование отказов телекоммуникационной сети).
Общим для всех этих сценариев является обработка данных по мере их создания. Вы должны справляться с произошедшими событиями как можно быстрее, проактивно, а не реактивно. Ваша система должна принимать решения до того, как произойдет мошенничество, или до того, как покупатель покинет магазин, или до того, как машина выйдет из строя.
Конечно, это не означает, что требуется миллисекундное время отклика. В некоторых случаях подойдет даже пакетная обработка. Например, в большинстве производственных отраслей или сценариев IoT профилактическое обслуживание может предусматривать временные интервалы в часы или даже дни, а замена деталей может производиться в течение того же дня или в течение недели. Это экономит много денег, потому что вы можете обнаружить проблемы до того, как они возникнут, и избежать более серьезных повреждений.
Применение машинного обучения в интеллектуальных системах реального времени
Критически важные приложения реального времени уже много лет существуют без использования машинного обучения, так почему же машинное обучение произведет революцию в этой области?
Если вы читали о машинном обучении и его ответвлении, глубоком обучении, вы часто будете сталкиваться со сценариями, подобными следующему.
- Идентификация изображения. Загрузите изображение на Facebook, и объекты на изображении, такие как ваши друзья, фон или пиво в вашей руке, будут проанализированы.
- голосовой перевод. Таким образом, роботы могут взаимодействовать с людьми посредством сгенерированного текста или голоса.
- человеческое поведение. IBM Watson побеждает сильнейшего игрока в Jeopardy, а AlphaGo от Google побеждает самого профессионального игрока в го.
Вышеприведенные примеры все чаще актуальны для компаний, которые хотят создавать инновационные приложения и отличаться от конкурентов. Точно так же мы можем применять машинное обучение в «традиционных сценариях», таких как обнаружение мошенничества, перекрестные продажи или профилактическое обслуживание, для улучшения бизнес-процессов и принятия более эффективных решений на основе данных. Существующие бизнес-процессы можно оставить как есть, нужно лишь заменить бизнес-логику и правила аналитическими моделями для улучшения автоматизированного принятия решений.
Вот как можно использовать Kafka в качестве потоковой платформы для создания, эксплуатации и мониторинга крупномасштабных критически важных аналитических моделей.
Машинное обучение — жизненный цикл разработки аналитической модели
Давайте сначала разберемся с жизненным циклом разработки аналитической модели:
- Построить: используйте алгоритмы машинного обучения (такие как GLM, наивный байесовский алгоритм, случайный лес, повышение градиента, нейронные сети и т. д.) для анализа исторических данных и извлечения полезных сведений. На этом этапе требуется сбор, подготовка и преобразование данных.
- проверять: Используйте какой-либо метод проверки (например, перекрестную проверку), чтобы подтвердить, что аналитическая модель может обрабатывать новые входные данные.
- Операция: разверните аналитическую модель в производственной среде.
- монитор: Наблюдайте за выходом аналитической модели. Это состоит из двух частей: отправка оповещений при достижении определенного порога (мониторинг на бизнес-уровне); поддержание точности результатов и качества метрик (мониторинг аналитических моделей).
- непрерывный цикл: повторите описанные выше шаги, чтобы улучшить аналитическую модель, вручную или онлайн, обновляя модель по мере поступления новых событий.
Вся команда работает вместе с самого начала и рассматривает следующие вопросы:
- Как он должен вести себя в производственной среде?
- Какие технологии поддерживаются системой производственной среды?
- Как контролировать вывод модели и производительность?
- Создать полную инфраструктуру машинного обучения или использовать существующую структуру для разделения обучения модели и вывода модели?
Например, специалист по данным разрабатывает программу Python, которая создает очень точную модель, но она бесполезна, если вы не можете развернуть ее в рабочей среде (потому что она не масштабируется или не ведет себя должным образом). К этому моменту вы, возможно, уже поняли, почему Apache Kafka так подходит для аналитических моделей в производственных средах. В следующих главах будет представлено использование Apache Kafka в качестве потоковой платформы в сочетании с машинным обучением или платформами глубокого обучения для создания, эксплуатации и мониторинга аналитических моделей.
Машинное обучение и Apache Kafka архитектура
Разобравшись с жизненным циклом разработки машинного обучения, давайте рассмотрим архитектурный справочник по построению, эксплуатации и мониторингу аналитических моделей:
БытьБыть
В основе этой архитектуры лежит использование Kafka в качестве посредника между различными источниками данных, средами построения моделей и производственными приложениями.
Данные объектов, используемые для построения моделей, поступают в Kafka из различных приложений и баз данных. Средой построения модели может быть хранилище данных, среда больших данных, такая как Spark или Hadoop, или сервер, на котором выполняются сценарии Python. Модели можно развертывать где угодно, если производственные приложения имеют к ним доступ и могут применять их к входным демонстрационным данным. Производственные приложения могут получать данные из конвейера данных Kafka или использовать API Kafka Streams.
Кафка становится центральной нервной системой всей системы, что также приносит следующие преимущества:
- Конвейеры данных стали проще.
- Больше нет связи между построением аналитической модели и сервисом.
- Используйте режим реального времени или пакетный режим в зависимости от ситуации.
- Аналитические модели могут быть развернуты в высокопроизводительных, масштабируемых, критически важных средах.
В дополнение к самой Kafka можно добавить другие компоненты экосистемы Kafka с открытым исходным кодом, такие как Kafka Connect, Kafka Streams, Confluent REST Proxy, Confluent Schema Registry или KSQL, вместо простого использования Kafka Producer и Consumer API.
БытьБыть
Следующие две главы описывают, как развертывать аналитические модели с помощью Kafka Steams API.
Пример жизненного цикла разработки машинного обучения
Теперь давайте рассмотрим пример архитектуры машинного обучения, построенной на основе Kafka:
(нажмите, чтобы увеличить изображение)
В зеленой области мы видим компоненты, используемые для построения и проверки аналитической модели. В оранжевой области мы видим платформу потоковой передачи, где развернуты аналитические модели для вывода новых событий и выполнения мониторинга.
Производители данных постоянно отправляют события, а платформы аналитики получают эти данные пакетами или в режиме реального времени, а затем используют алгоритмы машинного обучения для построения аналитических моделей. Аналитические модели развертываются на платформе потоковой передачи, которая применяет аналитическую модель к событиям для вывода результатов (или прогнозов), которые затем отправляются потребителям данных.
В этом примере мы разделяем обучение модели и вывод модели, что сегодня является обычной практикой в большинстве проектов машинного обучения.
обучение модели
Данные концентрируются в кластере Hadoop через Kafka, а затем H2O.ai используется для анализа этих исторических данных и построения нейронной сети. Специалисты по данным могут использовать различные интерфейсы для выполнения этой работы — R, Python, Scala, Web UI Notebook и т. д. Построение и проверка модели происходит в кластере Hadoop, в результате чего создается аналитическая модель в байт-коде Java, которую затем можно развернуть в рабочей среде.
Вывод модели
Нейронная сеть развернута в приложении Kafka Streams. Приложение Streams может работать где угодно, его можно запускать как автономный процесс Java, внутри контейнера Docker или в кластере Kubernetes. Модель применяется в режиме реального времени к каждому вновь сгенерированному событию. Kafka Streams предоставляет нам масштабируемую, критически важную аналитическую манипуляцию моделями и высокопроизводительный вывод моделей с помощью кластеров Kafka.
Онлайн-обучение модели
Помимо разделения обучения моделей и вывода моделей, мы также можем создать полную инфраструктуру для онлайн-обучения моделей. Многие гигантские технологические компании (например, LinkedIn) в прошлом использовали Apache Kafka в качестве основы для ввода, обучения, логического вывода и вывода модели. Конечно, у этого подхода есть некоторые компромиссы. Большинство традиционных компаний будут использовать первое решение, которое подходит для большинства сегодняшних вариантов использования.
Мониторинг модели и оповещение
Развертывание аналитической модели в рабочей среде — это только первый шаг, как и мониторинг точности модели, оценок, соглашений об уровне обслуживания и других показателей, а также автоматическое оповещение в режиме реального времени. Метрики можно передавать обратно в инструменты машинного обучения через Kafka для улучшения модели.
Разрабатывайте аналитические модели с помощью H2O.ai
Ниже приведен пример использования H2O для построения аналитической модели. H2O — это фреймворк машинного обучения с открытым исходным кодом, внутри которого используются другие фреймворки, такие как Apache Spark или TensorFlow. Специалисты по данным могут использовать на нем свой любимый язык программирования, такой как R, Python или Scala. Движок H2O генерирует байт-код Java, который можно легко масштабировать с помощью Streams.
Ниже приведен скриншот построения аналитической модели с использованием H2O.ai Flow (веб-интерфейс или блокнот) и языка R:
(нажмите, чтобы увеличить изображение)
Результатом является аналитическая модель в форме байт-кода, которую можно развернуть непосредственно в критически важной производственной среде. Поэтому нам больше не нужно тратить время на размышления о том, как «портировать» модели, сгенерированные на Python или R, в производственные системы на базе платформы Java.
В этом примере используется H2O для генерации байт-кода Java, но, конечно, вы можете использовать другие фреймворки, такие как TensorFlow, Apache MXNet или DeepLearning4J, для аналогичной работы.
Развертывание аналитических моделей с помощью Kafka Steams API
Развертывание аналитических моделей с помощью Kafka Streams так же просто, как добавление модели в приложение, построенное на Streams, и применение ее к вновь сгенерированным событиям.
(нажмите, чтобы увеличить изображение)
Поскольку приложения Kafka Streams фактически используют функции Kafka, они уже являются масштабируемыми и критически важными без необходимости каких-либо корректировок модели.
Код примера можно найти на GitHub:GitHub.com/копаем хуже дочери/…. Извлеките код проекта и запустите команду сборки maven, чтобы увидеть, как модель H2O интегрируется с приложением Kafka Streams. В дальнейшем мы продолжим расширять этот пример, добавляя более сложные сценарии приложений, не только используя H2O, но и добавляя TensorFlow и DeepLearning4J.
С помощью некоторых инструментов CI/CD, таких как Maven, Gradle, Chef, Puppet, Jenkins, сочетание машинного обучения и потоковой передачи можно легко интегрировать в автоматизированные рабочие процессы непрерывной интеграции.
Совместное использование аналитических моделей между обучением и выводом с использованием открытых стандартов
Вот несколько других способов обмена моделями и их обновления среди специалистов по обработке и анализу данных, а также развертывания моделей командами DevOps.
- Собственная модель: развертывание модели непосредственно в механизме потоковой передачи, например развертывание модели Python в приложении Java через JNI.
- Генерация байт-кода (сгенерированный код): Независимо от того, какой язык программирования используется для построения моделей, их можно развернуть в потоковых приложениях путем создания двоичных библиотек или исходного кода. Они оптимизированы для лучшей производительности. Например, модель, обученная специалистом по данным в R или Python, может быть преобразована в байт-код Java.
- Внешний сервер: вызов внешнего сервера анализа в форме запроса и ответа. Внешние вызовы можно выполнять с помощью инструментов анализа, таких как SAS, MATLAB, KNIME или H2O, которые обычно предоставляют интерфейс REST.
- PMML (язык разметки прогнозирующих моделей): это более старый стандарт XML, и некоторые инструменты синтаксического анализа все еще поддерживают его, хотя все еще существуют некоторые ограничения и недостатки.
- PFA (портативный формат анализа): новый стандарт, который обеспечивает предварительную обработку моделей, использует JSON, Apache Avro и поддерживает Hadrian. Однако большинство инструментов анализа не предоставляют готовой поддержки для него.
Между этими вариантами есть компромисс. Например, PFA обеспечивает независимость и переносимость, но также имеет некоторые ограничения. С точки зрения Kafka, если вы развертываете крупномасштабные критически важные системы, использование генерации байт-кода Java является более подходящим, поскольку оно более производительно, проще в масштабировании и легче встраивается в потоки Kafka в приложении. В то же время это устраняет затраты на взаимодействие с внешними серверами REST при прогнозировании модели.
в заключении
Машинное обучение принесло пользу отрасли, и Kafka быстро стала центральной нервной системой многих компаний. Мы можем использовать Kafka для:
- Выполнение логического вывода модели в реальном времени
- Мониторинг и оповещение
- Обучите модель онлайн
- Ввод данных в пакетные слои или аналитические кластеры для обучения аналитической модели
Посмотреть оригинальный английский:How to Build and Deploy Scalable Machine Learning in Production with Apache Kafka