Архитектура производства для приложения для машинного обучения с большими данными в реальном времени?

Я начинаю изучать некоторые вещи о больших данных с большим вниманием к интеллектуальному анализу, и для этого у меня есть тематическое исследование, которое я хотел бы реализовать:

У меня есть набор данных о состоянии работоспособности серверов, который обрабатывается каждые 5 секунд. Я хочу показать данные, которые извлекаются, но что более важно: я хочу запустить ранее разработанную модель машинного обучения и показать результаты (предупреждение о сбоях сервера).

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

Моя проблема заключается в архитектуре "большой картины" этой системы: я вижу, что все части уже существуют (cloudera + mahout), но мне не хватает простого интегрированного решения для всех моих потребностей, и я не считаю, что состояние искусства делает какое-то пользовательское программное обеспечение...

Итак, может ли кто-нибудь пролить свет на такие производственные системы, как это (показывая данные с интеллектуальным анализом)? Эталонная архитектура для этого? Учебники/документация?


Примечания:

  • Я изучил некоторые связанные технологии: cloudera/hadoop, pentaho, mahout и weka. Я знаю, что Pentaho, например, может хранить большие данные и запускать специальный анализ Weka по этим данным. Используя cloudera и Impala, специалист по данным может также запускать специальные запросы и анализировать данные, но это не моя цель. Я хочу, чтобы моя система запускала модель ML и показывала результаты в хорошей информационной панели рядом с полученными данными. И я ищу платформу, которая уже позволяет это использование вместо пользовательского построения.

  • Я сосредотачиваюсь на Pentaho, поскольку у него хорошая интеграция Machine Learning, но каждый учебник, который я прочитал, был больше посвящен "ad-hoc" анализу ML, чем в реальном времени. Любой учебник по этому вопросу будет приветствоваться.

  • Я не возражаю против открытых или коммерческих решений (с пробной версией)

  • В зависимости от специфики, возможно, это не большие данные: приветствуются более "традиционные" решения.

  • Также в реальном времени речь идет о широком члене: если модель ML имеет хорошую производительность, ее каждые 5 секунд достаточно хороши.

  • Модель ML статична (не обновляется в реальном времени или не изменяет ее поведение)

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

Ответ 1

(Я автор Mahout, и я коммерциализую продукцию некоторых из ML в Mahout с акцентом на как в реальном времени, так и в масштабе: Myrrix. Я не знаю, что это именно то, что вы ищете, но, похоже, затрагивает некоторые из проблем, которые вы здесь представляете. Это может быть полезно в качестве другой ориентиры.)

Вы подчеркнули напряжение между режимами реального времени и масштабами. Это не одно и то же. Hadoop, как вычислительная среда, хорошо масштабируется, но не может ничего делать в режиме реального времени. Часть Mahout построена и Hadoop, и поэтому также ML этой формы. Weka и другие части Mahout, расположены более или менее в режиме реального времени, но затем бросают вызов масштабированию.

Система ML, которая делает оба варианта, обязательно имеет два уровня: масштабируемое автономное моделирование, с онлайн-службой и обновлениями в режиме реального времени. Вот как это должно выглядеть, IMHO, для рекомендателей, например: http://myrrix.com/design/

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

Я не думаю, что Pentaho имеет значение, если вы заинтересованы в ML, или, что-то работает на основе вашей собственной модели ML.

1 запрос каждые 5 секунд не является сложным - это 1 запрос за 5 секунд на машину или что-то еще?

Мой совет - просто создать сервер, который может отвечать на запросы против модели. Просто повторите использование любого старого контейнера HTTP-сервера, такого как Tomcat. Он может загружать последнюю модель, поскольку она публикуется из некоторого хранилища поддержки, такого как HDFS или NoSQL DB. Вы можете создавать N экземпляров сервера без особых усилий, поскольку они, похоже, не нуждаются в общении.

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

Ответ 2

Вы можете настроить свой собственный, используя комбинацию Apache Samza или S4 или Storm для анализа потока данных в реальном времени и впрыскивания параллельной и распределенной версии алгоритмов машинного обучения по вашему выбору. Но крупномасштабные алгоритмы параллельного машинного обучения - это сложное усилие и область активных исследований. В последнее время были достигнуты некоторые успехи: вы можете проверить Yahoo! Лаборатории SAMOA и Vowpal Wabbit

Ответ 3

Что-то вроде NewRelic?

Статистика

  • Новая реликвия - это управление эффективностью приложений (APM) как служба.
  • 175 000+ процессов приложений отслеживаются глобально
  • 10 000 клиентов
  • 20+ миллиардов показателей приложений, собираемых каждый день.
  • 1,7 + миллиард веб-страниц, собираемых каждую неделю.
  • Каждая метрика "времени" составляет около 250 байт.
  • 100k timeslice записей, вставленных каждую секунду
  • 7 миллиардов новых строк данных каждый день

Архитектура

  • Платформа

    • Веб-интерфейс

      • Ruby on Rails
      • Nginx
      • Linux
      • 2 @12 основных процессоров Intel Nehalem с оперативной памятью 48 ГБ.
    • Сборщик данных и веб-службы Beacon

      • Java
      • Сервлеты на причале
      • Сборщик метрик приложений: 180k + запросы в минуту, ответ в 3ms
      • Обслуживание маяков веб-метрик: 200 тыс. запросов в минуту, ответ в 0,15 м.
      • Оверенный MySQL с использованием Percona build
      • Linux
      • 9 @24-ядерный процессор Intel Nehalem с оперативной памятью 48 ГБ, подключенный к SAS RAID 5
      • Голый металл (без виртуализации)

BONUS

Дополнительная информация: http://highscalability.com/blog/2011/7/18/new-relic-architecture-collecting-20-billion-metrics-a-day.html