创建 MPI 集群
在本文中,我们将讨论如何创建 MPI 集群。
要在本地环境中设置集群,应在每个系统中预安装相同版本的OpenMPI 。
先决条件
- 操作系统:操作系统为 Ubuntu 18.04。
- MPI:我们可以使用 OpenMPI 或 MPICH。本教程遵循 OpenMPI(版本 2.1.1)。列出 Open MPI 可用版本
apt list -a openmpi-bin
sudo apt-get install openmpi-bin //To install open-mpi
创建 MPI 集群的步骤
第 1 步:配置主机文件
我们将在计算机之间进行通信,我们不想经常输入 IP 地址。相反,我们可以为我们希望与之通信的网络中的各个节点命名。设备操作系统使用 hosts 文件将主机名映射到 IP 地址。
master中的主机文件示例。
sudo nano /etc/hosts
在该文件中添加这些主机 IP 和工作程序 IP:
#MPI CLUSTERS
172.20.36.120 manager
172.20.36.153 worker1
172.20.36.143 worker2
172.20.36.116 worker3
对于工人(从)节点
worker2 的主机文件示例
#MPI CLUSTER SETUP
172.20.36.120 manager
172.20.36.143 worker2
第 2 步:创建新用户
我们可以使用现有用户操作集群。最好创建一个新用户以使事情变得更简单。在所有机器上创建具有相同用户名的新用户帐户以保持简单。
添加新用户:
sudo adduser mpiuser
使 mpiuser 成为 sudoer :
sudo usermod -aG sudo mpiuser
第 3 步:设置 SSH
机器将通过 SSH 通过网络进行通信,并通过 NFS 共享数据。对管理器和工作程序节点执行以下过程。
在系统中安装 ssh。
sudo apt-get install openssh-server
通过以下方式登录新创建的用户
su - mpiuser
导航到 ~/.ssh 文件夹和
ssh-keygen -t rsa
cd .ssh/
cat id_rsa.pub >> authorized_keys
ssh-copy-id worker1
例如:
mpiuser@tele-h81m-s138:~/.ssh$ ssh-copy-id worker2
现在您无需输入密码即可连接到工作节点
ssh worker2
在工作节点中使用
ssh-copy-id manager
第 4 步:设置 NFS
我们在管理器中通过 NFS 共享一个目录,worker 挂载该目录以交换数据。
主节点的 NFS 服务器:
通过以下方式安装所需的软件包
$ sudo apt-get install nfs-kernel-server
我们需要创建一个将在网络上共享的文件夹。在我们的例子中,我们使用了“云”。要导出云目录,我们需要在 /etc/exports 中创建一个条目
sudo nano /etc/exports
添加
/home/mpiuser/cloud *(rw,sync,no_root_squash,no_subtree_check)
代替 *,我们可以明确给出我们想要共享此文件夹的 IP 地址,或者我们可以使用 *.
例如:
/home/mpiuser/cloud 172.20.36.121(rw,sync,no_root_squash,no_subtree_check)
输入后,运行以下命令。
$ exportfs -a
每次对 /etc/exports 进行任何更改时,运行上述命令。
如果上述语句不起作用,请使用 sudo exportfs -a。
如果需要,重新启动 NFS 服务器
$ sudo service nfs-kernel-server restart
> 客户端节点的 NFS-worker
安装所需的包
$ sudo apt-get install nfs-common
在worker的机器上创建一个同名目录——“cloud”
$ mkdir cloud
现在,像这样挂载共享目录
$ sudo mount -t nfs manager:/home/mpiuser/cloud ~/cloud
要检查已安装的目录,
$ df -h
要使挂载永久化,这样您就不必在每次重新启动系统时手动挂载共享目录,您可以在文件系统表中创建一个条目 - 即 /etc/fstab 文件,如下所示:
$ nano /etc/fstab
添加
#MPI CLUSTER SETUP
manager:/home/mpiuser/cloud /home/mpiuser/cloud nfs
第 5 步:运行 MPI 程序
导航到 NFS 共享目录(在我们的例子中是“云”)并在那里创建文件(或者我们可以只粘贴输出文件)。要编译代码,假设它的名称是 mpi_hello.c,我们必须按照下面给出的方式编译它,以生成可执行的 mpi_hello。
$ mpicc -o mpi_hello mpi_hello.c
为了只在主机上运行它,我们做
$ mpirun -np 2 ./mpi_helloBsend
np – 进程数 = 2
在集群中运行代码
$ mpirun -hostfile my_host ./mpi_hello
在这里, my_host文件确定要运行的 IP 地址和进程数。
示例主机文件:
manager slots=4 max_slots=40
worker1 slots=4 max_slots=40
worker2 max_slots=40
worker3 slots=4 max_slots=40
或者,
$ mpirun -np 5 -hosts worker,localhost ./mpi_hello
注意:主机名也可以替换为 IP 地址。