Интерес к технологиям Больших Данных породил спрос на специалистов, владеющих соответствующими технологиями и методами разработки приложений на их основе. На различных курсах сегодня предлагаются тренинги, через которые проходит постоянно растущий поток слушателей. Однако, несмотря на высокий спрос, подготовка в вузах квалифицированных специалистов, способных решать задачи Больших Данных, находится в зачаточной стадии. В этой связи опыт преподавания курсов «Технологии больших данных» и «Предиктивная аналитика» для студентов магистратуры Нижегородского государственного технического университета, а также курса «Технологии обработки Больших Данных» в Нижегородском филиале НИУ ВШЭ может оказаться полезным.

Задача перечисленных курсов — сформировать у студентов практические умения по развертыванию платформ Больших Данных и проектированию аналитических приложений. Студентам предоставляется объемный набор данных, полученных в процессе работы реальной информационной системы, и формулируется цель их анализа. Студент должен уметь самостоятельно развернуть платформу Hadoop/Spark [1] и разработать приложение, решающее задачу с использованием методов машинного обучения. Далее ему требуется выполнить анализ данных и представить однокурсникам результаты для обсуждения.

Изучение строится по двум базовым направлениям: техники (алгоритмы) и технологии Больших Данных, причем с фокусом на техниках машинного обучения и экосистеме Hadoop. Значительная часть времени отводится на систематическое освоение методов машинного обучения — от кластеризации и классификации до методов deep learning (глубокое обучение).

Алгоритмы обучения с учителем и без него (самоорганизация), а также методы получения статистических характеристик качества работы программ машинного обучения лежат в основе изучения первого направления. В тестовом массиве присутствует значительная доля неструктурированных данных, что стимулирует студентов к изучению самоорганизующихся структур данных и алгоритмов самоорганизации, таких как, например, карты Кохонена. Особое место в курсах занимает изучение средств обработки естественного языка (Natural Language Processing, NLP) [2] для решения задачи трансформирования текстов в векторное семантическое пространство. Рассматриваются как классический алгоритм LSA (латентный семантический анализ), так и применение метода глубокого обучения (deep learning, Google word2vec) к текстовым данным.

Одним из применений методов NLP является построение систем типа «вопрос-ответ» на естественном языке, таких как IBM Watson (Deep QA Project), архитектура которой рассматривается в курсе вместе с особенностями реализации на базе открытой системы YodaQA.

При изучении инструментов Больших Данных рассматриваются базовые языки аналитики и разработки R, Python и Scala, работающие в экосистеме Hadoop, которая охватывает системы сбора, хранения и обработки данных, а также библиотеки машинного обучения и визуализацию (рис. 1).

 

Рис. 1. Языки программирования и библиотеки курса по технологиям Больших Данных
Рис. 1. Языки программирования и библиотеки курса по технологиям Больших Данных

 

Базовый язык аналитики для учебного проекта обычно выбирают сами студенты, а в рамках курса происходит лишь знакомство с различными библиотеками программных реализаций алгоритмов машинного обучения. Например, для языка R практика проводится с использованием репозиториев CRAN и Bioconductor, а для Phyton используется библиотека Scikit-learn. Библиотека MLlib Spark позволяет непосредственно работать с распределенными структурами данных типа RDD (Resilient Distributed Dataset). Кроме того, имеется возможность в ходе обучения использовать привычный язык Java благодаря наличию движка алгоритмов машинного обучения — Smile Mining.

Отдельная группа тем в курсе посвящена развертыванию, конфигурированию и модернизации платформы Hadoop/Spark — умения, приобретенные в этой области, существенно расширят возможности трудоустройства выпускников.

Проблемы

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

В основе учебных курсов лежит инженерный подход, ориентированный на разработку программных продуктов с использованием методов машинного обучения, а не исследовательские проекты по совершенствованию алгоритмов машинного обучения. И здесь кроется немало неожиданных проблем, начинающихся с отсутствия на сегодняшний день в программной инженерии в целом общего понимания структуры цикла разработки таких программных продуктов. Например, неизвестны правила, в соответствии с которыми следует относить этап обучения программы к работам, выполняемым разработчиком программного продукта, или считать этот этап начальным этапом эксплуатации продукта у заказчика. Ясно, что необученная программа не решает задач заказчика, но тогда как она может быть принята в эксплуатацию? С другой стороны, для выполнения работ по обучению программы необходимо иметь доступ к реальному набору данных, на базе которых могут быть построены обучающая и тестовая выборки. Нередко заказчик ограничивает доступ к своим данным, требуя при этом от разработчика предъявления обученной программы, решающей его задачу. Но и в случае передачи этапа обучения разработчику заказчик оказывается перед вопросами: как оценить затраты на обучение программы, какое время необходимо для этого и какие ресурсы? Отсутствие однозначных ответов на такие вопросы затрудняет преподавание и приводит к тому, что в качестве истории успеха демонстрируются исключительно разработки, выполненные в компаниях, которые являются одновременно и заказчиками, и разработчиками: «Яндекс», Google, Facebook и пр. Однако все больше ИТ-компаний, выполняющих программные разработки по заказу, будут использовать в своих продуктах обучаемые программы, и задача подготовки разработчиков для них становится все более актуальной.

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

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

Сложности возникают и при попытках получения подходящих наборов данных для выполнения учебных проектов. Например, для этой цели нельзя использовать простые синтезированные наборы ввиду их бессодержательности и невозможности применения для них алгоритмов машинного обучения. К сожалению, владельцы реальных Больших Данных не спешат предоставить их университету, ссылаясь на соглашения о «неразглашении сведений». Открытые данные, которые могли бы представить интерес в России, остаются пока малосодержательными, поэтому приходится использовать данные из открытых зарубежных источников.

Определенные проблемы имеются и с доступом к инструментам — например, для работы с реальными данными объемом не менее 100 Гбайт сложно в условиях учебного заведения получить адекватную платформу. Для самостоятельного развертывания программных средств экосистемы Hadoop студентам предоставлено три варианта: развертывание Apache Hadoop/Spark на «голом железе», развертывание в публичном облаке (MS Azure HDInsight, IBM Bluemix BigInsights, Amazon EMR Spark) и развертывание дистрибутива Hadoop/Spark в локальной виртуальной среде. Как показывает опыт, если первый вариант требует около 16 часов, а второй — около получаса, то при необходимости выполнения сколько-нибудь серьезного учебного проекта все выбирают третий вариант. Объясняется это тем, что, хотя он по времени развертывания сильно уступает облачному, отсутствие ограничений на выбор приложений позволяет в его рамках более удобно и эффективно проектировать необходимую для решения задачи программную композицию.

Развертывание платформы

Для знакомства с инструментами Hadoop/Spark обычно достаточно развернуть кластер Hadoop в режиме single node, однако это бессмысленно с точки зрения последующего выполнения практически любого учебного проекта с реальными данными, поэтому сразу возникает необходимость доступа к масштабному кластеру. Наиболее перспективным казалось облачное решение, но эйфория от применения Hadoop/Spark в публичном облаке улетучилась при необходимости выгрузить в облачное хранилище файлы данных объемом 50–150 Гбайт и полностью пропала после ознакомления с калькуляцией такого сервиса. Один студенческий проект обходится в 20–30 тыс. долл., если его завершить за месяц, поэтому за основной вариант было выбрано применение локального развертывания в виртуализированной среде. Более того, студенты самостоятельно легко выбирают наиболее быстрые средства для такого развертывания. Вне конкуренции оказалось применение такого инструмента, как Apache Ambari для конфигурирования Hadoop-кластера, а для виртуализации наиболее удобным стал контейнер Docker (рис. 2).

 

Рис. 2. Компоненты быстрого развертывания кластера Hadoop
Рис. 2. Компоненты быстрого развертывания кластера Hadoop

 

Минимальная конфигурация аппаратной платформы для развертывания кластера, ориентированного на решение задач аналитики, включает в себя: сеть 1 Гбит/с, шесть узлов на базе серверов стандартной архитектуры с двух- или четырехъядерными процессорами, оперативной памятью не менее 32 Гбайт и дисками 1 Тбайт. На таком кластере вполне реально развернуть продуктивную конфигурацию Hadoop/Spark для решения практически любых учебно-исследовательских проектов продолжительностью три — пять человеко-месяцев.

Выводы

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

Аналитика Больших Данных активно развивается, и если еще недавно главным требованием к инструментам было наличие возможности SQL-запросов к данным, то сегодня NoSQL СУБД и, в частности, графовые базы данных стали настолько популярны, что активно обсуждается возможность обращения к ним на языках, близких к естественному. Следующие направления применений Больших Данных уводят от аналитики к управлению в реальном времени сложными системами (Интернет вещей, киберфизические системы). Все это позволяет считать подготовку специалистов в области Больших Данных не сиюминутным маркетинговым всплеском, а устойчивой тенденцией, которую обязательно следует учитывать всем вузам страны.

Литература

  1. Андрей Николаенко, Дмитрий Волков. Новые инструменты Hadoop // Открытые системы.СУБД. — 2014. — № 10. — С. 12–14. URL: http://www.osp.ru/os/2014/10/13044382 (дата обращения: 19.12.2015).
  2. Удо Хан, Индерджиет Мани. Системы автоматического реферирования // Открытые системы.СУБД. — 2000. — № 12. — С. 67–73. URL: http://www.osp.ru/os/2000/12/178370 (дата обращения: 18.12.2015).

Владимир Крылов (vkrylov@heterarchica.com) — профессор, НГТУ им. Р. Е. Алексеева, НИУ ВШЭ (Нижний Новгород). Статья подготовлена на основе материалов доклада, представленного на Шестом Московском суперкомпьютерном форуме (МСКФ-2015, грант РФФИ 15-07-20824-г).