Spark обеспечивает параллельную перекрестную проверку для API Scala

Pyspark предлагает прекрасную возможность распараллелить перекрестную проверку моделей через https://github.com/databricks/spark-sklearn как простая замена sklearn GridSearchCV на

from spark_sklearn import GridSearchCV

Как я могу добиться аналогичной функциональности для Spark Scala CrossValidator, то есть распараллелить каждую складку?


person Georg Heiler    schedule 05.01.2017    source источник


Ответы (1)


Начиная с spark 2.3:

Вы можете сделать это, используя метод setParallelism(n) с CrossValidator или при создании. то есть:

cv.setParallelism(2) 

or

cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator, \ 
                    parallelism=2)  // Evaluate up to 2 parameter settings in parallel

До искры 2.3:

Вы не можете сделать это в Spark Scala. Вы не можете распараллелить перекрестную проверку в Scala Spark.

Если вы хорошо прочитали документацию spark-sklearn, GridSearchCV распараллелен, а обучение модели — нет. Таким образом, это бесполезно в масштабе. Кроме того, вы можете распараллелить перекрестную проверку для Spark Scala API благодаря знаменитому SPARK-5063 :

Преобразования и действия RDD могут вызываться только драйвером, а не внутри других преобразований; например, rdd1.map(x => rdd2.values.count() * x) недействителен, поскольку преобразование значений и действие подсчета не могут быть выполнены внутри преобразования rdd1.map. Дополнительные сведения см. в SPARK-5063.

Выдержка из README.md :

Этот пакет содержит некоторые инструменты для интеграции вычислительной среды Spark с популярной машинной библиотекой scikit-learn. Среди других инструментов:

обучайте и оценивайте несколько моделей scikit-learn параллельно. Это распределенный аналог многоядерной реализации, включенной по умолчанию в scikit-learn. легко конвертировать кадры данных Spark в пустые ndarrays или разреженные матрицы. (экспериментальный) распространять разреженные матрицы Scipy как набор данных разреженных векторов. Он фокусируется на задачах с небольшим объемом данных, которые можно выполнять параллельно.

для небольших наборов данных распределяет поиск параметров эстиматора (GridSearchCV в scikit-learn), используя Spark, для наборов данных, не помещающихся в памяти, рекомендуем использовать распределенную реализацию в Spark MLlib.

ПРИМЕЧАНИЕ. Этот пакет распределяет простые задачи, такие как перекрестная проверка поиска в сетке. Он не распространяет отдельные алгоритмы обучения (в отличие от Spark MLlib).

person eliasah    schedule 05.01.2017
comment
Вы имеете в виду, что разные наборы параметров оцениваются параллельно, каждый набор использует перекрестную проверку последовательно? До сих пор казалось, что CrossValidator только последовательно тестирует комбинации параметров. Как там можно включить параллелизм? - person Georg Heiler; 05.01.2017
comment
Да, это то, что я имел в виду. Параллелизм может быть включен только на одном уровне: выбор модели или обучение модели, но не на обоих одновременно. - person eliasah; 05.01.2017
comment
Искра по умолчанию CrossValidator будет работать с ML для распределения моделей, но не выбора параметров. Можно ли будет перейти в такой подобный режим? - person Georg Heiler; 05.01.2017
comment
Я не понимаю ваш последний вопрос. - person eliasah; 05.01.2017
comment
Пакет databricks skelarn-spark позволяет параллельно обучать различные комбинации параметров. Как я могу добиться подобных вещей в собственном scala API искр? По умолчанию CrossValidator кажется последовательным. - person Georg Heiler; 05.01.2017
comment
Вы не можете сделать это в Scala @GeorgHeiler - person eliasah; 05.01.2017
comment
Почему бы и нет? А как насчет асинхронных искровых заданий, запущенных из одного драйвера? - person Georg Heiler; 05.01.2017
comment
Давайте продолжим обсуждение в чате. - person eliasah; 05.01.2017
comment
последняя версия spark имеет некоторую поддержку этой функции. - person Georg Heiler; 02.06.2018