ML Grid — библиотека машинного обучения в Apache Ignite

    Возможности новой библиотеки машинного обучения 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 в Ignite Apache 2.0


    Наверное, самый быстрый способ начать знакомство и работу с ML Grid — это собрать, прогнать и изучить результаты выполнения и кода примеров, включённых в релиз. Примеры ML можно найти в директории examples дистрибутива Apache Ignite. Можно также получить код примеров по этой ссылке в Github.

    Пошаговая инструкция для начала работы с примерами:

    1. Установите Java версии не ниже 8.
    2. Скачайте Apache Ignite 2.0 или более позднюю версию.
    3. Откройте проект examples в IDE — например, IntelliJ IDEA или Eclipse.
    4. Активируйте профиль Maven ml в настройках проекта (в Ignite 2.0 он по умолчанию выключен):

      скриншот — настроить профиль Мавен

    5. Откройте в IDE директорию src/main/ml и запустите примеры ML Grid, как объяснено ниже.

      1. Найдите и запустите интересующий вас пример
        (на скриншоте — SparseDistributedMatrixExample):

        скриншот — найти и запустить пример

      2. Наблюдайте за выполнением примера и за выводом данных в консоль:

        скриншот — вывод примера в консоль

      3. При выполнении примера TracerExample обратите внимание, что будет выводиться в браузере:

        скриншот — вывод примера Tracer в браузере

      4. По желанию, отредактируйте код примера и запускайте его снова, чтобы изучить результат изменений:

        скриншот — исходный код примера

        Скажем, если код примера TracerExample поменять на такой:

        // Code below is based on unit tests in ml module, namely
        // on TracerTest#testHtmlMatrixTracer
        Matrix mtx = new DenseLocalOnHeapMatrix(100, 100);
        double MAX = (double)((mtx.rowSize() - 1) * (mtx.columnSize() - 1));
        mtx.assign((x, y) -> (double)(x * y) / MAX);
        Tracer.showHtml(mtx);

        то при его выполнении будет более эффектный вывод в браузере:

        скриншот — вывод в браузере модифицированного примера

        Так можно получить более предметное представление о том, как в Ignite ML реализованы методы матричной алгебры.

        В этом примере сперва создается матрица размером 100 на 100. Затем её элементы заполняются величинами, пропорциональными произведению их индексов по вертикали и горизонтали. И, наконец, при помощи Tracer API матрица визуализируется в HTML.


    Примеры ML Grid не требуют никакой специальной конфигурации. Всех их можно просто запускать, прогонять и останавливать, а результат будет выводиться в консоль автоматически, без какого-либо вмешательства пользователя. В дополнение к сказанному, при выполнении примера Tracer API запускается браузер, в котором дополнительно выводится результирующий HTML.

    Также в javadocs вы можете найти документацию об использовании классов и методов ML Grid.

    Сборка из исходного кода


    Jar-сборка последней версии Apache Ignite ML Grid доступна в репозитории Maven. Можно также самостоятельно собрать библиотеку из исходного кода:

    1. Загрузите версию последнего релиза Apache Ignite с исходным кодом.
    2. Если нужно, очистите локальный репозиторий Maven, чтобы исключить влияние предыдущих сборок.
    3. Удостоверьтесь, что у вас версия Java не ниже 8.
    4. Соберите и инсталлируйте Apache Ignite Memory-Centric Platform из корневой директории проекта:
      mvn clean install -DskipTests -Dmaven.javadoc.skip=true -P java8
    5. Соберите и инсталлируйте ML Grid из корневой директории проекта:
      mvn install -Pml -DskipTests -U -pl modules/ml -am
    6. Найдите jar-сборку ML Grid в локальном репозитории Maven:
      {user_dir}/.m2/repository/org/apache/ignite/ignite-ml/{ignite-version}/ignite-ml-{ignite-version}.jar

    7. Если вам нужно собрать примеры ML Grid из исходного кода, выполните следующие команды из корневой директории проекта:

      cd examples
      mvn clean package -DskipTests -Pml

    При необходимости можно обратиться к дополнительной документации в файлах DEVNOTES.txt в корневой директории проекта и README в директории ML-компонента ignite-ml.
    Метки:
    • +19
    • 4,2k
    • 5
    GridGain 99,88
    Компания
    Поделиться публикацией
    Комментарии 5
    • 0
      А почему в примере «TracerExample» max=0.9801 а не 1?
      • 0
        максимальное значение индекса 99, а количество строк и столбцов в матрице 100, (x * y) / MAX — в результате дает максимум (99 * 99) / (100 * 100) = 0.9801
        • 0
          Значит либо индексы должны быть от 1 а не от 0 либо MAX=(double)((mtx2.rowSize()-1) * (mtx2.columnSize()-1))
          • 0
            да, я тоже об этом думал. Пока склоняюсь к тому чтобы поменять MAX как ты предложил. Отсчитывать индексы от 1 вместо 0 не хочу, потому что при этом потеряется ноль на минимуме и опять в трейсере будет некрасиво (только на этот раз на минимуме вместо максимума)
            • 0
              update — я поменял MAX в коде примера так, что максимум теперь — ровно 1 (скриншот тоже обновил). Заодно поменял имя переменной в коде на mtx (предыдущее имя mtx2 я скопировал как есть из юнит теста и не заметил, что в контексте примера цифра 2 в нем потеряла смысл)

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое