Каковы некоторые сценарии, для которых MPI лучше подходит, чем MapReduce?
Насколько я понимаю, MPI дает мне гораздо больше контроля над тем, как будут взаимодействовать разные узлы в кластере.
В MapReduce/Hadoop каждый node выполняет некоторые вычисления, обменивается данными с другими узлами и затем сопоставляет их разделение результатов. Кажется простым, но поскольку вы можете повторять этот процесс, даже алгоритмы, подобные K-средствам или PageRank, вполне подходят для модели. В распределенной файловой системе с локальностью планирования производительность, по-видимому, хорошая. В сравнении, MPI дает мне явный контроль над тем, как узлы посылают сообщения друг другу.
Может ли кто-нибудь описать сценарий кластерного программирования, где более общая модель MPI является очевидным преимуществом по сравнению с более простой моделью MapReduce?
Ответы
Ответ 1
Почти любой научный код - конечные различия, конечные элементы и т.д. Какой тип приводит к круговому ответу, что любая распределенная программа, которая нелегко отображает MapReduce, будет лучше реализована с более общей моделью MPI. Не уверенный в том, что вам очень поможет, я отвечу на этот вопрос сразу после публикации.
Ответ 2
Хотя на этот вопрос был дан ответ, я хотел бы добавить/повторить один очень важный момент.
MPI лучше всего подходит для проблем, требующих много межпроцессного взаимодействия.
Когда данные становятся большими (петабайты, кто-нибудь?), и есть небольшая межпроцессная связь, MPI становится болью. Это происходит потому, что процессы будут тратить все время на передачу данных друг другу (пропускная способность становится ограничивающим фактором), и ваши процессоры будут оставаться бездействующими. Возможно, еще большая проблема заключается в чтении всех этих данных.
Это основная причина того, что у нас что-то вроде Hadoop. Данные также должны быть распределены - распределенная файловая система Hadoop!
Чтобы сказать все это, MPI хорош для задачи parallelism, а Hadoop хорош для Data Parallelism.
Ответ 3
Лучший ответ, который я мог бы придумать, - это то, что MPI лучше, чем MapReduce в двух случаях:
-
Для коротких задач, а не пакетной обработки. Например, MapReduce не может использоваться для ответа на отдельные запросы - ожидается, что каждая работа займет минуты. Я думаю, что в MPI вы можете создать систему ответов на запросы, где машины отправляют сообщения друг другу, чтобы направить запрос и сгенерировать ответ.
-
Для узлов узлов требуется больше, чем то, что повторяется поддержка заданий MapReduce, но не слишком большая, чтобы накладные расходы на связь делали вычисления непрактичными. Я не уверен, как часто такие случаи происходят на практике.
Ответ 4
Когда вычисление и данные, которые вы используете, имеют нерегулярное поведение, которое в основном преобразуется во многие сообщения-проходы между объектами или когда вам требуется доступ к уровню аппаратного уровня низкого уровня, например. RDMA тогда MPI лучше. В некоторых ответах, которые вы видите здесь, упоминается латентность задач или модель согласованности памяти, такие рамки, как Spark или Actor Models, такие как AKKA, показали, что они могут конкурировать с MPI. Наконец, следует подумать о том, что MPI в течение многих лет является основной базой для разработки библиотек, необходимых для научных вычислений (это самые важные недостающие части, отсутствующие в новых рамках с использованием моделей DAG/MapReduce).
В целом, я думаю, что преимущества, которые MapReduce/DAG-модели приносят в таблицу, такие как динамические менеджеры ресурсов, и вычисления отказоустойчивости сделают их возможными для научных вычислительных групп.
Ответ 5
Я ожидаю, что MPI будет легко удалять MapReduce, когда задача выполняет итерацию по набору данных, размер которого сопоставим с кешем процессора, и часто требуется общение с другими задачами. Множество научных подходов к распараллеливанию доменов подходит к этой схеме. Если MapReduce требует последовательной обработки и связи или завершения процессов, тогда потеря вычислительной производительности от решения проблемы размера кэша теряется.