×

使用虚拟机Ubuntu搭建多节点MPI集群-MPI安装、SSH免密互联、样例程序

冰原狼 冰原狼 发表于2024-10-07 14:34:45 浏览497 评论1

1人参与发表评论

一、环境介绍

      VMWare:16.1.2 build-17966106

        Ubuntu:ubuntu-22.04.4-desktop-amd64

        MPICH:4.0


二、MPI安装

    2.1虚拟机安装

        此处请参考网上资料。值得注意的是,需要将每台主机的用户名设置统一,否则会产生不必要的麻烦。推荐安装一台完成后,直接克隆剩余节点机器。笔者本次使用master作为主节点(程序执行),node1、node2作为子节点(辅助)。

    2.2别名配置

        分别查看每台节点本地ip

ifconfig

         分别更改别名

sudo vim /etc/hosts

图片1.png

2.3 SSH安装

分别是安装、启动、开机自启

sudo apt install ssh
sudo systemctl start ssh
sudo systemctl enable ssh

image.png


2.4 SSH免密配置

生成私钥和公钥(连按三次回车)

ssh-keygen -t rsa

image.png


将公钥发送给指定节点主机

方法一:

ssh-copy-id username@host

方法二:

在每台节点机器上执行,也就是将本地的公钥文件id_rsa传输给node1,并存储在/.ssh/以node2_id_rsa命名。

若有多台机器,请给其他机器都发送一次。

scp ~/.ssh/id_rsa.pub username@node1:~/.ssh/node2_id_rsa.pub

        例如:

        master主机给node1发送:

        scp ~/.ssh/id_rsa.pub byl@node1:~/.ssh/master_id_rsa.pub

        master主机给node2发送:

        scp ~/.ssh/id_rsa.pub byl@node2:~/.ssh/master_id_rsa.pub


发送完成后,在node1、node2执行

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

 

这样,node1、node2就可以免密连接master主机。同理,node1、node2操作一样。

image.png


此时,理论上在naster命令行执行

ssh node1

能够免密连接

image.png

注:此处建议每台机器都相互连接一次,避免不必要的麻烦。


2.5 MPI安装

sudo apt-get update
sudo apt-get upgrate
sudo apt install mpich


2.6 MPI安装验证

which mpirun
mpirun --version


三、测试

样例程序hello.cpp

#include <mpi.h> 
#include <stdio.h> 
int main(int argc, char** argv) { 
    MPI_Init(NULL, NULL); 
    int world_size; 
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    int world_rank; 
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 
    char processor_name[MPI_MAX_PROCESSOR_NAME]; 
    int name_len; 
    MPI_Get_processor_name(processor_name, &name_len); 
    printf("Hello world from processor %s, rank %d out of %d processors\n", processor_name, world_rank, world_size); 
    MPI_Finalize(); 
}

样例配置文件conf:master运行34线程,node1、node2运行33个

master:34
node1:33
node2:33


将文件放在desktop上,编译

mpic++ hello.cpp -o hello


单机测试,运行十个线程

mpirun -n 10 ./hello

image.png


集群测试:

利用xshell和xftp传输文件到各个节点,注意文件路径一致。

image.png


master主机执行:100线程,使用conf配置文件,运行hello程序

mpirun -n 100 -f conf ./hello


完毕。



常见问题:

1、为什么ssh node1连接失败

答:请注意/etc/hosts文件是否更改成功,ip地址是否对应正确,目标主机ssh是否开启


2、为什么单机能运行,但是集群无法运行

答:请给节点文件权限,chmod 777 hello


3、HYDU_sock_connect (utils/sock/sock.c:141): unable to connect from "byl-virtual-machine" to "byl-virtual-machine" (Connection refused)

答:修改主机名为对应的节点名称即可。将/etc/hostname和/etc/hosts修改。

image.pngimage.png


https://blog.bingyuanlang.cn/

访客
牛逼! 牛逼!2024-10-07 23:26:02 · 回复 牛逼!牛逼!牛逼!牛逼!牛逼!牛逼!牛逼!牛逼!牛逼!牛逼!