Возможности новой библиотеки машинного обучения Apache ML Grid
В релиз Apache Ignite 2.0 вошла бета-версия библиотеки машинного обучения Apache Ignite Machine Learning Grid (ML Grid), основанная на высокооптимизированном и масштабируемом API Apache Ignite Memory-Centric Platform.
Источник: xkcd
О том, на что способна новая библиотека и как с ней работать, наш рассказ под катом.
В релизе 2.0 библиотека включает в себя, в основном, базовую функциональность, такую как локальные и распределенные операции векторной и матричной алгебры с использованием как обычных, так и разреженных структур данных. Сами данные могут храниться в обычной памяти JVM, в off-heap памяти и в распределенном кэше Ignite.
Тем, кто уже использовал другие популярные библиотеки машинного обучения, такие как Apache Mahout или Colt, многие вещи будут знакомыми. Это не случайно — одной из целей при проектировании Apache Ignite ML Grid API была простота использования для тех, кто уже привык к типичным библиотекам машинного обучения.
Многие пользователи уже применяли Ignite для ускорения матричных и векторных операций ещё до появления ML Grid. Ignite позволяет совместное использование Compute- и Data-гридов для высокоэффективной обработки разреженных наборов данных. А с появлением ML Grid делать это будет намного легче.
В следующих релизах планируется дальнейшее расширение функциональности библиотеки, в частности, включение распределенных версий популярных алгоритмов, используемых при решении задач машинного обучения.
Основываясь на алгоритмах распределенной алгебры в релизе 2.0, сообщество Apache Ignite планирует добавить в библиотеку алгоритмы классификации, регрессионного анализа, кластерного анализа по k-средним, деревья принятия решений и др. Многое из этого включено в ближайший следующий релиз 2.1 (в частности, линейная регрессия и k-средние).
В более отдаленных планах обсуждается разработка Python- и R-библиотеки в составе стека Ignite ML.
Возможности, предоставляемые новым модулем, пока что довольно скромные: как уже говорилось, это бета-версия, имеющая, в основном, базовую функциональность. А если вы хотите научиться использовать новый API уже сейчас, не дожидаясь следующих релизов, то для вас — вторая часть нашего поста, под спойлером…
Как работать с ML Grid в Ignite Apache 2.0
Наверное, самый быстрый способ начать знакомство и работу с ML Grid — это собрать, прогнать и изучить результаты выполнения и кода примеров, включённых в релиз. Примеры ML можно найти в директории examples дистрибутива Apache Ignite. Можно также получить код примеров по этой ссылке в Github.
Пошаговая инструкция для начала работы с примерами:
- Установите Java версии не ниже 8.
- Скачайте Apache Ignite 2.0 или более позднюю версию.
- Откройте проект examples в IDE — например, IntelliJ IDEA или Eclipse.
- Активируйте профиль Maven ml в настройках проекта (в Ignite 2.0 он по умолчанию выключен):
- Откройте в IDE директорию src/main/ml и запустите примеры ML Grid, как объяснено ниже.
- Найдите и запустите интересующий вас пример
(на скриншоте — SparseDistributedMatrixExample): - Наблюдайте за выполнением примера и за выводом данных в консоль:
- При выполнении примера TracerExample обратите внимание, что будет выводиться в браузере:
- По желанию, отредактируйте код примера и запускайте его снова, чтобы изучить результат изменений:
Скажем, если код примера TracerExample поменять на такой:
// Code below is based on unit tests in ml module, namely // on TracerTest#testHtmlMatrixTracer Matrix mtx2 = new DenseLocalOnHeapMatrix(100, 100); double MAX = (double)(mtx2.rowSize() * mtx2.columnSize()); mtx2.assign((x, y) -> (double)(x * y) / MAX); Tracer.showHtml(mtx2);
то при его выполнении будет более эффектный вывод в браузере:
Так можно получить более предметное представление о том, как в Ignite ML реализованы методы матричной алгебры.
В этом примере сперва создается матрица размером 100 на 100. Затем её элементы заполняются величинами, пропорциональными произведению их индексов по вертикали и горизонтали. И, наконец, при помощи Tracer API матрица визуализируется в HTML.
- Найдите и запустите интересующий вас пример
Примеры ML Grid не требуют никакой специальной конфигурации. Всех их можно просто запускать, прогонять и останавливать, а результат будет выводиться в консоль автоматически, без какого-либо вмешательства пользователя. В дополнение к сказанному, при выполнении примера Tracer API запускается браузер, в котором дополнительно выводится результирующий HTML.
Также в javadocs вы можете найти документацию об использовании классов и методов ML Grid.
Сборка из исходного кода
Jar-сборка последней версии Apache Ignite ML Grid доступна в репозитории Maven. Можно также самостоятельно собрать библиотеку из исходного кода:
- Загрузите версию последнего релиза Apache Ignite с исходным кодом.
- Если нужно, очистите локальный репозиторий Maven, чтобы исключить влияние предыдущих сборок.
- Удостоверьтесь, что у вас версия Java не ниже 8.
- Соберите и инсталлируйте Apache Ignite Memory-Centric Platform из корневой директории проекта:
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -P java8
- Соберите и инсталлируйте ML Grid из корневой директории проекта:
mvn install -Pml -DskipTests -U -pl modules/ml -am
- Найдите jar-сборку ML Grid в локальном репозитории Maven:
{user_dir}/.m2/repository/org/apache/ignite/ignite-ml/{ignite-version}/ignite-ml-{ignite-version}.jar
- Если вам нужно собрать примеры ML Grid из исходного кода, выполните следующие команды из корневой директории проекта:
cd examples mvn clean package -DskipTests -Pml
При необходимости можно обратиться к дополнительной документации в файлах DEVNOTES.txt в корневой директории проекта и README в директории ML-компонента ignite-ml.
Автор: oignatenko