云计算与大数据——MPI集群配置

news2024/11/17 13:44:31

什么是MPI集群?

MPI(消息传递接口)是一种用于编写并行程序的标准,它允许在多个计算节点上进行通信和协作。MPI集群配置是指在一个或多个计算节点上设置MPI环境以实现并行计算。

MPI集群配置的步骤:

硬件选型:选择适合你需求的硬件设备,包括主节点和计算节点。主节点负责协调计算节点之间的通信和任务分配,而计算节点执行实际的计算任务。

操作系统安装:为每个节点安装操作系统,常见的选择包括Linux、Windows服务器等。确保所有节点都能够相互访问,并具备网络连接功能。

MPI软件安装:选择一种MPI实现,如OpenMPI、MPICH等,并根据操作系统的要求在每个节点上安装相应的MPI软件。MPI库提供了一组用于并行计算的函数和工具,以便在节点之间进行通信和同步。

配置主节点:编辑主节点的MPI配置文件,通常是mpiexec或mpirun的配置文件,以指定运行MPI程序的方式。这可以包括指定计算节点的数量、启动脚本、进程分配等选项。

配置计算节点:对于计算节点,编辑其MPI配置文件以指定主节点的位置和其他必要的信息。此外,确保计算节点能够访问主节点和其他计算节点,以便进行通信。

测试MPI集群:编写一个简单的MPI程序,并在MPI集群上进行测试。确保MPI程序能够正确地在多个节点上并行执行,并且能够通过消息传递实现节点之间的数据交换和同步。

扩展集群规模(可选):如果需要更多的计算能力,可以添加更多的计算节点到集群中。确保新的节点也安装了相应的MPI软件,并按照步骤4和5配置好。

下面我们来进行一个简单的MPI集群配置,希望对各位学习云计算和相关MPI集群知识有所帮助。

一、 用VMware Workstation Pro配置虚拟机并打开

这里我们选择用普通用户登陆
在这里插入图片描述

1. 保证网络畅通,设置各节点的固定IP,并重新启动网络服务。

配置master网络服务:

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述
成功配置网络
ping www.baidu.com 成功!

在这里插入图片描述
配置host1网络服务:

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述

成功配置网络
ping www.baidu.com 成功!

在这里插入图片描述
配置host2网络服务:

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述
成功配置网络
ping www.baidu.com 成功!
在这里插入图片描述
2. 配置两台机器的hosts文件:主机名分别为master、host1和host2

命令:

vim /etc/hosts

在这里插入图片描述
命令:

vim /etc/hosts

在这里插入图片描述
修改master主机名:

vim /etc/hosname

在这里插入图片描述
命令:vim /etc/hosts
在这里插入图片描述
修改host1主机名:

vim /etc/hosname

在这里插入图片描述
命令:

vim /etc/hosts

在这里插入图片描述
修改host2主机名:

vim /etc/hosname

在这里插入图片描述
在这里插入图片描述

2. SSH免密登陆

ssh-keygen –t rsa 一路回车
在master,host1,host2分别
2.将公钥追加到authorized_keys文件中,命令:

  cat  ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys

在master,host1,host2分别
所有节点都要设置
3.将公钥拷贝到其它机器
(1)master

 ssh-copy-id -i  ~/.ssh/id_rsa.pub host1
ssh-copy-id  -i  ~/.ssh/id_rsa.pub host2

在这里插入图片描述

重启ssh服务:

sudo systemctl restart sshd

在这里插入图片描述
master成功免密登陆host1:

ssh host1

在这里插入图片描述
(2)host1

ssh-copy-id  -i  ~/.ssh/id_rsa.pub master
ssh-copy-id  -i  ~/.ssh/id_rsa.pub host2

在这里插入图片描述
重启ssh服务:

sudo systemctl restart sshd

在这里插入图片描述
host1成功免密登陆host2:

ssh host2

在这里插入图片描述
(3)host2

ssh-copy-id  -i  ~/.ssh/id_rsa.pub master
ssh-copy-id  -i  ~/.ssh/id_rsa.pub host1

在这里插入图片描述

重启ssh服务:

sudo systemctl restart sshd

在这里插入图片描述
host2成功免密登陆host1:

 ssh host1

在这里插入图片描述

CentOS 7在安装时自动安装了ssh软件包,并配置了SSH服务。
三台机器ssh服务状态:

systemctl status sshd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意,ssh免密登陆是用户对用户式的,所以在操作中要保证主节点终端和子节点的终端是对应的。
1)关闭各节点防火墙和Selinux
关闭:sudo systemctl stop firewalld
开机禁用:sudo systemctl disable firewalld
关闭Selinux:sudo setenforce 0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)服务端(master,建议取第一台主机)
(1)sudo yum -y install nfs-utils rpcbind #安装软件
(2)mkdir -p /opt/modules/mpi_share #创建共享目录
(3)chmod 777 /opt/modules/mpi_share -R #授予权限
在这里插入图片描述
(4)sudo vi /etc/exports #修改配置写入:

/opt/modules/mpi_share 192.168.95.25(rw,sync,no_root_squash) /opt/modules/mpi_share 192.168.95.26(rw,sync,no_root_squash)

在这里插入图片描述

192.168.95.25是子节点的地址,也可以是主机名,权限选项中的rw表示允许读写,视自己主机具体IP地址输入;ro为只读;sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限。

sudo exportfs -rv

在这里插入图片描述
(5)sudo systemctl start rpcbind

sudo systemctl start nfs #启动nfs,或者设置为开机启动

在这里插入图片描述(6)sudo systemctl enable rpcbind

sudo systemctl enable nfs
showmount -e #查看NFS服务器端的共享目录

在这里插入图片描述
3)客户端(host1)
(1)sudo yum -y install nfs-utils rpcbind
(2)mkdir -p /opt/modules/mpi_share #将各个节点的共享目录位置和名字设置成一样的
(3)sudo systemctl start rpcbind
sudo systemctl start nfs #同样可以设置开机启动
(4)sudo systemctl enable rpcbind
(5)sudo mount -t nfs 192.168.95.20:/opt/modules/mpi_share /opt/modules/mpi_share #将服务器端共享目录挂载到本地文件夹
(6)或者永久挂载(可选)
vim /etc/fstab
添加192.168.95.20:/home/mpi_share /home/mpi_share nfs rw 0 0
在这里插入图片描述
4)客户端(host2)
(1)sudo yum -y install nfs-utils rpcbind
(2)mkdir -p /opt/modules/mpi_share #将各个节点的共享目录位置和名字设置成一样的
(3)sudo systemctl start rpcbind
sudo systemctl start nfs #同样可以设置开机启动
(4)sudo systemctl enable rpcbind
(5)sudo mount -t nfs 192.168.95.20:/opt/modules/mpi_share /opt/modules/mpi_share #将服务器端共享目录挂载到本地文件夹
(6)或者永久挂载(可选)
vim /etc/fstab
添加192.168.95.20:/home/mpi_share /home/mpi_share nfs rw 0 0
在这里插入图片描述
5. 安装配置mpich
1)安装编译器
yum install gcc gcc-c++ gcc-fortran kernel-devel -y # https://blog.csdn.net/wangzhouf/article/details/108222704
(yum install gcc g++ #mpich默认的编译器是gcc,g++和gfortran,但是yum命令找不到gfortran的安装包
#可以自行查找安装gfortran编译器的方法 作者:风干橘子皮- https://www.bilibili.com/read/cv15215061 出处:bilibili)
在这里插入图片描述
2)下载并安装mpi安装包
(1)创建目录并下载包

mkdir -p /opt/softwares
cd softwares
wget http://www.mpich.org/static/downloads/3.4.1/mpich-3.4.1.tar.gz

在这里插入图片描述
(2)解压

tar -zxvf mpich-3.4.1.tar.gz

在这里插入图片描述
(3)新建安装目录

mkdir -p /opt/modules/mpich-install

在这里插入图片描述
(4)进入下载目录并编译安装

cd /opt/softwares/mpich-3.4.1
./configure --disable-fortran --prefix=/opt/modules/mpich-install --with-device=ch4:ofi 2>&1 | tee c.txt

或:
./configure --disable-fortran //作者:风干橘子皮- https://www.bilibili.com/read/cv15215061 出处:bilibili
在这里插入图片描述

make

在这里插入图片描述

make install

在这里插入图片描述
3)配置环境
(1)

vim ~/.bashrc
export MPICH=/opt/modules/mpich-install
export PATH=$MPICH/bin:$PATH

在这里插入图片描述
在这里插入图片描述
(2)令环境变量生效

source ~/.bashrc

在这里插入图片描述
4)检查安装情况

mpirun -version

在这里插入图片描述
6.在每台主机上编译C程序
1)将C程序代码helloWorld.c上传到 每台主机的/opt/modules/mpi_share目录
2)cd /opt/modules/mpi_share`
3)先编写一个helloWorld.c和一个helloWorld2.c:
在这里插入图片描述

mpicc -o helloWorld helloWorld.c

在这里插入图片描述
在编写另一个helloWorld2.c:

#include "mpi.h" 
#include <stdio.h> 
#include <math.h> 
void main(argc,argv) 
int argc;
char *argv[]; 
{
  int myid, numprocs; 
  int namelen;
  char processor_name[MPI_MAX_PROCESSOR_NAME]; 
  MPI_Init(&argc,&argv);
  MPI_Comm_rank(MPI_COMM_WORLD,&myid); 
  MPI_Comm_size(MPI_COMM_WORLD,&numprocs); 
  MPI_Get_processor_name(processor_name,&namelen);
  fprintf(stderr,"Hello World! Process %d of %d on %s\n", myid, numprocs, processor_name);
  MPI_Finalize();
}

在这里插入图片描述
7.在master上运行:

mpirun -n 3 -host master,host1,host2 ./helloWorld

mpirun -n 3 -host master,host1,host2 ./helloWorld2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当我们面对我们主要的矛盾时候,如果我们能够站在更高维度、更高层次去看待问题,我们将会发现新大陆,会有一种忽如一夜春风来,千树万树梨花开的感受,这对我们个人思维层面又一个巨大的提升,但是这个过程需要我们不断学习,不断历练,当达到一定层次的时候,量变就会发生质变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三菱PLC上位机测试

利用三菱的MX Component与三菱PLC进行以太网通信&#xff0c;我们可以用官方的dll编写C#代码&#xff0c;特别简单&#xff0c;最后附上整个源码下载。 1. 安装MX Component&#xff08;必须&#xff09;和GX WORKS3&#xff08;主要是仿真用&#xff0c;实际可以不装&#xf…

空间光通信-调制解调滤波与同步

图文并茂&#xff0c;讲解电磁波传播原理_哔哩哔哩_bilibili 深入浅出空间光通信-3.调制解调滤波与同步_哔哩哔哩_bilibili 傅里叶变换这样学&#xff0c;何愁不会呢&#xff1f;直观理解傅里叶变换_哔哩哔哩_bilibili 第二十三课&#xff1a;声音编辑必看&#xff01;&…

【六袆 - windows】windows计划任务,命令行执行,开启计划任务,关闭计划任务,查询计划任务

windows计划任务 查看 Windows 自动执行的指令取消 Windows 中的计划任务启动执行计划任务 查看 Windows 自动执行的指令 您可以使用以下方法&#xff1a; 使用任务计划程序&#xff1a;任务计划程序是 Windows 内置的工具&#xff0c;可以用于创建、编辑和管理计划任务。您可…

pytest+allure运行出现乱码的解决方法

pytestallure运行出现乱码的解决方法 报错截图&#xff1a; 这是因为没有安装allure运行环境或者没有配置allure的环境变量导致&#xff0c;解决方案&#xff1a; 1.安装allure运行环境 官方下载地址&#xff1a;https://github.com/allure-framework/allure2/releases 百度…

JavaSE - 内部类

目录 final定义常量 1. 内部类 1.1 实例内部类 1.1.1 如何获取实例内部类的对象 1.1.2 实例内部类中不能有静态的成员变量 1.1.3 实例内部类方法中可以直接访问外部类中的任何成员 1&#xff09;在实例内部类方法中访问同名的成员时&#xff0c;优先访问自己的&#xff0…

nacos注册中心+Ribbon负载均衡+完成openfeign的调用

目录 1.注册中心 1.1.nacos注册中心 1.2. 微服务注册和拉取注册中心的内容 2.3.修改订单微服务的代码 3.负载均衡组件 3.1.什么是负载均衡 3.2.什么是Ribbon 3.3.Ribbon 的主要作用 3.4.Ribbon提供的负载均衡策略 4.openfeign完成服务调用 4.1.什么是OpenFeign 4.2…

5.2 Python高阶特性之---切片迭代

一、 切片 一般用于提取指定区间内的内容&#xff0c;常用于&#xff1a;str、list、tuple等类型的的局部变量&#xff0c;如下为具体案例1、 【列表切片】 res_list [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]1&#xff09; 无步长: …

C++——类的六大默认成员构造函数

文章目录 1.默认成员函数思维导图2.构造函数定义特性 2.析构函数定义特性 3.拷贝构造函数定义特性 4.赋值构造函数定义特性 5.重载取地址运算符定义特性 6.重载const取地址运算符定义特性 1.默认成员函数思维导图 2.构造函数 定义 在面向对象编程中&#xff0c;构造函数是一种…

RHCSA——Linux网络、磁盘及软件包管理

ZY目录 Linux操作系统讲解&#xff1a;一、网络管理1、NetworkManager1.1、nmtui界面&#xff1a;1.2、nmcli使用方法&#xff1a; 2、配置网络2.1、网络接口以及网络连接2.2、配置方法&#xff1a;2.3、ping命令&#xff1a;2.4、wget命令 二、磁盘管理2.1、分区得两种格式2.1…

HCIP第五次作业

配置IP地址 r1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.0.0.1 24 [r1-GigabitEthernet0/0/0]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int lo1 [r1-LoopBack1]ip add 10.0.0.1 24 r2 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 12.0.0.2 …

在vs里配置c运行环境

勾选环境包 勾选完安装就好 创建c项目 选择相关配置 设置名称和位置 创建c后缀文件 一新建项 二设置名字 输出hello world 代码段 运行结果

C++ 文档加密与解密运用【Crypto++】库

一、下载Cryptopp 鼠标放到下面网址&#xff0c;点击下载即可 github地址&#xff08;8.7.0版本&#xff09;&#xff1a;https://github.com/weidai11/cryptopp/releases/tag/CRYPTOPP_8_7_0 二 、下载PEM包 pem包官方地址&#xff1a;PEM Pack - Crypto Wiki 三、调用Cry…

深度学习环境安装|PyCharm,Anaconda,PyTorch,CUDA,cuDNN等

本文参考了许多优秀博主的博客&#xff0c;大部分安装步骤可在其他博客中找到&#xff0c;鉴于我本人第一次安装后&#xff0c;时隔半年&#xff0c;我忘记了当时安装的许多细节和版本信息&#xff0c;所以再一次报错时&#xff0c;重装花费了大量时间。因此&#xff0c;我觉得…

单个电源模块带电感,给多个负载用,但是用电电流不一致的直流压降仿真

单个电源模块带电感,给多个负载用,但是用电电流不一致的直流压降仿真 下面介绍单个电源模块带电感,给多个负载用,但是用电电流不一致的直流压降仿真,以下图为例 具体操作步骤如下 同样的设置好VRAM

【Mybits-Plus】拦截器的学习和使用,以及如何实现数据权限

【Mybits-Plus】拦截器的学习和使用目录标题 常规处理数据权限的话Mybits需要对Mybits\Mybits-plus拦截器了解1.基础知识学习2.各种场景--实战案例 常规处理数据权限的话Mybits需要对Mybits\Mybits-plus拦截器了解 1.基础知识学习 (请自行学习如下内容&#xff0c;后续才能根…

C++中随机数的使用总结

随机数 rand() 随机数发生器 #include <stdio.h> #include <unistd.h> #include <iostream> #include <string>using namespace std;int main(int argc, char *argv[]) {cout << "this is main()" << endl;cout << rand…

2023-07-14 monetdb-嵌入mysql-sql层交互-设计-分析

摘要: SQL层的兼容工作,时间紧,任务重,协议多,命令多,功能多,牵扯到数据一致性又万分紧张,需要非常谨慎,当前列了一些下一步的工作的设计分析. 主要是涉及sql层接口的兼容, innodb与monetdb数据的一致性, 查询和写入两个不同侧面的处理. monetdb嵌入mysql分析: 导图版…

C语言中定义和声明的区别

声明(declaration)与定义(definition) 为了使不同的文件都可以访问同一个变量&#xff0c;C会区 分变量的声明和定义。 变量的定义会为这个变量分配存储空间&#xff0c;并且 可能 会为其指定一个初始化的值&#xff0c; 一个变量的定义有且 仅有一处。 定义实际上是一种特殊…

七种最新群智能优化算法(NOA、LSO、SWO、ZOA、EVO、KOA、GRO)求解23个基准测试函数(含参考文献及MATLAB代码)

一、七种算法简介 &#xff08;1&#xff09;星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟星雀的两种行为&#xff0c;即&#xff1a;在夏秋季节收集并储存食物&#xff0c;在春冬季节搜…

路径规划算法:基于浣熊优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于浣熊优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于浣熊优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法浣熊…