MPI 学习-环境搭建及测试DEMO

MPI 学习-环境搭建及测试DEMO

  • 1.网络配置
  • 2.搭建NFS服务器,用于共享数据,使每个节点看到相同的内容
  • 3.基于ubuntu22.04 docker容器,安装依赖(在计算节点上执行)
  • 4.设置免密登录(在每个计算节点的容器里执行)
  • 5.测试一:bash命令
    • A.运行
    • B.输出
  • 6.测试二:简单收发测试
    • A.代码
    • B.编译运行
    • C.输出
  • 7.测试三.MPI_Allreduce
    • A.代码:
    • B.编译运行
    • C.输出
  • 8.参考文档:

本文演示了如何在二台物理机上通过MPI实现多机通信,为了不破坏系统环境,分别在二台物理机上运行ubuntu22.04容器

1.网络配置

IP功能
192.168.1.100NFS服务器
192.168.1.101计算节点0
192.168.1.102计算节点1

2.搭建NFS服务器,用于共享数据,使每个节点看到相同的内容

apt install nfs-kernel-server -y
echo "/mnt/disk/mpi *(rw,sync,no_root_squash,no_subtree_check)" > /etc/exports
service nfs-kernel-server restart

3.基于ubuntu22.04 docker容器,安装依赖(在计算节点上执行)

# 创建容器
mkdir mpi
cd mpi
docker stop mpi
docker rm mpi
docker run -ti --privileged --net=host -v $PWD:/home \-w /home --name mpi  ubuntu:22.04 /bin/bash
docker start mpi
docker exec -ti mpi /bin/bash# 更新apt源
sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
apt update# 安装依赖
apt install gcc g++ vim git wget curl unzip make -y
apt install -y pkg-config	
apt install -y python3.10
apt install -y python3.10-dev 
apt install -y python3-pip
apt install -y libsystemd*
apt install -y libabsl-dev
apt install -y libopencv-dev
apt install -y psmisc
apt install -y openssh-server
apt install -y gdb
apt install -y pciutils
apt install -y nfs-common 
apt install -y openmpi-bin openmpi-doc libopenmpi-dev # 设置ssh端口和密码(为避免跟host sshd冲突,修改了容器里sshd端口)
sed -i 's/^.*PermitRootLogin.*$/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/^.*Port.*$/Port 2223/g' /etc/ssh/sshd_config
export passwd=Hello123 && printf "${passwd}\n${passwd}\n"  | passwd root# 运行sshd服务
cat >/usr/bin/run.sh <<EOF
#!/bin/bash
mkdir  -p /run/sshd
source ~/.bashrc
/usr/sbin/sshd -D
EOF
chmod  777 /usr/bin/run.sh
nohup /usr/bin/run.sh &# 挂载nfs
mkdir ~/cloud
mount -t nfs 192.168.1.100:/mnt/disk/mpi ~/cloud# 编辑计算节点列表
cd ~/cloud
cat > hostfile <<EOF
192.168.1.101
192.168.1.102
EOF

4.设置免密登录(在每个计算节点的容器里执行)

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2223 root@192.168.1.101
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2223 root@192.168.1.102

5.测试一:bash命令

A.运行

cd ~/cloud
mpirun --allow-run-as-root -mca plm_rsh_args "-p 2223" \-np 2 -hostfile hostfile  -pernode \
bash -c 'echo "$OMPI_COMM_WORLD_RANK of $OMPI_COMM_WORLD_SIZE on $(hostname) $(pwd)"'

B.输出

0 of 2 on NODE1 /root/cloud
1 of 2 on NODE2 /root/cloud

6.测试二:简单收发测试

A.代码

#include <mpi.h>
#include <iostream>
#include <stdlib.h>int main(int argc, char *argv[])
{int    size,myid;double start, end;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myid);MPI_Comm_size(MPI_COMM_WORLD, &size);int value=myid+2;printf("current_rank:%d ranks:%d value:%d\n",myid,size,value);MPI_Barrier(MPI_COMM_WORLD);start=MPI_Wtime();for (int i=1; i<size; ++i) {if (myid==0){int temp;MPI_Recv(&temp, 1, MPI_INT, i, i, MPI_COMM_WORLD, MPI_STATUS_IGNORE);//循环接收非rank0的所有的节点数据value+=temp; //在rank0上汇集并累加}else {MPI_Send(&value, 1, MPI_INT, 0, i, MPI_COMM_WORLD); //非rank0负责发送自己的数据到rank0}}MPI_Barrier(MPI_COMM_WORLD); //等待所有操作完成end=MPI_Wtime();if (myid==0){printf("final result:%d time:%0.6f\n",value,end-start);//value为所有值之各}MPI_Finalize();
}

B.编译运行

cd ~/cloud
mpic++ mpi_demo.cc -o mpi_demo
mpirun --allow-run-as-root -mca plm_rsh_args "-p 2223"  \-np 2 -hostfile hostfile ./mpi_demo

C.输出

current_rank:0 ranks:2 value:2
current_rank:1 ranks:2 value:3
final result:5 time:0.000005

7.测试三.MPI_Allreduce

A.代码:

#include <mpi.h>
#include <iostream>
#include <stdlib.h>int main(int argc, char *argv[])
{int    size,myid;double start, end;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myid);MPI_Comm_size(MPI_COMM_WORLD, &size);int count=32;int value=myid+2;int data_array[count]={0};for(int i=0;i<count;i++){data_array[i]=value+i;}printf("current_rank:%d ranks:%d value:%d\n",myid,size,value);MPI_Barrier(MPI_COMM_WORLD);int recv_data_array[count]={0};start=MPI_Wtime();//将所有节点data_array向量求和之后拷贝到recv_data_array中,每个rank的recv_data_array是一致的MPI_Allreduce(data_array,recv_data_array,count, MPI_INT, MPI_SUM, MPI_COMM_WORLD );MPI_Barrier(MPI_COMM_WORLD);end=MPI_Wtime();if (myid==0){printf("rank0\n");for(int i=1;i<=count;i++){printf("%08d ",recv_data_array[i-1]);if(i%16==0)printf("\n");}}MPI_Finalize();
}

B.编译运行

mpic++ mpi_all_reduce.cc -o mpi_all_reduce
mpirun --allow-run-as-root -mca plm_rsh_args "-p 2223" \-np 2 -hostfile hostfile ./mpi_all_reduce

C.输出

current_rank:0 ranks:2 value:2
rank0
00000005 00000007 00000009 00000011 00000013 00000015 00000017 00000019
00000021 00000023 00000025 00000027 00000029 00000031 00000033 00000035
00000037 00000039 00000041 00000043 00000045 00000047 00000049 00000051
00000053 00000055 00000057 00000059 00000061 00000063 00000065 00000067
current_rank:1 ranks:2 value:3

8.参考文档:

  • MPI API文档

  • 双机搭建MPI

  • 多机多卡运行nccl-tests和channel获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…

ByteTrack多目标跟踪——yolox_model代码详解

文章目录 yolox_modelYOLOPAFPNYOLOXHeadmodel损失计算初步筛选SimOTA 求解 附&#xff1a;网络结构Cls headCls_convsCls_preds Reg headReg_convsReg_preds Obj headObj_preds yolox_model yolox_model主要包括以下几个文件:yolox.py、yolo_pafpn.py以及yolo_head.py train时…

[AIGC] MySQL存储引擎详解

MySQL 是一种颇受欢迎的开源关系型数据库系统&#xff0c;它的强大功能、灵活性和开放性赢得了用户们的广泛赞誉。在 MySQL 中&#xff0c;有一项特别重要的技术就是存储引擎。在本文中&#xff0c;我们将详细介绍什么是存储引擎&#xff0c;以及MySQL中常见的一些存储引擎。 文…

Android Databinding 使用教程

Android Databinding 使用教程 一、介绍 Android Databinding 是 Android Jetpack 的一部分&#xff0c;它允许你直接在 XML 布局文件中绑定 UI 组件到数据源。通过这种方式&#xff0c;你可以更简洁、更直观地更新 UI&#xff0c;而无需编写大量的 findViewById 和 setText/…

go env 命令详解

文章目录 1.简介2.格式3.示例4.环境变量参考文献 1.简介 go env 用于查看和设置 Go 环境变量。 默认情况下 go env 输出格式为 Shell 脚本格式&#xff08;如 Windows 上是 batch 文件格式&#xff09;。如果指定变量名称&#xff0c;则只输出变量的值。 2.格式 go env [-j…

MySQL 看库大表

MySQL 看库大表 在MySQL中查看数据库中的“大表”&#xff08;即数据量大的表&#xff09;&#xff0c;主要是为了识别可能影响数据库性能的表。有几种方法可以帮助你找出这些表&#xff1a; 通过 INFORMATION_SCHEMA 数据库 MySQL的INFORMATION_SCHEMA数据库包含了数据库的元…

M芯片 mac配置Vulkan环境报错 Xcode

报错&#xff1a; Ignoring file ‘/usr/local/Cellar/glfw/3.3.4/lib/libglfw.3.3.dylib’: found architecture ‘x86_64’, required architecture ‘arm64’ Undefined symbols: Linker command failed with exit code 1 (use -v to see invocation) 解决&#xff1a;重新安…

linux 命令行下的计算器

!!! author 文章目录 1. echo 运算器, 推荐2. bc 计算器, 不推荐3. dc 计算器, 不推荐4. awk计算器. 推荐5. python. 推荐 1. echo 运算器, 推荐 限制是仅能在整数运算时使用 $ echo $((10534)) 70 优点,输入简洁, 支持运算表达式,支持16进制,10进制混合输入. 缺点,不支持浮点…

申请GeoTrust数字证书

GeoTrust介绍&#xff1a; 大家应该都不陌生&#xff0c;作为最老资格的一批国际大牌证书&#xff0c;GeoTrust的品牌效益和使用群体非常庞大。在数字证书领域也是当之无愧的龙头地位&#xff0c;作为Symantec和Digicert的子品牌&#xff0c;证书安全性能方面毋庸置疑&#xf…

IP SSL证书注册流程

使用IP地址申请SSL证书&#xff0c;需要用公网IP地址申请&#xff0c;申请之前确保直接的IP地址可以开放80或者443端口两者选择1个就好&#xff0c;端口不需要一直开放&#xff0c;只要认证的几分钟内开放就可以了&#xff0c;然后IP地址根目录可以上传txt文件。 IP SSL证书认…

搭建服务器 - 笔记

1 nginx web服务架构-CSDN博客 大型网站技术架构设计 百度安全验证 2.log分析 GitHub - compilelife/loginsight: loginsight致力于打造一款日志分析的利器 3 远程共享本地知识库 Linux CentOS系统Docker部署Wiki.js并实现远程共享本地知识库 百度安全验证 4 Python 编…

Codeforces Round 800 (Div. 1)C. Keshi in Search of AmShZ 反向dijkstra,并附带权值

Problem - C - Codeforces 目录 题意&#xff1a; 思路&#xff1a; 答疑&#xff1a; 1.为什么反向做呢&#xff1f; 2.为什么是到达点的剩余度数呢&#xff1f; 3.相同路是否可以去重&#xff0c;用个set&#xff1f; 4.如果有多条路相同呢&#xff1f; 参考代码&am…

【SecretFlow——SPU基础】

1.SPU基础 SPU设备在SecretFlow中负责执行MPC计算。 2.代码解读 2.1 创建设备 import secretflow as sf # 如果存在secretflow&#xff0c;先关闭已经存在的环境 sf.shutdown() # 初始化四个参与方 sf.init([alice, bob, carol, dave], addresslocal) # 寻找未占用的端口来…

【YOLOV5 入门】——detect.py简单解析模型检测基于torch.hub的检测方法

声明&#xff1a;笔记是毕设时根据B站博主视频学习时自己编写&#xff0c;请勿随意转载&#xff01; 一、打开detect.py&#xff08;文件解析&#xff09; 打开上节桌面创建的yolov5-7.0文件夹里的detect.py文件&#xff08;up主使用的是VScode&#xff0c;我这里使用pycharm…

使用vue根据表格内容生成Excel表格并下载

安装file-saver npm install file-saver -S 安装 xlsx npm install xlsx -S 按照element npm i element-ui -Smian里引入element import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css;在页面引入file-saver以及 xlsx import FileSaver …

NLP深入学习:结合源码详解 BERT 模型(三)

文章目录 1. 前言2. 预训练2.1 modeling.BertModel2.1.1 embedding_lookup2.1.2 embedding_postprocessor2.1.3 transformer_model 2.2 get_masked_lm_output2.3 get_next_sentence_output2.4 训练 3. 参考 1. 前言 前情提要&#xff1a; 《NLP深入学习&#xff1a;结合源码详…

PyQt5开发——QCheckBox 复选框用法与代码示例

1. 复选框 QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于在界面中表示一个可以被选中或取消选中的复选框。它通常用于允许用户在多个选项之间进行选择。在 Python 中使用 PyQt 或 PySide 开发 GUI 应用程序时&#xff0c;可以使用 QCheckBox 控件来实现复选框。 2.基本用…

UML类图箭头表示含义:

UML类图箭头表示含义&#xff1a; uml图六种箭头的含义&#xff08;泛化、实现、依赖、关联、聚合、组合&#xff09;_组合和聚合的箭头-CSDN博客

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…

python快速入门一

变量 定义一个变量并打印到控制台 message "Hello World!" print(message)控制台输出 Hello World!修改变量 message "Hello World!" print(message) message "Hello Python World!" print(message)控制台输出 Hello World! Hello Pytho…