Apache Mahout — это проект Apache Software Foundation по созданию свободных реализаций распределенных или иным образом масштабируемых алгоритмов машинного обучения , ориентированных в первую очередь на линейную алгебру . В прошлом многие реализации использовали платформу Apache Hadoop , однако сегодня они в основном ориентированы на Apache Spark . [3] [4] Mahout также предоставляет библиотеки Java/Scala для общих математических операций (ориентированных на линейную алгебру и статистику) и примитивные коллекции Java. Mahout находится в стадии разработки; ряд алгоритмов уже реализован. [5]
Apache Mahout-Samsara относится к языку Scala domain Specific Language (DSL), который позволяет пользователям использовать синтаксис R-Like в отличие от традиционного синтаксиса Scala-подобного. Это позволяет пользователю выражать алгоритмы кратко и ясно.
val G = B %*% B . t - C - C . t + ( ksi dot ksi ) * ( s_q cross s_q )
Код Apache Mahout абстрагирует доменно-специфичный язык от движка, на котором он выполняется. Хотя активная разработка ведется с помощью движка Apache Spark, пользователи могут свободно реализовать любой движок по своему выбору — H2O и Apache Flink были реализованы в прошлом, и примеры имеются в кодовой базе.
JVM печально известна медленными вычислениями. Для повышения скорости были добавлены «собственные решатели», которые перемещают внутриядерные и, как следствие, распределенные операции BLAS из JVM, выгружая их вне кучи или памяти GPU для обработки через несколько CPU и/или ядер CPU или GPU при сборке с использованием библиотеки ViennaCL. [6] ViennaCL — это высокооптимизированная библиотека C++ с операциями BLAS, реализованными в OpenMP и OpenCL. Начиная с версии 14.1, сборка OpenMP считается стабильной, в то время как сборка OpenCL все еще находится в экспериментальной фазе POC.
Apache Mahout включает в себя реализации алгоритмов альтернативных наименьших квадратов, совместной встречаемости и коррелированной совместной встречаемости — уникального рекомендательного алгоритма Mahout, который расширяет совместную встречаемость для использования в нескольких измерениях данных.
Хотя основные алгоритмы Mahout для кластеризации , классификации и пакетной совместной фильтрации были реализованы поверх Apache Hadoop с использованием парадигмы map/reduce , это не ограничивало вклады в реализации на основе Hadoop. Вклады, которые работают на одном узле или в кластере, отличном от Hadoop, также приветствовались. Например, компонент рекомендации совместной фильтрации «Taste» Mahout изначально был отдельным проектом и мог работать автономно без Hadoop.
Начиная с версии 0.10.0, проект переключил свое внимание на создание среды программирования, независимой от бэкенда, под кодовым названием «Samsara». [7] [8] [9] Среда состоит из алгебраического оптимизатора, независимого от бэкенда, и алгебраического Scala DSL, объединяющего алгебраические операторы в памяти и распределенные операторы. Поддерживаемые алгебраические платформы: Apache Spark , H2O и Apache Flink . [ необходима цитата ] Поддержка алгоритмов MapReduce начала постепенно прекращаться в 2014 году. [10]
Apache Mahout разрабатывается сообществом. Проектом управляет группа, называемая «Комитет по управлению проектами» (PMC). Текущий PMC — Эндрю Массельман, Эндрю Палумбо, Дрю Фаррис, Изабель Дрост-Фромм, Джейк Мэнникс, Пэт Феррел, Паритош Ранджан, Тревор Грант, Робин Анил, Себастьян Шелтер, Стево Славич. [11]