2016-11-28 6 views
0

Я новичок в Spark (и в кластерной вычислительной среде), и мне интересно об общих принципах, за которыми следуют параллельные алгоритмы, используемые для машинного обучения (MLlib). Являются ли они существенно быстрее, потому что Spark распределяет данные обучения через несколько узлов? Если да, я полагаю, что все узлы имеют одинаковый набор параметров? И что им приходится комбинировать (например: суммирование) промежуточные вычисления (например: градиенты) на основе , основанной на, я не прав?Общие принципы, связанные с параллелизмом Spark MLlib

Во-вторых, предположим, что я хочу поместить свои данные в ансамбль моделей (например: 10). Разве не было бы проще в этом конкретном контексте запустить мою старую программу машинного обучения самостоятельно на 10 машинах вместо того, чтобы писать сложный код (по крайней мере для меня!) Для обучения в Spark-кластере?

Сводный вопрос: это искра (или другая кластерная вычислительная среда), полезная только для больших приложений данных, для которых мы не могли позволить себе обучение более чем одной модели и для чего время обучения было бы слишком длинным на одной машине?

ответ

1
  • Вы исправите общий принцип. Типичный алгоритм MLlib - это итеративная процедура с локальной фазой и обменом данными.
  • Алгоритмы MLlib не обязательно быстрее. Они пытаются решить две проблемы:

    • диск латентности.
    • Ограничения памяти на одной машине.

    Если вы можете обрабатывать данные на одном узле, это может быть на порядки быстрее, чем при использовании ML/MLlib.

  • Последний вопрос трудно ответить, но:

    • Это не сложно обучать ансамблями:

      def train_model(iter): 
          items = np.array(list(iter)) 
          model = ... 
          return model 
      
      rdd.mapPartitions(train_model) 
      
    • Есть проекты, которые уже делают это (https://github.com/databricks/spark-sklearn)

 Смежные вопросы

  • Нет связанных вопросов^_^