Мнение специалиста от 18 сентября 2012 года | Конструктивная кибернетика

Wolfram Mathematica и Большие вычисления


Думаю никто ни станет отрицать, что один из значительных нынешних трендов в информационных технологиях – это Большие вычисления. Причём, как и бывает с востребованными трендами, зачастую мода и просто желание быть модным идут бок о бок с действительно острой потребностью в больших вычислениях. В каких-то случаях на решение о внедрении этих тяжёлых технологий сильное влияние оказывают имиджевые предпосылки, в других – непонимание задач и возможных способов их решений, в третьих – на первый план выходят исследовательские цели и дух экспериментаторства, в чётвёртых – чётко осознанные цели и хорошо спланированные программы. Конечно существуют и пятые и шестые и масса других причин, приводящих к развёртыванию систем больших вычислений.

Что вообще такое Большие вычисления? Откуда они взялись? Для чего нужны?

Большие вычисления, те которые Big Computation – это разновидность высокопроизводительных вычислений (High Performance Computing), которые в качестве входных данных используют Большие данные (Big Data), т.е. огромные массивы неструктурированных и/или слабоструктурированных разнородных цифровых данных. Большие вычисления нужны для..., правильно, Большой аналитики, той, которая Big Analytics.

История появления этого понятия имеет в общем-то две составляющие. В теории всё началось в 2008 году с интереса к феномену Big Data авторитетного научного журнала Nature. На практике – в 2010 году, когда компания Google передала Apache Software Foundation права на использование технологии MapReduce в составе Apache Hadoop. Конечно, определённый фон существовал и до этих событий, но они оказали, в определённом смысле, решающее влияние. С тех пор количество решений для Big Data / Big Computation / Big Analytics неуклонно и стремительно растёт, ведь это основной тренд 2011, 2012 годов в индустрии цифровых данных.

Итак, Вам нужны Большие вычисления. Именно вычисления, так как со сбором, хранением, упорядочиванием и доступом к данным Вы разобрались, или успешно разбираетесь, но параллельно решили заняться и вопросами обработки данных и извлечения из них информации, фактов, знаний. В принципе верная стратегия! Про Большую визуализацию (Big Visualization) пока умолчим, так как пока нет результатов вычислений, не ясно что и как нужно визуализировать.

Вариантов стартов с Большими вычислениями масса: это и open-source язык R; и собственные разработки на языках высокого уровня, с привлечением массы бесплатных библиотек численного, статистического анализа, data mining, text mining; это и покупка готовых решений типа Quid software; и т. п. Запускать программное обеспечение также можно по разному: строить собственный высокопроизводительный кластер или Grid-систему; арендовать вычислительные мощности HPC; писать софт таким образом, чтобы его можно было запускать в масштабируемом эластичном облаке (elastic cloud); и т. д.

А если перед Вами очень не типовая задача? Например Вам необходимо скрестить text mining и нелинейные методы, типа Dimension Reduction, Principal Manifolds, и задача очень сырая, поисковая. Базового функционала R не хватает, а необходимые пакеты стоят денег, и их применимость в будущем под вопросом. Писать всё с «нуля» – объём кода и затраты на его отладку и верификацию поглотят проект. Как быть? Куда бежать? Что делать? Оказывается выход есть и не один! Один из подходов и будет изложен ниже, но не факт, что он единственно верный, или самый оптимальный.

Научно-исследовательская группа «Конструктивная Кибернетика» постоянно решает достаточно нетривиальные, поисковые задачи, она на них в общем-то и специализируется. В область наших интересов входят также и Большие вычисления, и Большая аналитика, наряду с классическими высокопроизводительными вычислениями, подробности смотри здесь и здесь. Поэтому, исходя из некоторых знаний, умений и определённого практического опыта в области Больших вычислений, мы считаем достаточно оптимальным следующее предложение: прежде чем писать что-то тяжёлое на C/C++, прикручивать туда OpenMP и MPI, задачу можно попробовать решить, а точнее смоделировать в среде Wolfram Mathematica.

Почему именно Wolfram Mathematica, а не R, или, например, MathWorks MATLAB? Ответ конечно в определённой мере предвзятый, но именно Wolfram Mathematica обеспечивает наиболее плавный переход от идей к развернутым решениям. И, на наш взгляд, основных таких моментов несколько (ниже приведены иллюстрации не претендующие на глубину рассмотрения и широту охвата):

  • Возможность управления памятью, компактификация массивов через функцию ToPackedArray[ ].

  • Развитые функции доступа к данным различных форматов через функции Import[ ], BinaryRead[ ].

  • Поддерживается прямой SQL доступ к базам данных через ODBC и/или JDBC драйверы посредством функции OpenSQLConnection[ ].

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

  • Развитые функции стыковки с C/C++, Java кодом.

  • Встроенный интерпретируемый язык функционального и процедурного программирования.

  • Возможность организации высокоуровневых и низкоуровневых параллельных вычислений.

  • Поддержка вычислений с CUDA и OpenCL.

  • Широкий набор функций для работы со строковыми переменными типа String и регулярными выражениями.

  • Широкий набор функций для работы с графическими и видео-форматами, со звуковыми данными.

  • Развитые возможности для работы с графами.

  • Развитые средства визуализации результатов вычислений.

  • И наконец само ядро – аналитические преобразования математических выражений и численные расчёты.

Справедливости ради нужно отметить, что не все красивые и удобные функции Wolfram Mathematica годятся для задач Больших вычислений. В силу их универсальности, они либо медленные, либо неоптимально используют память. Так, вместо встроенной и универсальной функции Position[ ] – возвращающей номера всех позиций искомого элемента в списке, для случая строго возрастающих (убывающих) последовательностей типа Integer, возможно написать несложный, но существенно более быстродействующий код, причём написать непосредственно на процедурном языке Wolfram Mathematica. И этот код, на последовательностях длиной в 200 миллионов элементов, будет примерно в 60 500 раз быстрее Position[ ]. Оптимизированная функция PositionSISInteger[ ], при размере списка в 200 млн. элементов, отрабатывает примерно за 310 мкс (массив в ОЗУ, процессор Intel Core i5-2430M). А если этот же код сразу написать на языке C, используя оптимизирующий компилятор и вставки на ассемблере, то возможно добиться ещё более впечатляющих скоростей, вызывая скомпилированную функцию в ядро Mathematica из внешней библиотеки.

Из приведённого примера следует, что c одной стороны, базовый функционал Wolfram Mathematica возможно легко расширить посредством сторонних библиотек, написанных, к примеру, на С/С++ и поддерживающих OpenMP, (подробности смотреть здесь). С другой – функционал среды можно расширять и на её внутреннем языке, порождая весьма производительные решения. Это даёт возможность строить гетерогенные системы Больших вычислений, или значительно ускорять разработку и отладку сложных систем Большой аналитики.

В качестве заключения. Конечно, для полноценного и масштабного Big Computation лучше всего писать специализированное программное обеспечение на компилируемых языках с поддержкой технологий OpenMP, MPI, CUDA. Этому софту (грамотно написанному) Wolfram Mathematica скорее всего будет проигрывать по некоторым параметрам, в основном по оптимальности использования памяти и скорости доступа к данным. Но, как средство интеграции, контрольной визуализации, и тем более как инструмент перехода от прототипов к промышленным решениям – Wolfram Mathematica практически идеальна. Необходимо отметить, что речь в заметке идёт именно о Wolfram Mathematica, а не о Wolfram gridMathematica. Последняя система, это совершенно другой бюджет, и тема для отдельного обсуждения.

18 сентября 2012 года.

Андрей Макаренко,
группа «Конструктивная Кибернетика».

Обсуждение: contact@rdcn.ru

Ключевые слова: Большие вычисления, Big Computation, Wolfram Mathematica, нелинейные методы, data mining, text mining, визуализация.