mpi4py 运行过程中出现Read -1, expected xxx, errno = 1 解决方案

news2025/7/26 7:22:59

目录

问题描述

代码1(串行)

代码2(并行)

代码2执行时所用指令

错误信息

解决方案 

解决方案1 

解决方案2


问题描述

今天正在学习使用mpi4py,在对比运行以下2个代码时疯狂报错:

代码1(串行)

import numpy as np
import time

np.random.seed(2)
size = 1000000

x1 = np.random.random(size)
x2 = np.random.random(size)
result = np.zeros(size, dtype=float)

since = time.time()
for i in range(size):
    result[i] = x1[i] + x2[i]
end = time.time()

print(end - since)

代码2(并行)

from mpi4py import MPI
import numpy as np
import time

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
nprocs = comm.Get_size()

size = 1000000
x1 = np.random.random(size)
x2 = np.random.random(size)

if rank == 0:

    ave, res = divmod(size, nprocs)

    count = [ave + 1 if p < res else ave for p in range(nprocs)]
    count = np.array(count)

    displ = [sum(count[:p]) for p in range(nprocs)]
    displ = np.array(displ)
else:
    sendbuf = None
    count = np.zeros(nprocs, dtype=np.int)
    displ = None

t0 = time.time()
comm.Bcast(count, root=0)

recvbuf1 = np.zeros(count[rank])
recvbuf2 = np.zeros(count[rank])

comm.Scatterv([x1, count, displ, MPI.DOUBLE], recvbuf1, root=0)
comm.Scatterv([x2, count, displ, MPI.DOUBLE], recvbuf2, root=0)

print('After Scatterv, process {} has data:'.format(rank), recvbuf1)
print('After Scatterv, process {} has data:'.format(rank), recvbuf2)

for i in range(recvbuf1.shape[0]):
    recvbuf1[i] += recvbuf2[i]

sendbuf2 = recvbuf1
recvbuf2 = np.zeros(sum(count))
comm.Gatherv(sendbuf2, [recvbuf2, count, displ, MPI.DOUBLE], root=0)

if comm.Get_rank() == 0:
    print('pi computed in {:.3f} sec'.format(time.time() - t0))
    print('After Gatherv, process 0 has data:', recvbuf2)

代码2执行时所用指令

# mpi_test.py是该代码存放的代码文件,代码是以root的权限执行的
mpirun -np 4 --allow-run-as-root python mpi_test.py

错误信息

这个错误是我第三次尝试解决,这次终于找到了解决方案,太不容易了,QAQ

解决方案 

参考链接:

python - Possible buffer size limit in mpi4py Reduce() - Stack Overflow

链接中指出,出现这个错误的主要原因是由于

The issue comes from the Cross-Memory Attach (CMA) system calls process_vm_readv() and process_vm_writev() that the shared-memory BTLs (Byte Transfer Layers, a.k.a. the things that move bytes between ranks) of Open MPI use to accelerate shared-memory communication between ranks that run on the same node by avoiding copying the data twice to and from a shared-memory buffer. This mechanism involves some setup overhead and is therefore only used for larger messages, which is why the problem only starts occurring after the messages size crosses the eager threshold.

有以下两个解决方案:

解决方案1 

在执行docker run时,带上参数

--cap-add=SYS_PTRACE

但是由于我拿到的是分好的docker,并不具备执行docker run指令的权限,所以只能选择解决方案2中的解决方法。 

解决方案2

 禁用CMA。

如果是Open MPI 1.8之前的版本,在执行mpirun时带上参数:

mpirun --mca btl_sm_use_cma 0 ...

如果是Open MPI 1.8之后的版本,执行mpirun时带上参数:

mpirun --mca btl_vader_single_copy_mechanism none

附上一个原网站的回答截图以备后续查阅: 

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

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

相关文章

HTML 脚本

HTML 脚本 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 使 HTML 页面具有更强的动态和交互性。 JavaScript 插入 HTML 页面后&#xff0c;可由所有的现代浏览器执行。 在线实例 插入一段脚本 如何将脚本插入 HTML 文档。 使用 <noscript> 标签 如何应对不…

非接触式流量监测设备——雷达流速仪

一、设备概述 雷达流速仪是一款非接触且可连续测量流速、水位、流量的一体式流量监测设备。它采用雷达平面微波技术&#xff0c;通过非接触方式测量水体的流速和水位。根据内置的软件算法&#xff0c;计算并输出实时断面流量及累计流量&#xff1b;可用于泵站、河道、灌渠、地…

扬帆优配|三大油气巨头都嗨了,龙头总市值盘中破万亿

近期组织盯上哪些股&#xff1f; 3月7日早盘&#xff0c;周期板块大幅上涨。石油板块涨超4%遥遥领先&#xff0c;海越能源涨停。油气巨头我国石油盘中涨近6%&#xff0c;总市值一度突破万亿元。我国石化盘中涨幅到达6.86%&#xff0c;股价创四年来新高。我国海油盘中涨停&#…

Rocketmq技术详解

Rocketmq技术详解 运维部署 docker-compose.yml version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxisw…

后疫情时代,EIoT助力实体零售ESG战略落地

多点智能物联总经理刘汉彻 2023一开年&#xff0c;烟火气回归&#xff0c;各行各业都在摩拳擦掌&#xff0c;准备在后疫情元年“大干一场”。对企业而言&#xff0c;“降本增效”已成为跨行业的共同认知&#xff0c;实体零售也给自身的发展标定了方向&#xff1a;“彻底回归商…

CSS清楚浮动

先看看关于浮动的一些性质 浮动使元素脱离文档流 浮动元素可以设置宽高&#xff0c;在CSS中&#xff0c;任何元素都可以浮动&#xff0c;浮动元素会生成一个块级框&#xff0c;而不论其本身是何种元素。 如果没有给浮动元素指定高度&#xff0c;&#xff0c;那么它会以内容的…

JAVA SE: IO流

一、Java流式输入输出原理Java对于输入输出是以流(Stream)的方式进行的&#xff0c;JDK提供各种各样的“流”类&#xff0c;以获取不同类型的数据。可以理解为将管道插入到文件中&#xff0c;然后从管道获取数据。这个管道外边还可以套管道&#xff0c;外边的管道对数据进行处理…

Transwarp KunDB 备份恢复工具安装和备份工作自动化

备份恢复工具安装安装包# KunDR压缩包 KUNTOOL-Image-Registry-3.0.0-X86_64-final.tar.gzservice_client └── kuntools-3.0.0-final├── kundr-3.0.tar.gz└── kuntools-3.0.tar.gzkundr-3.0.tar.gz ├── bin │ ├── kunkun.sh │ ├── kuntools │ └──…

软件测试(进阶篇)(1)

一)如何根据需求来设计测试用例&#xff1f; 1)验证功能的正确性&#xff0c;合理性&#xff0c;无二义性&#xff0c;逻辑要正确 2)分析需求&#xff0c;细化需求&#xff0c;从需求中提取出测试项&#xff0c;根据测试项找到测试点&#xff0c;根据测试点具体的来进行设计测试…

C++基础——C++面向对象之类、对象与继承基础总结(类和对象概念、构造函数与析构函数、this指针、继承)

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…

14_MySQL视图

1. 常见的数据库对象2. 视图概述2.1 使用视图的好处视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c;而某些特殊的数据…

前瞻洞察|DoH,隐蔽隧道又添利器,强盾在何方?

DoH这个词对于很多安全从业人员并不是个新词&#xff0c;但对其前世今生能洞若观火的却不多。本期前瞻洞察将从DNS的隐私与安全问题出发&#xff0c;讲述DoH为什么诞生&#xff0c;DoH的出现到底利弊几何&#xff0c;对其弊端如何应对。为了便于读者理解&#xff0c;对于“何为…

轴承轮廓测量解决方案

标题滚动轴承组成、分类 滚动轴承一般由内圈、外圈、滚动体和保持架组成。对于密封轴承&#xff0c;再加上润滑剂和密封圈&#xff08;或防尘盖&#xff09;。这就是轴承的全部组成。 标题滚动轴承分类 滚动轴承代号&#xff1a;轴承型号一般有前置代号&#xff0c;基本代号和…

一、webpack基础

webpack基础 一、webpack是什么 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。 说白了webpack就是一个构建和管理静态资源的工具&#xff0c;在我们使用框架开发时&#xff0c;它会在我们内部的一个或者多个入口根据我们引入的各个模块将他们根据一定的规…

ATool软件使用实验(22)

实验目的 1、学习ATool软件监控主机行为的原理&#xff1b; 2、学习利用ATool软件监控可疑进程的行为&#xff1b; 3、学习利用ATool软件实现对本机进行文件、注册表管理&#xff1b; 4、学习利用ATool软件实现对本机进行内核模块信息和HOOK信息查看。 预备知识 ATool是针…

axios请求响应结果的结构,axios的请求对象

axios请求响应结果的结构 config&#xff1a;配置对象&#xff0c;包括很多内容&#xff0c;请求类型&#xff0c;请求url&#xff0c;请求体等等 data:响应体&#xff0c;服务器返回结果&#xff0c;并且将结果进行json解析&#xff0c;转为对象 headers:响应的头信息 requ…

Telink之标准SDK的介绍_1

前提&#xff1a;常见的项目架构&#xff1a;应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个)&#xff1a; algorithm&#xff0c;application&#xff0c;boot&#xff0c;common&#xff0c;drivers&#xff0c;proj_lib&#xff0c;stack&#xff0c;v…

YOLOv5害虫识别项目代码打包完整上传Gitee仓库(已开源)以及git上传速率限制踩坑记录

YOLOv5害虫识别项目代码打包完整上传Gitee仓库&#xff08;已开源&#xff09;以及git上传速率限制踩坑记录 ps: ​ 最近很多小伙伴需要这个害虫识别项目的源码&#xff0c;由于文件过大&#xff0c;所以将代码完整上传至gitee&#xff0c;所有文件、教程、论文、以及代码模型…

Python之metaclass和dataclass

metaclass:MetaClass元类&#xff0c;本质也是一个类&#xff0c;但和普通类的用法不同&#xff0c;它可以对类内部的定义&#xff08;包括类属性和类方法&#xff09;进行动态的修改。可以这么说&#xff0c;使用元类的主要目的就是为了实现在创建类时&#xff0c;能够动态地改…

ProcessExplorer工具使用(24)

实验目的 1、了解Process Explorer的使用方法预备知识 Process Explorer&#xff08;可执行文件名为procexp.exe&#xff09;是一款由Sysinternals开发的Windows系统和应用程序监视工具&#xff0c;目前Sysinternals已经被微软收购&#xff0c;此款不仅结合了文件监视和注册表监…