UTM+Ubuntu配置MPICH并行环境
以下是我的个人信息,由于我不怎么登陆论坛,有什么问题可以给我写邮件:
编辑人:侯明辉
邮件:13204091197@163.com
期待能帮你解决问题
1. 安装UTM for Mac
直接打开UTM.dmg安装即可

2. 下载Ubuntu20.04 (5.15内核)
- 下载我发送的:ubuntu-20.04.5-live-server-arm64.iso
- 注意:只能下载live-server,不能用desktop
- 后续桌面要在虚拟机内完成安装
- 把这个镜像放在一个固定的文件夹内,给即将需要创建的虚拟机也设置一个固定的环境
3. 在UTM内安装虚拟机
所有操作按照这篇文档中的完成:https://blog.csdn.net/luzhengyang2077/article/details/129910484
只需要看第四步开始:Ubuntu安装就行,下面就是一大堆图片,看图片操作就行
注意:启动映像类型选择:从iso映像启动

这个一定要下载,默认install OpenSSH server是不开启的
MPICH---每个电脑都需要配置部分:除主机名设置区别
通用设置
我的便携式WiFi名称:E8372-826_5AEF,Gateway4: 192.168.x.x,具体设置和所用路由器有关
需要确保,网络没有AP隔离机制和MAC过滤机制
检查多个宿主机之间是否可以ping通,ip地址都为192.168.0.xxx
Step 1: 更改虚拟机网络设置为桥接,接口为WiFi

Step 2: 更改netplan网络配置文件
由于Mac虚拟机默认生成的netplan配置文件,配置网卡enp0si开启dhcp4: true。无法通过dhclient enp0s1获取到准确的ip,设置静态ip是可行的:
sudo vim /etc/netplan/xxx xxx:是yaml后缀的文件名称
将内容更改:
yaml
network:
version: 2
renderer: networkd
ethernets:
enp0s1:
dhcp4: false
addresses: [192.168.0.105/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8]
应用:sudo netplan apply
检查多个虚拟机之间是否可以ping通,node1目前设置为192.168.0.110
Step 3: 更换镜像源为阿里云镜像
-
备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak -
删除原本内容:
sudo rm /etc/apt/sources.list -
编辑:
sudo vim /etc/apt/sources.list-
i 进行编辑模式
-
粘贴内容
cmddeb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse -
Esc后输入:wq保存并退出
-
-
更新:
sudo apt update
Step 4: 切换管理员身份
sudo su
Step 5: 更改虚拟机主机名
更改虚拟机主机名为node1, node2, node3。方便在后续操作中进行编码
vim /etc/hostname:更改命名------最好客户端是node1,服务端为node2-3- 生效:
systemctl restart systemd-hostnamed - 重新打开terminal就能看见主机名更改(运行
hostname也可以确认)
Step 6: 在hosts文件确认主机名和IP对应关系
-
vim /etc/hosts -
插入:
cmd192.168.0.110 node1 192.168.0.xxx node2 192.168.0.xxx node3 -
测试:
ping node2可以看到成功
Step 7: 配置虚拟机SSH服务
-
在
/etc/ssh/sshd-config文件下设置cmdPermintRootLogin yes PasswordAuthentication yes -
生效:
systemctl restart ssh -
进入根目录下的ssh目录:
-
在root目录下执行:
cd ~/.ssh(因为ssh目录隐藏,无法通过GUI界面进入) -
在ssh目录下:创建公、私密钥:
ssh-keygen -t rsa;会生成三个文件id_rsa, id_rsa.pub, authorized_keys。注意:SSH需要免密登陆,不设置密码,所以所有Enter处全部留空->直接回车 -
拷贝至其他虚拟机:以node1为例
cmdssh-copy-id root@node2 ssh-copy-id root@node3- 其中需要输入密码:由于Ubuntu默认密码为空,需要
passwd root
- 其中需要输入密码:由于Ubuntu默认密码为空,需要
-
输入密码时,由于Linux特性,不显示密码
-
-
由于ssh服务是单向的,所以所有电脑之间都需要设置:
cmdnode1 -> node2 node1 -> node3 node2 -> node1 node2 -> node3 node3 -> node1 node3 -> node2 -
在所有服务设置完成后再次编辑
/etc/ssh/sshd-config文件,设置:cmdPasswordAuthentication no PubkeyAuthentication yes -
使用ssh命令测试虚拟机之间能否采用密钥无障碍登陆:
- 登陆:
ssh node2 - 退出:
exit
- 登陆:
服务端和客户端分别配置部分
服务端:
Step 1: 下载rpcbind和nfs服务
每行分开运行
cmd
apt update && apt install -y rpcbind
apt update && apt install nfs-kernel-server
Step 2: 配置nfs服务的共享硬盘
-
创建共享文件夹:
mkdir /usr/cluster -
在
/etc/exports文件中增加如下几行cmd/usr/cluster 192.168.0.xxx(rw) # xxx代表node2的ip /usr/cluster 192.168.0.xxx(rw) # xxx代表node3的ip
客户端:
Step 1: 下载rpcbind和nfs服务
每行分开运行
cmd
apt update && apt install -y rpcbind
apt update && apt install nfs-common
Step 2: 启动rpcbind服务
cmd
systemctl start rpcbind
客户端无需启动nfs服务
Step 3: 建立共享目录
root权限下:建立与服务器相同的共享目录: mkdir /usr/cluster
服务端:请确保上述客户端服务完成启动
Step 1: 启动rpcbind和nfs服务
每行分开运行
cmd
systemctl start rpcbind
systemctl start nfs-server
如果nfs-server启动失败,查看日志错误:journalctl -xeu nfs-server.service
到此为止:已向其他两个节点提供/usr/cluster目录的文件共享
Step 2: 检查共享文件
查看: cd /usr/cluster
客户端:所有子节点都需完成
Step 1: 查看服务器已有的共享目录
showmount -e 192.168.0.105
Step 2: 挂载共享目录
mount -t nfs 192.168.0.105:/usr/cluster /usr/cluster
每个电脑都需要配置部分
Step 1: 将宿主机上的mpich-3.4.3.tar.gz上传至虚拟机
将文件上传至root目录下即可
-
在宿主机打开terminal
-
输入
scp [主机文件路径] root@[虚拟机IP]:[虚拟机目标路径]-
示例:
scp /Users/houminghui/Downloads/mpich-3.4.3.tar.gz root@192.169.0.105:/root -
由于在同一个网络下,所以一个宿主机可以给三个node进行scp文件传输,即:
cmd主机 -> node1 主机 -> node2 主机 -> node3
-
Step 2: 解压文件包
在root目录下(~):
-
tar xzf ./mpich-3.4.3.tar.gz -
ls:新增目录~/mpich-3.4.3
Step 3: 安装C语言编译工具链
sudo apt install -y build-essential
Step 4:安装MPICH
-
在新增目录
mpich-3.4.3下运行:(每行分开运行)cmd./configure -with-device=ch4:ofi -disable-fortran make # 需要等很长时间 make install -
检查安装:
mpicc -v显示:

Step 5: 测试MPI程序
在新增目录mpich-3.4.3下运行:mpirun -np 2 -host node1, node2 ./examples/cpi 显示:

成功!