По умолчанию используется многопроцессорный модуль Python, но возможны и другие подходы, например интерфейс передачи сообщений (MPI), используемый в кластерах [6] [7].
< /blockquote>
Вот моя попытка использовать mpi4py, но она зависает:
Код: Выделить всё
if __name__ == '__main__':
if sys.argv[2] == 'mpi':
from mpi4py.futures import MPIPoolExecutor
executor = MPIPoolExecutor(max_workers=int(sys.argv[1]))
num_workers = executor.map
else:
num_workers = int(sys.argv[1])
results = differential_evolution(likelihood, workers=num_workers)
Код: Выделить всё
#!/bin/bash
#SBATCH -N 2
#SBATCH --ntasks-per-core=2
module load --auto python/3.9.15-gcc-12.2.0-3sr5utz
module load --auto py-pandas/1.5.1-gcc-12.2.0-356d2ew
module load --auto py-scipy/1.8.1-gcc-12.2.0-7uvxgvy
module load --auto py-mpi4py/3.1.3-gcc-12.2.0-xvabib2
mpiexec --oversubscribe --use-hwthread-cpus --mca btl "^openib" -n 289 python3 -m mpi4py.futures ./mypyscripy.py 288 'mpi'
Код: Выделить всё
[n3510-008][[54035,1],198][btl_tcp.c:559:mca_btl_tcp_recv_blocking] recv(18) failed: Connection reset by peer (104)
ОБНОВЛЕНИЕ
Проблема в том, что мне нужно добавить MPIPoolExecutor() в качестве исполнителя: .
Подробнее здесь: https://stackoverflow.com/questions/781 ... with-scipy