Сегодня вышел в свет первый официальный релиз новой библиотеки Intel для аналитики данных — Intel® Data Analytics Acceleration Library. Библиотека доступна как в составе пакетов Parallel Studio XE, так и как независимый продукт с коммерческой и бесплатной (community) лицензией. Что это за зверь и зачем она нужна? Давайте разбираться.

Где нужна Intel DAAL?
На сегодняшний день существует целая наука о данных (data science), которая изучает проблемы обработки, анализа и представления данных. В неё входит множество различных областей, такие как статистические методы, методы интеллектуального анализа данных (data mining), машинное обучение (machine learning), теория распознавания образов (pattern recognition), приложения искусственного интеллекта (AI) и так далее.


При этом все эти области исследований имеют достаточно много пересечений, но есть и различия. Так, статистика базируется на теории более, чем data mining, и сосредотачивается на проверке гипотез. Машинное обучение более эвристично и концентрируется на улучшении работы агентов обучения. А data mining представляет интеграцию теории и эвристик, концентрируясь на едином процессе анализа данных, включая очистку данных, обучение, интеграцию и визуализацию результатов. Библиотека Intel DAAL будет интересна всем, кто имеет отношение к науке о данных и её областях.

Для методов интеллектуального анализа данных имеются свои стандарты, наиболее распространенным из которых является межотраслевой стандартный процесс для интеллектуального анализа данных CRISP-DM (Cross Industry Standard Process for Data Mining). Согласно этому стандарту, процесс анализа данных является итеративным и включает в себя 6 этапов: осмысление бизнеса (business understanding), осмысление данных (data understanding), подготовка данных (data preparation), моделирование (modeling), оценка результатов (evaluation), внедрение (deployment).


Библиотека DAAL предназначена, в основном, для этапа подготовки данных, моделирования и оценки результатов, если говорить о представлении методов интеллектуального анализа данных в рамках этого стандарта. При этом она оптимизирована с помощью алгоритмов библиотек Intel® Math Kernel Library и Intel® Integrated Performance Primitives.

Проблемы и решения
Почему именно DAAL и чем эта библиотека должна понравиться разработчикам?
В области аналитики данных сейчас имеется огромное количество различных технологий и средств. Это вполне естественно, учитывая темпы роста этой отрасли:

Интересная статистика от Wikibon: к 2017 году объём рынка больших данных составит около 50 млрд. американских президентов, из которых 8 приходится на софт и аналитику.

Хранение данных, полученных от большого числа различных источников, реализуется как средствами традиционных реляционных СУБД с доступом к данным средствами языка SQL, так и не традиционных NoSQL (not only SQL). Кроме того, данные могут сразу располагаться в памяти. Для обработки этих данных сейчас применяются большие фреймворки типа Hadoop, Spark, Cassandra и так далее.
Существует одна большая проблема, связанная с текущими решениями, а именно – производительность. Рассмотрим в качестве примера фреймворк с открытым кодом Spark, точнее библиотеку машинного обучения Spark MLLib.

Spark MLLib написан с помощью языка Scala и использует ещё один opensource пакет линейной алгебры Breeze, который зависит от Netlib-Java, являющейся оберткой Netlib для Java. В итоге, используется Netlib BLAS, реализация которой обычно является последовательной и не оптимизированной. Очевидно, что мы имеем проблему слишком большого числа зависимостей, «многослойности» и слабой производительности.

Идея Intel заключается в том, чтобы создать одну библиотеку для работы на всех этапах аналитики данных, исключая подобные многослойные реализации, при этом оптимизировать её под железо:

Использование этого решения должно дать нам значительной прирост производительности. Если сравнить реализацию Intel DAAL с той же Spark MLlib на примере использования метода главных компонент (PCA — principal component analysis), то получаемое ускорение может составлять от 4 до 7 раз, в зависимости от размера таблицы данных:


Основные компоненты
Intel DAAL поддерживает языки C++ и Java, а также ОС Windows, Linux и OS X. Она может быть использована с любыми платформами, такими как Hadoop, Spark, R, Matlab и другими, но не привязана ни к одной из них. Кроме того, есть поддержка локальных и распределённых источников данных, включая СSV в файлах и в памяти, MySQL, HDFS, и Resilient Distributed Dataset (RDD) объекты из Apache Spark*.
Библиотека состоит и трех основных компонент: Управление данными, Алгоритмы и Сервисы.

Управление данными
Сюда входят классы и утилиты для получения данных, первичной обработки и нормализации, а также их преобразования в численный формат. Алгоритмы DAAL работают с данными в специальной форме – таблицами данных. Поэтому самым первым этапом при работе с библиотекой будет преобразование данных в эти самые таблицы.
Что они из себя представляют? Каждый объект характеризуется набором атрибутов (Features) – свойств, характеризующих объект. Например, цвет глаз, возраст, температура воды и так далее. Набор атрибутов образует вектор свойств (Feature Vector) размера p. Эти векторы в свою очередь формируют множество наблюдений (Observations) размера n. В DAAL данные хранятся в виде таблиц, в которых строками являются наблюдения (Observations), а столбцами – свойства (Features).


Алгоритмы
Алгоритмы состоят из классов, реализующих анализ данных и их моделирование. Они включают декомпозицию, кластеризацию, классификацию и регрессионные алгоритмы, а также ассоциативные правила.
Алгоритмы могут выполняться в следующих режимах:
  • Пакетная обработка (batch processing)
    Алгоритмы работают со всем набором данных сразу и выдают результат. Все алгоритмы библиотеки поддерживают этот режим.
  • Онлайн обработка (online processing)
    Имеются более сложные случаи, при которых все данные не доступны сразу целиком, или, например, не помещаются в память. В этом случае может использоваться режим, при котором работа с данными происходит блоками, загружаемыми в память постепенно. Не все алгоритмы библиотеки имеют онлайн реализацию.
  • Распределенная обработка (distributed processing)
    Данные распределяются по нескольким вычислительным узлам. Промежуточный результат вычисляется на каждом узле, которые в итоге объединяются на главном узле. Так же как в случае с онлайн обработкой, не все алгоритмы библиотеки имеют распределенную реализацию, но инженеры Intel работают над этим.


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

Итого
Библиотека Intel DAAL имеет множество различных возможностей, и рассказать о них в рамках одного поста не получится. Я лишь показал зачем она нужна, с какой целью появилась на рынке и рассмотрел её основные составляющие. Хотелось бы услышать вопросы и комментарии тех, кому данный вопрос является интересным и продолжить разговор об этой интересной библиотеке. В планах рассказать об алгоритмах DAAL, а также показать примеры кода c её использованием.
Отмечу, что на сегодняшний день Intel DAAL является единственной библиотекой для аналитики данных, оптимизированной под Intel архитектуры.

Комментарии (14)


  1. fareloz
    26.08.2015 09:16
    +8

    Кат


    1. ivorobts
      26.08.2015 11:56
      +3

      Всё поправили


  1. grossws
    26.08.2015 12:46
    -5

    Для обработки этих данных сейчас применяются большие фреймворки типа Hadoop, Spark, Cassandra
    Ага, что ж не упомянули тогда MySQL, MSSQL, Oracle DB и далее по тексту, если СУБД вдруг стали «большими фреймворками»?
    Spark MLLib написан с помощью скриптового языка Scala
    WTF?


    1. ivorobts
      26.08.2015 13:10
      +1

      А в чем WTF? Spark разработан с помощью Scala и он является основным языком.
      Кроме того поддерживаются Python и Java, R. Можно почитать подробнее здесь:

      www.scala-lang.org/what-is-scala.html
      www.quora.com/Why-is-the-default-language-for-Spark-MlLib-Scala-and-not-Python-or-Java
      spark.apache.org/docs/1.2.1/mllib-guide.html


      1. grossws
        26.08.2015 13:28
        -8

        Вы не осилили прочитать выделенное полужирным?! Процитирую ещё раз «скриптового языка Scala». При этом Scala не является скриптовым языком.


        1. ivorobts
          26.08.2015 13:34
          +4

          А что сколько злости? Всё я осилил, я подумал, что акцент на Scala. То, что он скриптовый — не совсем верно, лучше поставить это в кавычки.
          «To some, Scala feels like a scripting language» — я эти some.


          1. grossws
            26.08.2015 13:40

            Между feels like и является — расстояние большое.


            1. ivorobts
              26.08.2015 13:41
              +2

              Согласен, поправил поэтому.


    1. ivorobts
      26.08.2015 13:16
      +4

      MySQL, MSSQL прочее- это просто базы данных. В том же Spark'е кроме SQL имеется ряд библиотек и средств (MLLib, GraphX, Spark Streaming).
      Это больше, чем просто СУБД. Аналогично с Hadoop'ом.


      1. grossws
        26.08.2015 13:29
        -5

        Опять же, воспринимать и осознавать написанное у вас получается не очень. Мой комментарий был не про spark и hadoop, а про cassandra, которая является базой данных.


        1. ivorobts
          26.08.2015 13:39
          +2

          Выделили бы жирным, как про «скриптовый» язык. Вы правы, фреймворками являются Spark и Hadoop. Cassandra попала для «кучности», но не вижу в этом проблемы. Да, можно дописать и MySQL, MSSQL и прочее.


  1. trubin
    27.08.2015 11:53

    Уточните, пожалуйста, «на сколько бесплатна» библиотека: для кого, в какой поставке.


    1. vpolin
      27.08.2015 12:59
      +3

      вот здесь все детали:
      software.intel.com/sites/campaigns/nest


    1. ivorobts
      27.08.2015 18:24

      Я скоро напишу подробный пост про всё «новое» в лицензиях