Python MPI如何减少工作量
我没有太多的MPI经验,我试图了解如何减少工作。下面是一个受此启发的简单示例。从IPython笔记本电脑数据板在本地计算机上启动2个MPI引擎,如下所示:Python MPI如何减少工作量,python,mpi,ipython,mpich,Python,Mpi,Ipython,Mpich,我没有太多的MPI经验,我试图了解如何减少工作。下面是一个受此启发的简单示例。从IPython笔记本电脑数据板在本地计算机上启动2个MPI引擎,如下所示: In [1]: import numpy as np from IPython.parallel import Client In [2]: c = Client(profile='mpi') In [3]: view = c[:] In [4]: view.scatter('a', np.arange(4.)) Out
In [1]: import numpy as np
from IPython.parallel import Client
In [2]: c = Client(profile='mpi')
In [3]: view = c[:]
In [4]: view.scatter('a', np.arange(4.))
Out[4]: <AsyncResult: scatter>
In [5]: %%px
from mpi4py import MPI
import numpy as np
print MPI.COMM_WORLD.allreduce(np.sum(a), op=MPI.SUM)
[stdout:0] 1.0
[stdout:1] 5.0
[1]中的:将numpy作为np导入
从IPython.parallel导入客户端
在[2]中:c=Client(profile='mpi')
在[3]中:视图=c[:]
在[4]中:view.scatter('a',np.arange(4.))
出[4]:
在[5]中:%%px
从mpi4py导入MPI
将numpy作为np导入
打印MPI.COMM\u WORLD.allreduce(np.sum(a),op=MPI.sum)
[stdout:0]1.0
[stdout:1]5.0
我希望每个引擎都能打印“6.0”,就像IPython教程中那样。这里,好像没有执行还原操作。这可能很简单,但我不太明白我做错了什么
我使用:
- Ubuntu 12.04
- Python 2.7.3 32位
- IPython 1.1.0
- mpi4py 1.2.2
- mpich2
np.sum(a)
值,这就是您看到的
最好检查MPI是否正确设置:
%px print MPI.COMM_WORLD.Get_rank(), MPI.COMM_WORLD.Get_size()
如果您的引擎不在同一MPI世界中,您的输出将如下所示:
[stdout:0] 0 1
[stdout:1] 0 1
如果是:
[stdout:0] 0 2
[stdout:1] 1 2
确保使用MPI启动发动机。例如:
ipcluster start --engines MPI
或添加到ipcluster_config.py:
c.IPClusterEngines.engine_launcher_class = 'MPI'
或者只需手动执行,无需任何配置(以上配置都会执行此操作):
我想知道,与python教程不同,您使用的是allrecude(小写-a),而他们使用的是Allreduce(大写a),这一事实是否重要?使用Allreduce会导致完全相同的问题。我在这里使用allreduce只是为了使示例更短。你说得对。使用
ipcluster start-n2--engines MPI--profile=MPI启动发动机可以解决此问题。我之前所做的是ipythonprofile-create--parallel--profile=mpi
,然后从ipython仪表板启动引擎(由于配置文件名为“mpi”,但默认情况下它们不是真正的mpi引擎)。如果我在ipcluster\u config.py
中添加c.IPClusterEngines.engine\u launcher\u class='MPI'
,它就会工作。无论如何,谢谢!这很有帮助。
mpiexec -n 4 ipengine