Выбор единой платформы для реализации задач машинного обучения в организации позволяет решить проблему фрагментации экосистемы и заложить надежный фундамент для будущего развития, уверен Яссин Файх (Yassine Faihe), директор департамента технического консультирования заказчиков Vertica в компании Micro Focus.
- Расскажите о том, почему Vertica делает такую большую ставку на развитие инструментов машинного обучения внутри СУБД
Да, это приоритетное направление разработки последние несколько лет. Дело в том, что повсеместный рост спроса на машинное обучение является естественным процессом эволюции потребностей в бизнес-аналитике. В то же время популярность Python и R в академической сфере и экосистемы Hadoop в организациях с большими объемами малоизученных, но потенциально полезных данных приводит к тому, что фактически мир аналитических СУБД и мир машинного обучения существуют независимо друг от друга, причем экосистема машинного обучения достаточно сильно фрагментирована. Это некая сложившаяся данность, к которой все привыкли, хотя устроена она не очень удобно.
Наша задача — подружить эти две сферы, устранив потребность в перемещении данных между хранилищами и снизив затраты на оборудование, а также предоставить большую гибкость при реализации задач машинного обучения (например, тренировки моделей) с высокой производительностью при очень больших объемах данных.
- Нужно ли пользователям Vertica разрабатывать алгоритмы машинного обучения, используя SQL?
Яссин Файх (Yassine Faihe), директор департамента технического консультирования заказчиков Vertica, Micro Focus |
Разумеется, нет. Vertica никогда не навязывала пользователям проприетарных процедурных расширений SQL, так как мы считаем, что этот язык для таких задач не предназначен. Мы даем заказчикам свободу писать пользовательские функции SQL на удобных для них языках, и этот же принцип лежит в основе нашего подхода к машинному обучению.
Самые востребованные алгоритмы (регрессии, кластеризация, random forest, наивный Байес, и другие) реализованы в виде библиотек C++, входящих в стандартную поставку, и поэтому выполняются с максимальной производительностью за счет массивно-параллельной архитектуры. Встроенный SDK позволяет разрабатывать алгоритмы самостоятельно на языках С++, R, Python и Java. По сути, речь идет о пользовательских SQL-функциях на этих языках, которые выполняются распределенным образом на всех узлах кластера Vertica.
Кроме того, интеграция с Apache Spark позволяет Vertica выступать источником данных для DataFrame или RDD.
В чем преимущества использования единой платформы?
— В первую очередь не нужно забывать об изучении и подготовке данных, а ведь эта процедура отнимает значительную часть времени (около 80%) любого специалиста по машинному обучению. SQL идеально подходит для таких задач.
Все стандартные операции по подготовке данных (исключение выбросов, нормализация, балансировка, импутация, унитарный код и пр.) реализованы в виде SQL-функций. Кроме того, если данные имеют форму временного ряда, что часто встречается в IoT, то дополнительная подготовка таких данных (нормализация интервалов измерений, соединение данных из разных источников по несовпадающим тайм-кодам, идентификация сложных цепочек событий) также реализована в качестве расширений SQL-диалекта.
При желании пользователи Python могут использовать клиентскую библиотеку Vertica-ML-Python, доступную на GitHub, которая предоставляет удобный интерфейс для подготовки данных и работы с моделями без написания SQL-кода, по аналогии с pandas и scikit.
- В любом случае данные остаются в хранилище?
Именно так, не считая сценария со Spark, а также более тривиальных сценариев работы с Vertica c помощью dplyR либо просто использования ODBC/JDBC/ADO.NET с клиентской машины.
В целом концепция анализа данных прямо в хранилище лежит в основе идеологии Vertica. Механизм выполнения запросов Vertica, будучи концептуально аналогичным MapReduce, оптимизирован на достаточно низком уровне для работы со структурированными и полуструктурированными данными и поэтому показывает более высокую производительность при решении таких задач. Проприетарный колоночный формат хранения данных, хотя и похож на Orc и Parquet по своей сути, обеспечивает большую гибкость и производительность, в частности поддержку полного спектра операций, предусмотренных SQL-99.
Все эти технологии, которые уже используются в Vertica для решения более традиционных задач бизнес-аналитики, теперь открывают возможности для реализации полного цикла машинного обучения на тех же данных, на том же оборудовании, с высокой производительностью и с использованием тех инструментов, языков программирования и методов, которые уже существуют в экосистеме и которые привычны разработчикам.
- Что если данные все-таки хранятся в Hadoop?
Vertica уже довольно давно является крайне быстрым и наиболее полноценным решением в области SQL-on-Hadoop, хотя это и вспомогательный функционал. Мы достигли этого благодаря тому, что читаем Orc и Parquet-файлы напрямую из HDFS с максимальной оптимизацией push-down (встроенная статистика, партиции, возможная колокация процесса Vertica на узле или в стойке), после чего обрабатываем своими силами, минуя Hive полностью. При этом доступен полный набор аналитических SQL-функций и расширений.
Не менее интересным и важным, на мой взгляд, является функционал работы с потоковыми данными, ведь решения по поступающим данным зачастую необходимо принимать в режиме реального времени. Архитектура Vertica предусматривает моментальную доступность данных для анализа как с помощью встроенного модуля потребления данных из шины Kafka, так и при вставке данных в таблицы другими способами.
Скачать бесплатную версию Vertica до 1Тб можно по ссылке: https://www.vertica.com/ru/trial/
(Читайте также: Реализация лямбда-архитектуры с использованием Kafka и Vertica в компании PropellerAds)