doMPI и узлы, процессоры и ядра

Я хочу выполнить распределенные параллельные вычисления с кластером, к которому у меня есть доступ: 5 узлов («компьютеров»); каждый узел имеет два процессора («ЦП»), и каждый процессор имеет 18 ядер.

Итак, количество потоков, которое я мог бы использовать при досадно параллельном вычислении, равно 180 (5 * 2 * 18).

Я обнаружил, что не могу использовать стандартные параллельные функции R для кластера. Вместо этого мне нужно использовать MPI. doMPI кажется идеальным для этой задачи, поскольку он реализует foreach для MPI, как описано в виньетке:

https://cran.r-project.org/web/packages/doMPI/vignettes/doMPI.pdf

У меня вопрос по MPI: когда пишут, например:

cl ‹- startMPIcluster (count = 2)

что это 2 означает? Количество используемых узлов в кластере? Количество используемых ядер?

Если 2 представляет количество используемых узлов, сможет ли doMPI использовать 2 процессора и 2 * 18 ядер, которые находятся в каждом узле? Или мне нужно сказать doMPI что-то еще, например, что я могу использовать эти 36 ядер?

Если 2 представляет количество ядер, то все кажется проще. Но этот выбор был бы странным, потому что, если кластер на самом деле больше 5 узлов (а мне было выделено 5 узлов пропорционально квоте), нет четкого рецепта, следует ли doMPI использовать как можно меньше узлов (и все ядра в этом узле) или используйте как можно больше узлов (и как можно меньше ядер в этом узле).

Итак, мой вопрос:

Если я хочу выполнить цикл из 180 невероятно параллельных задач (или 360, или 1800), следует ли мне использовать cl ‹- startMPIcluster (count = 5) или cl‹ - startMPIcluster (count = 180) или что-то еще, например, 180 имеющиеся ядра используются?

Спасибо за помощь.


person Anarcocapitalista Socialdemocr    schedule 29.09.2018    source источник


Ответы (1)


Параметр count - это «количество создаваемых рабочих». Если вы хотите использовать все 180 ядер в своем кластере, у вас есть два основных варианта:

  1. Используйте startMPIcluster(count=180). Это вызовет 180 процессов.
  2. Используйте mpirun -np 180 R myscript.r. Это запустит 180 экземпляров R с MPI, настроенным с самого начала, а именно «размер» MPI будет 180, а «ранг» процессов будет от 0 до 179.

Любой из этих вариантов подойдет. Вы также можете смешать их, например mpirun -np 10 затем создайте каждое задание с count=15 или чем-то еще. Но, учитывая то, что вы нам сказали до сих пор, я бы сказал, что вам следует придерживаться более простых подходов, описанных выше.

В общем, всякий раз, когда MPI говорит о количестве процессов, рабочих или заданий, одно из них выполняется на одном ядре. Обычно количество узлов или сокетов на узел - не первое, о чем вам нужно беспокоиться (их, возможно, стоит рассмотреть позже в качестве оптимизации).

person John Zwinck    schedule 29.09.2018
comment
Спасибо за ответ, тогда попробую первый способ. Связанный с этим вопрос: как я могу узнать, сколько ядер у меня доступно? Я вижу, что в doMPI есть функция clusterSize (), но эта функция принимает cl в качестве входных данных, поэтому это означает, что объект кластера уже создан. Есть ли способ узнать, сколько ядер, как максимум, доступно априори? - person Anarcocapitalista Socialdemocr; 29.09.2018
comment
@AnarcocapitalistaSocialdemocr: Обычно ожидается, что вы будете знать, сколько процессов вы хотите запустить и сколько ядер существует в вашем оборудовании. MPI не полагается на вытесняющую многозадачность - как только ядро ​​ЦП назначено вам, оно на 100% принадлежит вам, пока ваша работа не будет завершена или отменена. - person John Zwinck; 29.09.2018