На практике, сколько машин вам нужно, чтобы Hadoop / MapReduce / Mahout ускорил очень распараллеливаемые вычисления? - PullRequest
6 голосов
/ 13 июля 2011

Мне нужно сделать несколько тяжелых вычислений машинного обучения. У меня есть небольшое количество бездействующих машин в локальной сети. Сколько машин мне понадобится для того, чтобы распределить мои вычисления с помощью hadoop / mapreduce / mahout, чтобы они были значительно быстрее, чем запуск на одной машине без этих распределенных сред? Это практический вопрос о вычислительных затратах в сравнении с выгодами, так как я предполагаю, что распределение всего между двумя машинами общего времени будет хуже, чем не распределение и просто работа на одной машине (только из-за всех накладных расходов, связанных с распределением вычислений).

Техническое примечание: некоторые тяжелые вычисления очень распараллеливаемы. Все они до тех пор, пока каждая машина имеет свою собственную копию необработанных данных.

Ответы [ 4 ]

8 голосов
/ 13 июля 2011

«Простая» Java-программа и реализация на основе Hadoop, основанная на MapReduce, очень разные звери и их трудно сравнивать. Это не значит, что Hadoop распараллеливает немного вашей программы; оно написано в совершенно другой форме сверху вниз.

У Hadoop есть накладные расходы: только накладные расходы при запуске работы и при запуске рабочих, таких как картографы и редукторы. Он вводит гораздо больше времени, затрачиваемого на сериализацию / десериализацию данных, их локальную запись и перенос в HDFS.

Реализация на основе Hadoop всегда будет потреблять больше ресурсов. Так что этого следует избегать, если вы не можете избежать этого. Если вы можете запускать нераспределенные вычисления на одной машине, самый простой практический совет - не распространять. Избавь себя от неприятностей.

В случае рекомендаций Mahout, я могу сказать вам, что очень грубо, работа Hadoop требует в 2-4 раза больше вычислений, чем нераспределенная реализация с теми же данными. Очевидно, что это очень сильно зависит от алгоритма и выбора настроек алгоритма. Но вот вам номер: я не стал бы беспокоиться о кластере Hadoop, состоящем менее чем из 4 машин.

Очевидно, что если ваши вычисления не могут поместиться на одном из ваших компьютеров, у вас нет другого выбора, кроме как распространять. Тогда компромисс - это то, какое время настенных часов вы можете позволить, а не сколько вычислительной мощности вы можете посвятить. Ссылка на закон Амдаля верна, хотя и не учитывает значительных издержек Hadoop. Например, чтобы распараллелить N способов, вам нужно по крайней мере N картографов / редукторов и использовать N раз для накладных расходов на картограф / редуктор. Также есть фиксированное время запуска / выключения.

6 голосов
/ 13 июля 2011

См. Закон Амдала

Закон Амдала представляет собой модель для связи между ожидаемым ускорением параллельных реализаций алгоритма относительно последовательного алгоритма в предположении, чторазмер проблемы остается неизменным при распараллеливании.Например, если для заданного размера задачи распараллеленная реализация алгоритма может выполнить произвольно быстро 12% операций алгоритма (в то время как остальные 88% операций не распараллеливаются), закон Амдала гласит, что максимальное ускорение распараллеленной версиив 1 / (1 - 0,12) = 1,136 раза быстрее, чем непараллелизированная реализация.

Picture of Equation

Без подробностей сложно дать более подробный ответ.

1 голос
/ 09 августа 2011

Я знаю, что на это уже ответили, но я брошу свою шляпу на ринг. Я не могу дать вам общее правило. Увеличение производительности действительно зависит от многих факторов:

  1. Насколько параллельными / взаимоисключающими являются все компоненты / алгоритм.
  2. Размер набора данных
  3. Предварительная и последующая обработка набора данных [включая расщепление / отображение и сокращение / конкатинирование]
  4. Сетевой трафик

Если у вас есть высокосвязанный алгоритм, такой как сеть Байеса, нейронные сети, марков, PCA и EM, то большая часть времени в программе hadoop будет обрабатывать, разбивать и рекомбинировать экземпляры. [Предполагая, что у вас есть большое количество узлов в экземпляре (может обрабатывать более 1 машины). Если у вас есть такая ситуация, сетевой трафик станет более серьезной проблемой.

Если у вас есть агорифм, такой как поиск пути или имитация отжига, то это легко разделить экземпляры в их собственной карте / сократить работу. Эти типы алгоритмов могут быть очень быстрыми.

0 голосов
/ 01 сентября 2014

Другим аспектом является то, что является узким местом, которое заставляет вас использовать mapreduce.Если у вас достаточно разумный объем данных на вашем компьютере и вы просто испытываете увеличение скорости, вы можете предпочесть использование реализаций GPU.Их проще в настройке и использовании даже на одной машине с многообещающими результатами.

...