Архитектура производства для приложения для машинного обучения с большими данными в реальном времени?
Я начинаю изучать некоторые вещи о больших данных с большим вниманием к интеллектуальному анализу, и для этого у меня есть тематическое исследование, которое я хотел бы реализовать:
У меня есть набор данных о состоянии работоспособности серверов, который обрабатывается каждые 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 миллиардов новых строк данных каждый день
Архитектура
BONUS
Дополнительная информация: http://highscalability.com/blog/2011/7/18/new-relic-architecture-collecting-20-billion-metrics-a-day.html