问题标签 [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 - 生成一段时间后 mpi4py 出错,如何调试
这类似于互联网上的一些问题,但这段代码似乎工作了一段时间,而不是立即返回错误,这对我来说可能不仅仅是主机文件错误?
我正在运行一个生成多个 MPI 进程的代码,然后每个 MPI 进程创建一个循环,在循环中它们使用 bcast 和 scatter 发送一些数据,然后从这些进程中收集数据。这将运行算法并保存数据。然后它与生成的通信断开连接,并在下一个循环中创建另一组生成。这工作了几分钟,然后在大约 300 个文件之后,它会吐出这个:
我在本地机器(单节点)上对此进行测试,因此最终部署将有多个节点,每个节点在该节点内产生自己的 mpi 进程。我试图弄清楚这是否是在我的本地机器上测试多个节点的问题,并且可以在 HPC 上正常工作,或者是一个更严重的错误。
我该如何调试呢?有没有办法打印出 MPI 在此期间尝试执行的操作或监控 MPI,例如详细模式?
python - h5py 没有针对 mpi4py 正确构建
我正在尝试针对 mpi4py 构建 h5py。我的目的是能够在多个处理器之间共享文件。h5py 已安装在系统上,但可能没有指向 mpi4py 的链接。事实上,当我运行以下示例脚本时:
我收到错误消息:
我试图构建 h5py 如下:
但这给了我以下问题:
我还尝试使用 homebrew 和 pip 进行安装(希望 mpi4py 已自动链接)但没有成功。
如何正确安装并行 h5py?
python - os.system(...) 调用共享文件的函数不会在一个内核上退出 (mpi4py)
背景我正在使用 mpi4py 并行运行一个 python 程序。
我在每个核心上分发文件,这样每个核心有1个文件(有2个核心);这只是一个测试场景。
每个核心现在运行一个程序“prog.exe”,大约需要 5 分钟才能完成。我使用 os.system(...) 并在调用之后立即使用 Barrier() (以防核心 i 在核心 j 之前完成)。
我已经测试了一些简单的 os.system(...) 调用(例如简单地回显某些东西)并且效果很好。
但是,prog.exe 是一个需要读取磁盘文件的程序。该文件在各个内核中是相同的。因此,当调用 os.system(...) 时, prog.exe 会读取文件,但它对两个内核都这样做。
问题 发生的情况是一个核心完成(它似乎总是我测试的根源)而另一个没有。
假设一核心打开文件(首先访问它),然后进行一些解析。然后,另一个核心进入文件,但是呜呜,它已经打开了,所以不能这样做。
潜在的解决方案因此,解决方案似乎是让每个核心将文件复制到自己的文件夹中。但是,内核可以并行复制文件,还是在复制过程中对文件设置了类似的锁?
社区问题
- 我的假设正确吗?程序因文件锁定而崩溃?
- 更一般地说,您如何处理内核共享相同数据文件的加载(似乎很常见)的这种情况?每个核心都复制文件吗?考虑到锁等可能吗?
进一步的思考 如果读取同一个文件没有问题,那么问题一定是我的prog.exe 有问题,但是在这种情况下,能否确认读取同一个文件是可以的。
谢谢
python - 如果处理器 0 上的断言失败,使用 mpirun 运行的 python 脚本不会停止
我有一个 python 脚本,其中包含 mpi4py 库并行完成的一组操作。在操作结束时,秩为 0 的处理器执行断言测试。如果断言失败,则进程应该停止并且程序终止。但是,程序没有退出,我猜这是因为其他处理器正在持有。如果断言失败,如何使程序结束执行?我使用以下命令运行:
然后我在代码中有一行:
python - 无法使用 PyPy 为 mpi4py 运行“setup.py build”
我一直在使用带有 OpenMPI 的 mpi4py 库来开发分布式内存程序。到目前为止,我一直在使用 vanilla Python 2.7 (CPython)。
根据mpi4py 项目页面,mpi4py 兼容“PyPy 2.0 及以上”。
在我安装 Fedora 22 时,我安装了 PyPy 2.4.0:
sudo dnf install pypy pypy-devel
然后我创建了一个 virtualenv 并通过以下方式激活它:
virtualenv env -p $(which pypy) && . env/bin/activate
然后我尝试使用 pip 安装 mpi4py:
pip install mpi4py
但我收到以下错误:
但是,在使用常规 CPython 时,这组相同的步骤可以正常工作。我对 PyPy 的细微差别不是很熟悉。我在这里遗漏了一些明显的东西吗?
(注意:我已经sudo dnf -y install openmpi openmpi-devel
在 F22 上安装了 OpenMPI)
python - mpi4py - 如何避免通信阻塞
我使用过 MPI 代码并且对这些概念有一些基本的想法,但我自己从未做过任何 MPI 开发。我从并行化我的一些 python 代码开始。以下是我正在尝试做的片段:
我运行代码
问题是有时循环分解不会为 procs 提供相等大小的循环。例如,如果 nt=21 并且我使用 2 个 proc,则 proc 0 循环:
和 proc 1 循环:
因此,对于 it=20,proc 0 一直在等待收到 proc 1 的消息,而 proc 1 没有做任何事情。显然,对于任何不具有 nt%np=0 的 nt 和 np 组合,我都会遇到这个问题。
在这种情况下设置通信的好方法是什么?
谢谢!
python - 使用 mpi4py 分析并行化 python 脚本
我有一个名为 main_parallel.py的python
脚本。我可以使用表单mpi4py
来测量时间,但是如何制作类似于 cProfile 的配置文件?我喜欢查看代码每个部分的调用次数。我不能使用 cProfile 因为仅适用于串行代码。time
cli
谢谢!
python - MPICH2 和 mpi4y 的区别
mpich2 和 mpi4py 有什么区别?我刚刚在我的 raspbian 集群上安装了 MPICH2。我也需要 mpi4py 吗?
python - 无法发送超过一定长度的 MPI 消息
我正在使用 Python .7.10 在 Ubuntu 14.04.3 系统上运行针对 OpenMPI 1.10.1 构建的 mpi4py 2.0.0。出于某种原因,尝试发送大于 64 Kb 的消息会导致发送/接收挂起;但是,我能够使用完全相同的软件和 OpenMPI/mpi4py 包在其他 Ubuntu 14 系统上成功发送大消息。我还能够在使用 OpenMPI 的 C 程序中成功发送大型消息。这表明环境中有一些东西对 mpi4py 执行的 MPI 通信产生了不利影响。关于什么可能会干扰 mpi4py 的任何想法?
下面是一个在 N 设置为 65537 或更大时在一个系统上工作并在另一个系统上挂起的代码示例。
我还尝试使用明确指定的固定长度缓冲区将腌制发送/接收替换为非腌制发送/接收,但这对问题没有任何影响。
奇怪的是,这个问题似乎不会影响使用相同通信器的对等进程之间的传输。
python - 使用 mpi4py 的分段错误
我正在使用 mpi4py 将处理任务分布在一组内核上。我的代码如下所示:
这将返回以下错误:
我相信这个错误意味着存储的数据数组all_data1
超过了Python中数组的最大大小,这是很有可能的。
我尝试将其分成较小的部分,如下所示:
但这会返回以下错误。
接下来是一大堆难以理解的类似路径的信息和最后一条消息:
无论我使用多少个处理器,这似乎都会发生。
对于 C 中的类似问题,解决方案似乎巧妙地改变了recv
调用中参数的解析方式。使用 Python 的语法是不同的,所以如果有人能说明为什么会出现这个错误以及如何修复它,我将不胜感激。