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

Я хочу выполнить распределенное параллельное вычисление с кластером, к которому у меня есть доступ: 5 узлов ("компьютеров"); каждый узел имеет два процессора ("CPU"), а каждый процессор имеет 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 доступные ядра используются?

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

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 говорит о количестве процессов, рабочих или заданий, один из них выполняется на одном ядре. Обычно количество узлов или сокетов на узел - это не первое, о чем вам нужно беспокоиться (о них стоит подумать позже, как об оптимизации).

Другие вопросы по тегам