Я создал два узла для MPI, aml1 (master) и aml2 (рабочий). Я пытаюсь использовать mpirun с R скриптами и использовать библиотеки Rmpi и doMPI. Спецификации для обеих машин одинаковы:Получение mpirun для распознавания всех ядер на каждом узле
On RHEL 7.3
# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Model name: Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz
Stepping: 7
CPU MHz: 2900.000
BogoMIPS: 5790.14
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0-7,16-23
NUMA node1 CPU(s): 8-15,24-31
If you care to see hwloc lstopo output.
Я использую OpenMPI 1.10.5 и я могу видеть процессы, запущенные на AML1 и aml2. Тем не менее, я не вижу, что мой тестовый скрипт работает быстрее, когда я увеличиваю число рабочих, которые порождаются из mpirun, и поэтому я не вижу уменьшения времени вычисления. Это заставляет меня предположить, что mpirun не правильно определяет, сколько ядер доступно, или что я неправильно его назначаю в файле хоста или файле ранга.
Если я изменю свое hostfile или rankfile для различных значений слотов:
$ cat hosts
aml1 slots=4 max_slots=8 #I can change this to 10 slots
aml2 slots=4
$ cat rankfile
rank 0=aml1 slot=0:0
rank 1=aml1 slot=0:1
rank 2=aml1 slot=0:2
rank 3=aml1 slot=0:3
rank 4=aml2 slot=0:6
rank 5=aml2 slot=0:7 #I can add more ranks
А потом я бегу:
$ mpirun -np 1 --hostfile hosts --rankfile rankfile R --slave -f example7.R
$ cat example7.R
library(doMPI)
cl <- startMPIcluster(verbose=TRUE)
registerDoMPI(cl)
system.time(x <- foreach(seed=c(7, 11, 13), .combine="cbind") %dopar% {
set.seed(seed)
rnorm(90000000)
})
closeCluster(cl)
mpi.quit(save="no")
Я все еще получаю подобные истекшее время системы:
Spawning 5 workers using the command:
5 slaves are spawned successfully. 0 failed.
user system elapsed
9.023 7.396 16.420
Spawning 25 workers using the command:
25 slaves are spawned successfully. 0 failed.
user system elapsed
4.752 8.755 13.508
Я также попытался настроить Torque и построить openmpi с опцией tm configure, но у меня есть отдельные вопросы с этим. Я считаю, что мне не нужно использовать Torque для выполнения того, что я хочу сделать, но, пожалуйста, подтвердите, если я ошибаюсь.
Что я хочу сделать, это запустить R-скрипт с Rmpi и doMPI. Сам сценарий R должен запускаться только один раз, причем раздел кода генерируется в кластер. Я хочу максимизировать ядра, доступные на обоих узлах (aml, aml2).
Цените любую помощь из сообщества!
Update 1
Вот немного более подробно: я бегу следующее, изменяя hostfile для каждого прогона:
$ mpirun -np 1 --hostfile hosts [using --map-by slot or node] R --slave -f example7.R
+----------------+-----------------+-----------------+
| | //--map-by node | //--map-by slot |
+----------------+-----------------+-----------------+
| slots per host | time | time |
| 2 | 24.1 | 24.109 |
| 4 | 18 | 12.605 |
| 4 | 18.131 | 12.051 |
| 6 | 18.809 | 12.682 |
| 6 | 19.027 | 12.69 |
| 8 | 18.982 | 12.82 |
| 8 | 18.627 | 12.76 |
+----------------+-----------------+-----------------+
Должен ли я получать сокращение времени? Или это так хорошо, как это получается? Я чувствую, что мне нужно увеличить количество слотов на хост до 30 для максимальной производительности, но он достигает 4 слотов на хост.