使用华为云平台搭建MPI环境———实现多台主机的HelloWorld程序

举报
yd_211114102 发表于 2023/11/19 14:26:54 2023/11/19
【摘要】 前阵子在课上学习了MPI的相关知识,掌握了简单的mpi并行程序的编写,为得到更好的练习,利用华为云平台搭建了一个MPI环境,实现了多台主机的HelloWorld程序,于是写此文章记录下来,以便日后查阅与复习。

使用华为云平台搭建MPI环境———实现多台主机的HelloWorld程序

0. 前言

前阵子在课上学习了MPI的相关知识,掌握了简单的mpi并行程序的编写,为得到更好的练习,利用华为云平台搭建了一个MPI环境,实现了多台主机的HelloWorld程序,于是写此文章记录下来,以便日后查阅与复习。

1. 环境准备

1.1 购买云服务器

1.1.1 登录华为云平台

打开浏览器,输入华为云的域名:https://www.huaweicloud.com,点击右上角登录按钮,输入用户名与密码。

1.1.2 购买弹性云服务器(ECS)

登录成功后,点击左上角“产品”,选择“弹性云服务器(ECS)”,进入ECS产品页面,点击“购买”按钮,进入购买页面。

1.1.3 基础配置

  • 计费模式:按需计费
  • 区域:华北-北京四
  • 可用区:随机分配
  • CPU架构:鲲鹏计算
  • 规格:kc1.large.2
  • 镜像:公共镜像,openEuler 20.03
  • 安全防护:不使用安全防护
  • 系统盘:高IO,40GB
  • 购买量:4

点击下一步:网络配置

1.1.4 网络配置

  • 网络:vpc-default
  • 安全组:default
  • 弹性公网IP:现在购买
  • 线路:静态BGP
  • 公网带宽:按流量计费
  • 带宽大小:100
  • 释放行为:随实例释放

下一步:高级配置

1.1.5 高级配置

  • 云服务器名称:自定义,如ecs-hw
  • 登陆凭证:密码
  • 密码:自定义
  • 云备份:暂不购买

下一步:确认配置

1.1.6 确认配置

确认无误后,勾选“我已阅读并同意《华为镜像免责声明》”,点击确认配置。

1.2 环境配置

1.2.1 下载ssh工具

本地环境为MacOS,使用terminal自带的ssh功能。

1.2.2 登录ECS

创建好ECS后,可以在“控制台->弹性云服务器”中,看到弹性公网IP,使用ssh root@弹性公网IP命令登录ECS。

1.2.3 创建用户

登录ECS后,并不建议使用root用户进行操作,因此需要创建一个新用户,以用户名zhangsan为例,四台机器名为ecs-hw-0001、ecs-hw-0002、ecs-hw-0003、ecs-hw-0004,四台机器的ip为192.168.0.224, 192.168.0.4, 192.168.0.73, 192.168.0.191,以下所有的操作均在ecs-hw-0001该台主机上,环境配置时在每⼀台主机上都需要重复执行(1.2.3需在每台机器上执行)。

每台主机都需要在root账户下建⽴各⼈的账户,命令如下:

adduser zhangsan
passwd zhangsan
# 此处需要输入两次密码,4个主机上密码保持一致
usermod -aG wheel zhangsan

1.2.4 免密配置

以下所有步骤在四台机器上均需要重复执行。

配置四台机器主机名和ip解析:

vim /etc/hosts

注释文件原先本身的信息并添加以下信息(注释的目的是因为会对本实验程序的运行产生报错):

192.168.0.224  ecs-hw-0001
192.168.0.4  ecs-hw-0002
192.168.0.73 ecs-hw-0003
192.168.0.191 ecs-hw-0004

配置gcc环境:

yum install gcc gcc-c++

登录新账户:

su - zhangsan

本地生成密钥:

ssh-keygen -t rsa -b 4096

说明:会让输入信息,保持默认,回车即可。

添加公钥至所有主机:

$ ssh-copy-id zhangsan@ecs-hw-0001 
$ ssh-copy-id zhangsan@ecs-hw-0002 
$ ssh-copy-id zhangsan@ecs-hw-0003 
$ ssh-copy-id zhangsan@ecs-hw-0004

安装依赖包:

sudo yum -y install gcc-gfortran

源码编译安装mpi:

wget http://www.mpich.org/static/downloads/3.3.2/mpich-3.3.2.tar.gz
tar -zxvf mpich-3.3.2.tar.gz
cd mpich-3.3.2
./configure

2.程序运行

2.1 编写程序

2.1.1 创建目录

执行以下命令,创建hello目录存放该程序的所有文件, 并进入hello目录(四台主机都执行):

mkdir /home/zhangsan/hello
cd /home/zhangsan/hello

2.1.2 编写mpi_hello_world.c

执行以下命令,创建示例程序源码mpi_hello_world.c(四台主机都执行):

vim mpi_hello_world.c

代码如下:

#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
	// Initialize the MPI environment. The two arguments to MPI Init are not
	// currently used by MPI implementations, but are there in case future
	// implementations might need the arguments.
	MPI_Init(NULL, NULL);
	// Get the number of processes
	int world_size;
	MPI_Comm_size(MPI_COMM_WORLD, &world_size);
	// Get the rank of the process
	int world_rank;
        MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
	// Get the name of the processor
	char processor_name[MPI_MAX_PROCESSOR_NAME];
	int name_len;
	MPI_Get_processor_name(processor_name, &name_len);
	// Print off a hello world message
	printf("Hello world from processor %s, rank %d out of %d processors\n",
	        processor_name, world_rank, world_size);
	// Finalize the MPI environment. No more MPI calls can be made after this
	MPI_Finalize();
}

2.1.3 创建makefile

执行以下命令,创建makefile文件(四台主机都执行):

vim makefile

代码如下:

EXECS=mpi_hello_world
MPICC?=mpicc
all: ${EXECS}
mpi_hello_world: mpi_hello_world.c
	${MPICC} -o mpi_hello_world mpi_hello_world.c
clean:
	rm -f ${EXECS}

2.2 编译程序

执行以下命令,编译程序(四台主机都执行):

cd /home/zhangsan/hello
make

2.3 建立主机配置文件

执行以下命令,创建主机配置文件(四台主机都执行):

vim /home/zhangsan/hello/config

内容:

ecs-hw-0001:2
ecs-hw-0002:2
ecs-hw-0003:2
ecs-hw-0004:2

2.4 运行监测

执行以下命令,运行监测(只需在ecs-hw-0001上执行):

mpiexec -n 8 -f /home/zhangsan/hello/config /home/zhangsan/hello/mpi_hello_world

运行结果如下:

3. 资源清理

首先登陆华为云平台,进入“控制台”;

3.1 确认当前资源数量

点击左侧“资源管理”,进入“我的资源”页面,查看当前资源数量。

3.2 清理资源

删除顺序必须按照:弹性云服务器、子网、安全组、虚拟私有云。

3.2.1 删除弹性云服务器

回到“控制台”,点击左侧“计算->弹性云服务器”,进入“弹性云服务器”页面,勾选所有名称,点击“更多->删除”,在弹出页面确认释放资源和删除数据盘的选项同时选中,点击“是”确认执行删除操作。

刷新后确认所有弹性云服务器已删除。

3.2.2 删除子网

先通过“控制台/产品管理/虚拟私有云VPC”,进入“虚拟私有云VPC”页面,在左侧“网络控制台”中下拉“虚拟私有云”,点击“子网”,进入“子网”页面,勾选所有名称,点击“删除”。

3.2.3 删除安全组

在“网络控制台”中下拉“访问控制”,点击“安全组”,进入“安全组”页面,勾选所有名称,点击“删除”(这里默认的安全组删不能删除)。

3.2.4 删除虚拟私有云

在“网络控制台”中下拉“虚拟私有云”,点击“我的VPC”,进入“虚拟私有云”页面,勾选所有名称,点击“删除”。

3.3 确认资源已清理

回到“控制台”,点击左侧“资源管理”,进入“我的资源”页面,查看当前资源数量,确认资源已清理。

4. 总结

至此,多台主机的HelloWorld程序已经实现,可以在任意一台主机上执行mpi程序,实现多台主机的并行计算。
经过此次实验,环境已经搭建完成,后续可以在此环境上进行更多的实验,熟悉与探索mpi的更多功能。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。