使用华为云平台搭建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的更多功能。
- 点赞
- 收藏
- 关注作者
评论(0)