python并行计算之mpi4py的安装与基本使用

Python MPI多核编程入门 1. 下载并安装MPI windows下: mpich下载地址:https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx?f=255&MSPPError=-2147217396 点进download之后包含两个文件:msmpisdk.msi和MSMpiSetup.exe 分别下载并安装 添加BIN目录到系统路经 ... 阅读详情

技术背景

在之前的博客中我们介绍过concurrent等python多进程任务的方案,而之所以我们又在考虑MPI等方案来实现python并行计算的原因,其实是将python的计算任务与并行计算的任务调度分层实现。在concurrent和multiprocessing等方案中,我们的python计算任务和调度任务是一体化的,而且还有一个比较大的限制是没办法跨节点操作的,这对于任务与环境的定制化程度要求是比较高的。而MPI的方案在设计初期就考虑到了多节点之间通信的问题,而这种分层式的任务调度解决方案其实在架构上看也更加的合理。做计算的人只要考虑单个进程下的任务如何执行就可以了,至于任务如何并行如何调度,那就是上层的MPI该做的事情了。

mpi4py的安装

这里推荐使用conda直接安装,如果采用pip安装的话,可能会有些环境依赖的问题出现:

$ conda install mpi4py
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/dechin/anaconda3

  added / updated specs:
    - mpi4py


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    mpi-1.0                    |            mpich          13 KB  defaults
    mpi4py-3.0.3               |   py38h028fd6f_0         572 KB  defaults
    mpich-3.3.2                |       hc856adb_0         3.8 MB  defaults
    ------------------------------------------------------------
                                           Total:         4.4 MB

The following NEW packages will be INSTALLED:

  mpi                pkgs/main/linux-64::mpi-1.0-mpich
  mpi4py             pkgs/main/linux-64::mpi4py-3.0.3-py38h028fd6f_0
  mpich              pkgs/main/linux-64::mpich-3.3.2-hc856adb_0

The following packages will be UPDATED:

  ca-certificates                      2021.9.30-h06a4308_1 --> 2021.10.26-h06a4308_2


Proceed ([y]/n)? y


Downloading and Extracting Packages
mpi4py-3.0.3         | 572 KB    | ############################################## | 100% 
mpich-3.3.2          | 3.8 MB    | ############################################## | 100% 
mpi-1.0              | 13 KB     | ############################################## | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

安装完成后可以通过 python3 -c "from mpi4py import MPI" 来检查是否安装成功,下面我们来看一些具体的使用案例。

使用案例

首先了解下mpi的基本使用方法,如果我们使用 mpirun -n 3 python3 test.py 这样的指令去运行一个程序,那么就会给每一个不同的 test.py 中发送一个互不相同的rank,这个rank的范围是从0开始数的。比如如下案例我们使用 Get_rank() 方法就可以获取到mpi所传递下来的rank id,这样进程就知道了自己所处的进程编号,我们写好每个编号下所需要执行的任务即可:

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
print('My rank is ',rank)

执行效果如下:

$ mpirun -n 4 python3 mpi_test.py
My rank is  2
My rank is  1
My rank is  0
My rank is  3

当然,因为每个任务都是平级的关系,因此mpi的rank id也是随机发放的,这个没办法控制,但是我们可以用如下的方法在进程间通信:

from mpi4py import MPI

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

if rank == 0:
    idata = 1
    comm.send(idata, dest=1)
    print ('This is process {}'.format(rank), '\nData send to process 1 successfully!')
elif rank == 1:
    idata = comm.recv(source=0)
    print ('This is process {}, data is '.format(rank),idata)

在这个案例中,我们从rank id为0的进程向rank id为1的进程发送了一个整数变量的数据。因为我们并不知道这个脚本什么时候会被分配到rank 0什么时候会被分配到rank 1,因此在同一个脚本内我们就需要分别对这两种可能发生的情况进行针对性的处理。运行结果如下:

$ mpirun -n 2 python3 mpi_test.py
This is process 0 
Data send to process 1 successfully!
This is process 1, data is  1

整数型的变量被成功的传递,当然,这里面其实还有个更加重要的意义是,rank为1的进程实际上是对rank为0的进程有时间序列上的依赖的,我们必须执行完rank 0中的任务,才能再执行rank 1中的任务,这个是有可能在实际的应用过程中被频繁使用的功能,尤其是任务之间互相有依赖的情况下。当然,进程之间的通信不仅仅可以传递整数型的变量,还可以传递其他类型,比如字典或者一个numpy的数组:

from mpi4py import MPI
import numpy as np

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

if rank == 0:
    numData = 10
    comm.send(numData, dest=1)
    data = np.linspace(0.0, 3.14, numData)
    comm.Send(data, dest=1)
    print ('This is process {}'.format(rank), '\nData send to process 1 successfully!')

elif rank == 1:
    numData = comm.recv(source=0)
    print('Number of data to receive: ', numData)

    data = np.empty(numData, dtype='d')
    comm.Recv(data, source=0)
    print ('This is process {}, data is '.format(rank),data)

运行结果如下:

$ mpirun -n 2 python3 mpi_test.py
This is process 0 
Data send to process 1 successfully!
Number of data to receive:  10
This is process 1, data is  [0.         0.34888889 0.69777778 1.04666667 1.39555556 1.74444444
 2.09333333 2.44222222 2.79111111 3.14      ]

可以看到结果是被成功的接收了的。

总结概要

在这篇文章中,我们并没有介绍非常多的MPI的应用,其实在普通的并行或者分布式任务中,掌握了各个进程的任务处理过程以及进程间的通信方法就足够了。总体来说,MPI是一个非常通用也非常高效的并行计算软件。有了这些专业的并行化任务调度软件,我们就可以专注于专业任务的代码和算法上,而不需要过多的去关注并行任务的调度和分配问题。

保姆级教程:用mpi4py在Slurm集群做并行计算,从环境配置到成功运行Pi示例 本文提供了一份详细的保姆级教程,指导如何在Slurm集群上使用mpi4py进行并行计算,从环境配置到成功运行Pi示例。教程涵盖了集群环境准备、MPI程序编写、Slurm作业脚本配置以及常见问题排查,特别针对多节点MPI计算中的连接拒绝问题提供了解决方案。 阅读详情

相关推荐

安装mpi4py的步骤详解

如果进程号为1,则创建一个空的100个整数的NumPy数组,并使用comm.Recv()接收进程0发送的数组。在Windows系统下安装mpi4py之前,需要先安装Microsoft Visual C++ 14.0。在Linux系统下安装mpi4py之前,需要先安装Python。在Linux系统下安装mpi4py之前,需要先安装MPI。在Windows系统下安装mpi4py之前,需要先安装Python。在Windows系统下安装mpi4py之前,需要先下载并安装MS-MPI软件包。

m0_47037246的博客 3007

windows安装MPI及python安装mpi4py

· MPI(Message Passing Interface ),信息传递接口,是实现进程通讯的库,大多数时候是用于并行计算的算法设计。关于MPI的介绍可见:https://www.jianshu.com/p/ee595dd0354a 1.下载 到官网下载 2.安装,将msmpisetup.exe放到想要的硬盘下,进行安装(记得要改变安装路径) 3.添加环境变量,将bin目录添加到环境变量path中 4.测试,在命令窗口中输入mpiexec ,出现如下帮助信息,则证明成功安装MS-MPI。 5

wavehaha的博客 7369

在Python中安装mpi4py的解决方案

在本文中,将介绍如何在Python中安装mpi4py库,并提供相应的源代码示例。在Python中安装mpi4py库需要先安装MPI库,然后使用pip命令安装mpi4py。安装完成后,可以通过运行简单的MPI程序来验证安装是否成功。在安装mpi4py之前,需要先安装MPI库。安装完成后,可以通过运行一个简单的MPI程序来验证安装是否成功。安装完MPI库之后,可以使用pip命令来安装mpi4py库。这表明mpi4py库已成功安装,并且可以在Python中使用MPI进行并行计算。步骤2:安装mpi4py库。

CyberNerdX的博客 1930

安装mpi4py与dlio_profiler_py的总结

mpi4py是一个Python库,它提供了与MPI(Message Passing Interface)兼容的接口,使得Python程序能够利用MPI实现并行计算。mpi4py 的核心是基于MPI标准的C/C++实现,它能够在高性能计算环境下进行高效的并行处理。

fakerth的博客 1653

MPI程序实例:mpi4py使用

主要介绍在Linux系统中mpi4py的安装和使用,对常用接口使用8个案例进行介绍

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 1510

使用mpi4py并行技术加速Python中的粒子群优化算法:从理论到实践

粒子群优化算法是一种进化计算技术,其灵感来源于鸟群或鱼群的社会行为,如群居、迁徙和觅食。简单来说,粒子群优化算法通过模拟这些生物的行为来找到最优解。在PSO中,每个“粒子”代表了问题空间中的一个潜在解。这些粒子会根据它们自己的经验和其他粒子的经验来更新它们的位置。目标是在给定的迭代次数内找到一个接近最优解的位置。mpi4py是一个Python库,它为Message Passing Interface (MPI)提供了Pythonic的接口。MPI是一个标准的、通用的并行计算模型,主要用于分布式内存系统。

qq_38334677的博客 1289

关于mpi4py库安装的相关问题

mpi4py安装存在的问题

weixin_44144594的博客 1111

MPI4Py并行计算库及其依赖安装指南

MPI4Py是Python编程语言的一个库,它封装了MPI(Message Passing Interface)标准,用于支持高性能的并行计算。MPI是并行计算领域的一个成熟的通信协议,它定义了一组用于进程间通信的函数,允许程序员构建可扩展的并行程序。在MPI(Message Passing Interface)中,点对点通信是构建并行计算应用的基础。它允许一个进程(发送者)直接向另一个进程(接收者)发送消息。在MPI4Py中,这种通信模式是通过send()和recv()方法实现的。

weixin_42515340的博客 1391

python mpi多线程_Python使用MPI实现分布式计算(mpi4py)

并行计算多年以前,计算机的主频还是MHz级别制程还是微米级别的时候,CPU每次更新换代都会带来巨大提升,可以通过提升电子工艺的方式以及提升主频的方式提高计算速度。单机计算能力在那个时代大刀阔斧向前走。科学计算的规模也随着计算能力的提升逐渐升级。计算能力的提升也带来了很多学科的兴起和繁荣,比如计算物理。直到主频到了GHz量级,传统工艺已经触碰到经典物理的天花板,再提高主频缩小原件的话就会出现无法预料...

weixin_39603823的博客 922

【低空经济】多源异构数据融合的低空智能感知系统设计与实现

本文探讨了低空智能感知系统在多源异构数据融合中的设计与实现,重点解决无人机等低空飞行器的安全监测问题。通过雷达、光学和红外传感器的数据融合,系统识别准确率提升至92%,并实现120ms的低延迟处理。文章详细介绍了时空对齐、特征级融合和动态权重自适应等关键技术,为低空经济发展提供可靠技术支持。

weixin_29065659的博客 342

Ollama本地大模型部署指南:从核心原理到实战避坑

大语言模型(LLM)作为人工智能领域的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在文本生成、代码编写和对话系统等场景展现出巨大价值。随着开源模型的普及,本地部署成为关注焦点,它解决了数据隐私和定制化需求,但面临环境配置和资源管理的挑战。Ollama作为开源工具,通过封装模型格式和统一API,简化了本地部署流程,支持GPU加速和性能调优,让开发者能够快速集成到IDE和自动化脚本中,实现高效的本地AI应用部署。

weixin_30915951的博客 452

mpi4py造轮子失败

apt install libopenmpi-dev pip install mpi4py 先安装一下libopenmpi-dev

qq_41111734的博客 156

保姆级教程:Halcon 3D点云匹配与差异分析避坑指南(从采样到可视化)

本文提供了一份详细的Halcon 3D点云匹配与差异分析实战指南,涵盖从模型准备到可视化的全流程。重点解析了STL文件读取单位误区、点云采样密度优化、表面模型创建技巧以及差异分析的专业手法,帮助用户避开常见陷阱,提升工业检测效率与精度。

weixin_33728268的博客 402

mpi4py-examples 项目常见问题解决方案

mpi4py-examples 项目常见问题解决方案 项目基础介绍 mpi4py-examples 是一个基于 MPI(Message Passing Interface)协议的 Python 示例项目。该项目由 jbornschein 开发,主要用于展示如何使用 mpi4py 库进行并行计算。mpi4py 是一个 Python 库,它提供了对 MPI 的 Python 绑定,使得 Python ...

gitblog_01048的博客 568

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 196

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频)

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频链接)

weixin_46713695的博客 1万+

Python多核编程mpi4py实践及并行计算-环境搭建篇

1、安装python,这个没什好说的,直接装就行 2、做并行计算、数据挖掘,机器学习等一般都要用的numpy,这个在Windows版本上安装有点问题,安装比较麻烦,建议在linux上搭建环境 3、安装openmpi,(不太好装)这个在网上目前还没有比较好的快捷安装方法,一般是下载源码,编译再安装,今天不小心发现有个类似的包可以装,于是,我就试了一下,结果很轻松的就安装上了 4、安装...

angle6872014的博客 665

YOLOv8 交通管理三大核心功能 —— 二、违章检测系统 详细解释及代码完整示例

YOLOv8交通违章检测系统

u010117029的博客 502

ubuntu下无配置安装openmpi和mpi4py

1. 安装openmpi $sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc 2. python安装mpi4py $sudo python -m pip install mpi4py 3.在python测试 >>>import mpi4py 无报错则安装成功

u013395544的专栏 7368

高效计算斐波那契数列的C++实现及源码

斐波那契数列是一个非常经典的数学问题,通常递归方式计算斐波那契数列的时候会有很大的时间复杂度问题。首先,我们需要了解斐波那契数列的定义:斐波那契数列是指前两个数都为1,从第三个开始每个数都等于它前面两个数之和。因此,斐波那契数列的前几项为:1、1、2、3、5、8、13、21……在这个代码中,我们首先判断n是否特殊情况(即n等于0、1、2),然后通过循环计算得出对应的斐波那契数列值。通过这个例子,我们可以发现使用C++语言实现高效斐波那契数列计算的代码简单、易懂,并且时间复杂度相比递归方式有了很大的提升。

TechInk的博客 547

swl安装无法与服务器建立链接,如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 2076

mpi4py如何指定服务器进入conda环境运行程序并返回结果

请注意,这个示例假设你已经在conda环境中安装了所有必要的依赖,并且你的环境路径已经添加到了PYTHONPATH中。如果你的环境需要特殊的库或者是为了支持MPI而重新编译Python,那么你可能需要在conda环境中单独设置MPI支持。通常,你需要在启动MPI作业之前手动激活conda环境。然后,在你的脚本中,你需要手动激活conda环境,并设置适当的PYTHONPATH,以便MPI进程能够找到并导入所需的模块。首先,确保你的conda环境已经创建并安装了所有必要的依赖,包括mpi4py。

计算机辅助工程 674

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mpi4py实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 1.概述 MPI(Message Passing Interface),消息传递接口,是一个标准化和轻便的能够运行在各种各样并行计算机上的消息传递系统。消息传递指的是并行执行的各个进程拥有自己独立的堆栈和代码段,作为互不相关的多个程序独立执行,进程之间的信息交互完全通过显示地调用通信函数来完成。 mpi4py是构建在MPI之上的Python非官...

weixin_34315485的博客 427

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

gmx_MMPBSA 安装与使用中的常见问题解析

gmx_MMPBSA 安装与使用中的常见问题解析 gmx_MMPBSA 是一款基于分子力学泊松-玻尔兹曼表面积(MM-PBSA)方法的自由能计算工具,广泛应用于分子动力学模拟后的结合自由能分析。在实际使用过程中,用户可能会遇到各种安装和计算问题。本文将详细分析这些常见问题及其解决方案。 安装问题分析 Python版本兼容性问题 gmx_MMPBSA 目前仅支持到 Python 3.11.8 版本。...

gitblog_07278的博客 613

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Python 实现循环的最快方式(for、while 等速度对比)
下一篇: 使用哪些工具,可以提升 Python 项目质量
Python_xiaowu
博客等级 码龄5年 3096粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值