标签: mpi4py

错误:无法为 mpi4py 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

我想安装 mpi4py。安装失败并出现以下错误。请分享相同错误的解决方案。

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for mpi4py
Failed to build mpi4py
ERROR: Could not build wheels for mpi4py, which is required to install pyproject.toml-based projects

[notice] A new release of pip available: 22.3 -> 22.3.1
[notice] To update, run: python -m pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

我使用“pip install pyproject-toml”安装了 pyproject-toml。但 mpi4py 仍然无法安装。我的Python版本是Python 3.8.0。

pip mpi4py pyproject.toml

14
推荐指数
2
解决办法
2万
查看次数

将多处理池适配到 mpi4py

我正在使用多处理池在 Python 中运行并行模拟,并且它在具有多核的计算机中运行良好。现在我想使用多个节点在集群上执行程序。我想多处理不能应用于分布式内存。但是 mpi4py 似乎是一个不错的选择。那么这些代码最简单的 mpi4py 等价物是什么:

from multiprocessing import Pool

pool = Pool(processes=16)

pool.map(functionName,parameters_list)
Run Code Online (Sandbox Code Playgroud)

python multiprocessing mpi4py

9
推荐指数
2
解决办法
3969
查看次数

如何运行基本的mpi4py代码

对mpi4py来说是全新的.教程中计算pi示例如下:

主人(或父母或客户)方:

#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys

comm = MPI.COMM_SELF.Spawn(sys.executable,
                           args=['cpi.py'],
                           maxprocs=5)

N = numpy.array(100, 'i')
comm.Bcast([N, MPI.INT], root=MPI.ROOT)
PI = numpy.array(0.0, 'd')
comm.Reduce(None, [PI, MPI.DOUBLE],
            op=MPI.SUM, root=MPI.ROOT)
print(PI)

comm.Disconnect()
Run Code Online (Sandbox Code Playgroud)

工人(或儿童或服务器)方:

#!/usr/bin/env python
from mpi4py import MPI
import numpy

comm = MPI.Comm.Get_parent()
size = comm.Get_size()
rank = comm.Get_rank()

N = numpy.array(0, dtype='i')
comm.Bcast([N, MPI.INT], root=0)
h = 1.0 / N; s = 0.0
for i in range(rank, N, size):
    x = …
Run Code Online (Sandbox Code Playgroud)

python mpi mpi4py

9
推荐指数
1
解决办法
7651
查看次数

mpiexec和python mpi4py给出等级0和大小1

我在虚拟机上运行python Hello World mpi4py代码时遇到问题.

hello.py代码是:

#!/usr/bin/python
#hello.py
from mpi4py import MPI

comm = MPI.COMM_WORLD

size = comm.Get_size()
rank = comm.Get_rank()

print "hello world from process ", rank,"of", size
Run Code Online (Sandbox Code Playgroud)

我试图用mpiexec和mpirun来运行它,但运行不好.输出:

$ mpirun -c 4 python hello.py 
hello world from process  0 of 1
hello world from process  0 of 1
hello world from process  0 of 1
hello world from process  0 of 1
Run Code Online (Sandbox Code Playgroud)

从mpiexec:

$ mpiexec -n 4 python hello.py 
hello world from process  0 of 1
hello world from …
Run Code Online (Sandbox Code Playgroud)

python mpi mpiexec mpi4py

8
推荐指数
1
解决办法
4971
查看次数

如何使MPI4P在Windows上工作

我正在尝试使用mpi4py。

我从Anaconda软件包中安装了mpi4py,并且

pip install mpi4py
Run Code Online (Sandbox Code Playgroud)

认识到这一点。

但是当我跑步时

from mpi4py import MPI
Run Code Online (Sandbox Code Playgroud)

说MPI模块不存在。

我看过mpi4py文件夹,确实找不到。

我认为问题是我可能未安装OpenMPI,但我一直在寻找无处不在,并且找不到在Windows 10上安装ir的方法。

请帮忙。

编辑:最初的问题是关于在Windows 10上安装OpenMPI并将其与mpi4py结合使用的,但是由于我找到了一种与MSMPI一起运行mpi4py的方法,因此我更改了标题,因此尝试这样做的人们至少可以找到解决方法。

windows openmpi mpi4py

7
推荐指数
2
解决办法
5822
查看次数

使用MPI和TensorFlow的含义

我来自一种HPC背景,我刚刚开始学习机器学习,尤其是TensorFlow.我最初惊讶地发现,分布式TensorFlow默认是为了与TCP/IP进行通信,尽管考虑到谷歌是什么以及它最常用的硬件类型,事后才有意义.

我有兴趣在集群上以MPI并行方式试验TensorFlow.从我的角度来看,这应该是有利的,因为MPI在没有共享内存的机器上使用远程直接内存访问(RDMA),因此延迟应该低得多.

所以我的问题是,鉴于TensorFlow和机器学习越来越受欢迎,为什么这种方法似乎不常见?延迟不是瓶颈吗?是否有一些典型问题得到解决,这使得这种解决方案不切实际?在并行方式调用TensorFlow函数与在TensorFlow库中实现MPI调用之间是否存在任何有意义的差异?

谢谢

python mpi mpi4py tensorflow

7
推荐指数
1
解决办法
6582
查看次数

mpi4py中的共享内存

我使用MPImpi4py)脚本(在单个节点上),该脚本可用于非常大的对象。为了让所有进程都可以访问该对象,我通过分发了该对象comm.bcast()。这会将对象复制到所有进程,并占用大量内存,尤其是在复制过程中。因此,我想共享诸如指针之类的东西,而不是对象本身。我发现一些memoryview有用的功能有助于增强流程中对象的工作。同样,对象的实际内存地址也可以通过memoryview对象字符串表示形式进行访问,并且可以这样分配:

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

if rank:
    content_pointer = comm.bcast(root = 0)
    print(rank, content_pointer)
else:
    content = ''.join(['a' for i in range(100000000)]).encode()
    mv = memoryview(content)
    print(mv)
    comm.bcast(str(mv).split()[-1][: -1], root = 0)
Run Code Online (Sandbox Code Playgroud)

打印:

<memory at 0x7f362a405048>
1 0x7f362a405048
2 0x7f362a405048
...
Run Code Online (Sandbox Code Playgroud)

这就是为什么我认为必须有一种方法可以在另一个过程中重构对象。但是,我在文档中找不到有关如何执行此操作的线索。

简而言之,我的问题是:是否可以在中同一节点上的进程之间共享对象mpi4py

mpi shared-memory python-3.x memoryview mpi4py

6
推荐指数
2
解决办法
1928
查看次数

mpi4py 散布和收集大型 numpy 数组

我正在尝试使用 mpi4py 在大型 numpy 数组上并行化一些操作。我目前正在使用numpy.array_split将数组分成块,然后com.scatter将数组发送到不同的核心,然后comm.gather收集生成的数组。一个最小(非)工作示例如下:

import numpy as np
from mpi4py import MPI


comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()

if rank == 0:
    test = np.random.rand(411,48,52,40)
    test_chunks = np.array_split(test,size,axis=0)

else:
    test_chunks = None

test_chunk = comm.scatter(test_chunks,root=0)
output_chunk = np.zeros([np.shape(test_chunk)[0],128,128,128])

for i in range(0,np.shape(test_chunk)[0],1):
    print(i)
    output_chunk[i,0:48,0:52,0:40] = test_chunk[i]

outputData = comm.gather(output_chunk,root=0)


if rank == 0:
    outputData = np.concatenate(outputData,axis = 0)
Run Code Online (Sandbox Code Playgroud)

运行这给了我错误:

  File "test_4d.py", line 23, in <module>
    outputData = comm.gather(output_chunk,root=0)
  File "Comm.pyx", …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy mpi4py

6
推荐指数
1
解决办法
8247
查看次数

如何找到 MPI(4PY) 可用的内核数?

如何找到 MPI(4PY) 可用的内核数?


动机

我的 Python 程序按层次生成 MPI 实例。

第一次生成总是发生并创建 4 个实例。由于我的计算结构,增加这个数字没有意义,所以我对其进行了硬编码。

根据主程序的命令行选项,4 个实例中的每一个都会调用几乎线性扩展的外部 Python 软件。

我调用这个外部软件使用

N=3
child=MPI.COMM_SELF.Spawn(sys.executable,args=[`external.py`],maxprocs=N)
Run Code Online (Sandbox Code Playgroud)

目前,我使用N=3使第一个生成的 4 个实例每个生成外部程序的 3 个实例,总共产生 12 个实例,与我工作站上的内核数相匹配。

但是,为了便携性,我想做

N_avail = <MPI.N_CORES> #on my workstation: N_avail=12
N = N_avail/MPI.COMM_WORLD.Get_size() #on my workstation: N=12/4=3
Run Code Online (Sandbox Code Playgroud)

这样可用内核的数量就不需要硬编码了。

这可能吗,是否有意义?


笔记

我曾希望不指定会的MaxProcs做的工作,就像mpirun用了-np产卵的多个实例可用内核。但是,Spawn则默认为maxprocs=1

外部库的调用是阻塞的,这就是为什么我不(不会)从N_avail.

我不能只使用multiprocessing.cpu_count(),因为这只会给我当前节点上的核心(在集群设置中)。我计划使用 SLURM 调度程序在集群上运行我的代码。

python mpi multiprocessing mpi4py

6
推荐指数
1
解决办法
3638
查看次数

如何从pycharm中使用mpi4py(使用mpiexec)运行python脚本?

我有一个依赖于 MPI 的 mpi4py 实现的 python 脚本。这需要通过 mpiexec(或 mpirun)运行。

我的问题是:如何直接从 PyCharm 使用 mpiexec(或 mpirun)运行(并希望调试)python 脚本?

将 mpiexec 作为外部工具运行不是一个好主意,因为我将无法调试它。

我可以做什么?

python parallel-processing mpi pycharm mpi4py

6
推荐指数
1
解决办法
1965
查看次数