概述
<p style="font-family:'-apple-system','SF UI Text',Arial,'PingFang SC','Hiragino Sans GB','Microsoft YaHei','WenQuanYi Micro Hei',sans-serif,SimHei,SimSun;background-color:rgb(255,255,255);">【我的笔记】
编辑mpi_config_file(这个文件在后面执行程序时会作为参数包括在命令中): sudo gedit mpi_config_file
因为我主机是8核且每台虚拟机分配了四核,所以在mpi_config_file中输入以下内容并保存:
<code class="language-plain">node1:4
node2:4
<code class="language-python">from mpi4py import MPI
print("hello world'',end = ",")
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
print("my rank is: %d" % rank)
然后我们在命令行通过以下方式运行:
<code class="language-plain">mpiexec -n 5 -f /home/mpi_config_file python hello_mpi.py
或者
<code class="language-plain">mpirun –np 5 python hello_mpi.py
-np5 指定启动5个mpi进程来执行后面的程序。相当于对脚本拷贝了5份,每个进程运行一份,互不干扰。在运行的时候代码里面唯一的不同,就是各自的rank也就是ID不一样。所以这个代码就会打印5个hello world和5个不同的rank值,从0到4.
4. Windows下安装mpi4py
1) 要下一个Microsoft MPI,将其Bin文件夹所在路径添入环境变量path
2) 使用conda install --channel https://conda.anaconda.org/dhirschfeld mpi4py 安装mpi4py
3) 使用mpiexec -n 4 python C:\Users\YourName\Documents\Python\YourMPItest.py 测试一下安装是否成功
<span style="font-weight:700;">在每个节点中安装MPICH,方法同上。建议每个节点中安装路径相同,统一命名(虽然安在不同的位置也可以,只要保证找到执行命令即可,但为了后期开发方便以及赏心悦目的原则,我们还是专业一点好)。
关于SSH免密登录谈谈我的个人理解:因为MPI是分布式内存编程,在后面的开发中涉及节点间信息的传递,往往数据和程序是在一个节点上,所以需要保证执行命令时各节点之间信息的交换。设置SSH免密登录可以免去操作中密码的输入。各节点生成私钥和公钥后需要认证,此时可以保证本机免密登录。将各个子节点的公钥文件发送给主节点,然后分别加入到主节点的认证文件中,此时可以保证主节点对各个子节点的免密登录。最后将认证文件传回到每个子节点,从而保证各个子节点对其他节点之间的免密登录。
<span style="font-weight:700;">建立和挂载NFS共享目录的目的是保证主节点生成的可执行文件和需要的数据其他节点可以访问,这样就可以保证多个节点之间的并行(如果不执行这一步的话,需要将执行文件和需要的数据复制到每个节点的相同位置)。
总结
以上是编程之家为你收集整理的【Python-分布式】MPI集群环境搭建全部内容,希望文章能够帮你解决【Python-分布式】MPI集群环境搭建所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧