问题标签 [mpi4py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 逆矩阵Python3 mpi4py EOFError:读取一行时出现EOF
我正在编写一段代码,它将使用mpi4py
. 我收到一个给我带来问题的错误。
我放了 2 个默认变量m, n
,用户将数字插入到rank 0
过程中以填充矩阵。该过程rank 0
将矩阵发送到process 1
和process 2
。在process 1
我初始化矩阵和行列式,计算行列式,并将其发送回rank 0
. 在process 2
中,我初始化矩阵,找到逆矩阵,并将逆矩阵发送回进程 0。
然后我process 0
收到行列式和逆矩阵。如果行列式为0,则发送消息并退出程序(即使行列式为0也可以计算逆矩阵,但不正确)。如果不为 0,程序将打印逆矩阵。
请注意,我知道当前的实现不是并行化此问题的最佳方法,但我需要从某个地方开始。
行列式给了我一些错误,所以我将它初始化为一个包含 2 个元素的空numpy
数组,其中第一个元素是行列式,第二个元素是 0。我将代码从我的母语编辑为英语,以便可以阅读和更容易理解,因此它可能包含一些错误。
问题是当我想给用户写矩阵大小的权限时。我检查了一些相关的答案,并尝试使用map()
、raw_input()
和其他选项,但没有一个有效。
编码:
错误:
编辑:我正在使用 PuTTY 从大学连接到 Debian 操作系统。
解释器版本:sys.version_info(major=3, minor=5, micro=1, releaselevel='final', serial=0)
我输入命令行:mpirun -np 3 python3 lambda.py,我得到一个 EoFError 并插入数字直到它应该做某事的地方,而不是这样做,它继续作为无限循环运行。(更好看在图片中) 图片
添加了跟踪输入的代码:
python - MPI4PY 溢出错误:整数 2333441511 不适合“int”
我分散了嵌套字典的列表,没有任何大于 200000 的数字,所有的大小约为 500M。
mpi4py - MPI_Send(100):无效等级的值为 1,但必须为非负数且小于 1
我正在自己学习python中的MPI。我刚从MPI4py
. 我从这段代码开始:
当我运行这个程序时,我得到了以下错误:
我没有找到任何可行的解决方案来解决这个问题。我正在使用Mac OS X El Capitan
.
提前致谢!
ipython - 使用 machinefile 进行 MPI 集群的 ipython
根据对 mpi4py 演示目录中的 helloworld.py 脚本的测试,我已经成功地在三个节点上配置了 mpi 并支持 mpi4py:
gms@host:~/development/mpi$ mpiexec -f machinefile -n 10 python ~/development/mpi4py/demo/helloworld.py
我现在正试图让这个在 ipython 中工作,并将我的机器文件添加到我的 $IPYTHON_DIR/profile_mpi/ipcluster_config.py 文件中,如下所示:
然后我使用以下命令在我的头节点上启动 iPython notebook:ipython notebook --profile=mpi --ip=* --port=9999 --no-browser &
而且,瞧,我可以从本地网络上的另一台设备上很好地访问它。但是,当我从 iPython 笔记本运行 helloworld.py 时,我只得到来自头节点的响应:Hello, World! I am process 0 of 10 on host.
我从 iPython 开始使用 10 个引擎的 mpi,但是...
我进一步配置了这些参数,以防万一
在 $IPYTHON_DIR/profile_mpi/ipcluster_config.py
在 $IPYTHON_DIR/profile_mpi/ipengine_config.py
在 $IPYTHON_DIR/profile_mpi/ipcontroller_config.py
然而,这些也无济于事。
为了让它正常工作,我缺少什么?
编辑更新 1
我现在在我的工作节点上安装了 NFS 目录,因此,我满足了“当前 ipcluster 要求 IPYTHONDIR/profile_/security 目录位于控制器和引擎都可以看到的共享文件系统上”的要求。能够使用ipcluster
命令来启动我的控制器和引擎ipcluster start --profile=mpi -n 6 &
。
所以,我在我的头节点上发出这个,然后得到:
2016-03-04 20:31:26.280 [IPClusterStart] Starting ipcluster with [daemon=False]
2016-03-04 20:31:26.283 [IPClusterStart] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
2016-03-04 20:31:26.284 [IPClusterStart] Starting Controller with LocalControllerLauncher
2016-03-04 20:31:27.282 [IPClusterStart] Starting 6 Engines with MPIEngineSetLauncher
2016-03-04 20:31:57.301 [IPClusterStart] Engines appear to have started successfully
然后,继续发出相同的命令以启动其他节点上的引擎,但我得到:
2016-03-04 20:31:33.092 [IPClusterStart] Removing pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
2016-03-04 20:31:33.095 [IPClusterStart] Starting ipcluster with [daemon=False]
2016-03-04 20:31:33.100 [IPClusterStart] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
2016-03-04 20:31:33.111 [IPClusterStart] Starting Controller with LocalControllerLauncher
2016-03-04 20:31:34.098 [IPClusterStart] Starting 6 Engines with MPIEngineSetLauncher
[1]+ Stopped ipcluster start --profile=mpi -n 6
没有确认Engines appear to have started successfully
...
更令人困惑的是,当我ps au
在工作节点上执行 a 时,我得到:
其中进程 3376 和 3378 中的 IP 地址来自集群中的其他主机。但...
当我直接使用 ipython 运行类似的测试时,我得到的只是来自 localhost 的响应(尽管减去 ipython,这直接与 mpi 和 mpi4py 一起工作,如我原来的帖子中所述):
尽管我确信我的配置现在是正确的,但我似乎仍然缺少一些明显的东西。突然出现的一件事是,当我ipcluster
在工作节点上启动时,我得到了这个:2016-03-04 20:31:33.092 [IPClusterStart] Removing pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
编辑更新 2
这更多是为了记录正在发生的事情,并希望最终是什么使它起作用:
我清理了我的日志文件并重新发布ipcluster start --profile=mpi -n 6 &
现在为我的引擎查看 6 个日志文件,为我的控制器查看 1 个日志文件:
查看 ipcontroller 的日志,看起来只注册了一个引擎:
不应该注册6个引擎中的每一个吗?
引擎的 2 个日志看起来注册良好:
而另一个注册id 0
但是,其他 4 个引擎给出了超时错误:
嗯...我想我明天可以尝试重新安装 ipython。
编辑更新 3
安装了冲突的 ipython 版本(看起来像通过 apt-get 和 pip)。卸载并重新安装使用pip install ipython[all]
...
编辑更新 4
我希望有人发现这很有用,我希望有人可以在某个时候参与进来,帮助澄清一些事情。
无论如何,我安装了一个 virtualenv 来隔离我的环境,我认为它看起来一定程度上是成功的。我在每个节点上启动了“ipcluster start -n 4 --profile=mpi”,然后 ssh 回到我的头节点并运行了一个测试脚本,该脚本首先调用ipcluster
. 以下输出:所以,它正在做一些并行计算。
但是,当我运行查询所有节点的测试脚本时,我只得到头节点:
但是,再一次,如果我只是运行直接mpiexec
命令,一切都是笨拙的。
更令人困惑的是,如果我查看节点上的进程,我会看到各种行为表明它们正在协同工作:
在我的日志中没有任何异常。为什么我没有在我的第二个测试脚本中返回节点(代码包含在此处:):
python - 使用 Python (mpi4py) 在 Google Cloud Engine 上进行分布式编程
我想使用 mpi4py 包使用 python 进行分布式编程。出于测试原因,我通过谷歌容器引擎建立了一个 5 节点的集群,并相应地更改了我的代码。但是现在,我的下一步是什么?如何让我的代码在所有 5 个虚拟机上运行和工作?
我试图从集群中通过 ssh-connect 连接到一个虚拟机并运行代码,但很明显代码没有被分发,而是留在同一台机器上:( [参见下面的示例]
.
代码:
.
输出:
mpiexec -n 5 python 5_test.py
你好世界!我是 gke-cluster-1-000000cd-node-mgff 上的 5 个进程/排名 0。
你好世界!我是 gke-cluster-1-000000cd-node-mgff 上的 5 个进程/排名 1。
你好世界!我是 gke-cluster-1-000000cd-node-mgff 上的 5 个进程/排名 2。
你好世界!我是 gke-cluster-1-000000cd-node-mgff 上的 5 个进程/排名 3。
你好世界!我是 gke-cluster-1-000000cd-node-mgff 上的 5 个进程/第 4 个。
python - python并行化for循环
我有一个时间密集型代码,我想将其并行化以在多个处理器上运行。这甚至可能吗?
python - mpi4py 分散和收集大型 numpy 数组
我正在尝试使用 mpi4py 在大型 numpy 数组上并行化一些操作。我目前正在使用numpy.array_split
将数组分成块,然后com.scatter
将数组发送到不同的核心,然后comm.gather
收集结果数组。一个最小(非)工作示例如下:
运行它会给我错误:
这个错误似乎是由于收集的 numpy 数组的大小过大造成的;由于 scatter 和 gather 将数组作为数组列表发送,因此看起来很容易超出列表大小。我遇到的一个建议是使用 comm.Scatter 和 comm.Gather。但是,我正在努力为这些功能找到明确的文档,到目前为止还无法成功实现它们。例如:
更换
outputData = comm.gather(output_chunk,root=0)
用线
outputData=comm.Gather(sendbuf[test_chunks,MPI.DOUBLE],recvbuf=output_chunk,MPI.DOUBLE],root=0)
给出错误:
或使用以下命令:
给出错误:
此外,输入矩阵test
的大小也可能会增加,这可能会导致类似的问题comm.scatter
。除了我已经遇到的问题之外comm.Gather
,我不确定如何设置comm.Scatter
,因为recvbuf
它是根据 的大小定义的test_chunk
,它是 的输出comm.scatter
,因此我无法recvbuf
在comm.Scatter
.
python - mpi4py Scatterv 函数沿哪个轴拆分 numpy 数组?
我有以下 MWE 使用comm.Scatterv
并comm.Gatherv
在给定数量的内核上分布 4D 阵列(size
)
这会创建一个随机数的 4D 数组,原则上应该在重新组合之前将其划分为size
核心。我希望Scatterv
根据向量split_sizes
和中的起始整数和位移沿轴 0(长度 411)划分displacements
。Gatherv
但是,使用( )重新组合时出现错误,mpi4py.MPI.Exception: MPI_ERR_TRUNCATE: message truncated
并且每个核心上的 output_chunk 图显示大部分输入数据已丢失,因此似乎沿第一个轴没有发生拆分。
我的问题是:为什么分裂不沿着第一个轴发生,我怎么知道分裂沿着哪个轴发生,是否可以更改/指定沿着哪个轴发生?
python - 如何将文本字符串从 mpi4py 工作进程传递回 root = 0 以写入文本输出
我正在尝试将包含有关工作进程进度的信息的文本字符串传递回 root = 0。我正在使用comm.recv
,但是,当我收到错误时,我无法接收包含该文本的列表TypeError: expected a writeable buffer object
。
我尝试设置的 MWE 如下:
这失败了comm.recv(recv_buffer,ANY_SOURCE)
。recv_buffer
预先指定为recv_buffer = []
。我怎样才能使它可写?
python - 使用 mpi4py 接收多个发送命令
如何修改以下代码(改编自http://materials.jeremybejarano.com/MPIwithPython/pointToPoint.html),以便comm.Send
接收每个实例root = 0
并打印输出。目前,只接收到第一个发送命令。