【踩坑】修复多GPU通信时all_reduce/broadcast时间不一致的问题

news2024/11/25 2:58:21

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

目录

背景介绍

原因解释

问题修复


背景介绍

        按照网上的说法,计时使用了torch.cuda.Event(enable_timing=True)torch.cuda.synchronize(),但跑出来的时间相差还是很大。

原因解释

        其实出现这个问题,是因为我们忽略了一个事实,而这个在网上相关的文章里都没有提:

  • torch.cuda.synchronize()

    • 作用:这个函数会使当前设备(GPU)上的所有先前CUDA操作完成。也就是说,它会等待设备上所有的CUDA内核、内存复制、CUDA流操作等完成。
    • 使用场景:通常在计时或调试时使用,确保所有的GPU操作在继续执行代码之前都已完成。
    • 作用范围:仅在当前设备上起作用,并不涉及跨设备或跨进程的同步。
  • dist.barrier()

    • 作用:这个函数会在所有参与分布式计算的进程上进行同步。只有当所有进程都到达这个屏障时,所有进程才会继续执行后续代码。这确保了所有进程在某个点上同步。
    • 使用场景:在多进程分布式计算中使用,用于确保所有进程在某个同步点上处于一致状态。
    • 作用范围:在所有参与同一分布式组的进程之间同步。

        那么就很明显了,对于GPU之间的通信而言,只使用synchronize实际上是不够的,因为他只能保证当前GPU完成了CUDA操作。所以要保证GPU间同步,我们还得加barrier。

问题修复

        把计时代码改成类似这种的即可。注意,由于网上对此的相关资料较少,如果是为了计时是可以这样搞,正常执行应该不需要加。我也不是很确定这样是否合理,请大家自行选择哈。

dist.barrier()
start_event.record()

# xxxxxxxx

dist.barrier()
end_event.record()
torch.cuda.synchronize()

        这样的计时,两者就很接近了:

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

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

相关文章

windows下 Ubuntu安装docker保姆级教学!非常详细!

保姆级别windows下Ubuntu安装docker教程 卸载原有 Docker执行卸载旧版 docker 命令安装 Docker更新源安装相应的依赖包安装 Docker 镜像使用国内镜像安装安装完成后,对key进行验证安装稳定版的repository再次更新源安装 docker-ce测试是否安装成功更换 docker 源重启 Docker检…

GIT之git clone 时出现如下报错 ERROR

一:Github clone 时出现如下报错 ERROR: You‘re using an RSA key with SHA-1, which is no longer allowed 1.现象 git pull时(或git push, git clone等),出现如下问题。 2. 原因分析 原因是在2022年3月15日之后,github不再支持SHA-1的加密方式了。 3. 解决方案 将…

qmt量化交易策略小白学习笔记第45期【qmt编程之期货行情数据--如何获取日线行情、tick行情】

qmt编程之获取期货行情数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取日线行情数…

易支付宝塔一键部署项目 懒人专用包 制作

宝塔一键部署说明 https://www.bt.cn/bbs/thread-33063-1-1.html 1. auto_install.json {"php_ext":"fileinfo","chmod":[],"success_url":"install/?step3&jump1","php_versions":"80","db…

【论文速读】|对BusyBox进行模糊测试:利用大语言模型和崩溃重用挖掘嵌入式系统中的漏洞

本次分享论文:Fuzzing BusyBox: Leveraging LLM and Crash Reuse for Embedded Bug Unearthing 基本信息 原文作者:Asmita, Yaroslav Oliinyk, Michael Scott, Ryan Tsang, Chongzhou Fang, Houman Homayoun 作者单位:1. University of Ca…

GD32F303 低功耗模式要点

我们都知道,MCU有低功耗模式,比如GD32F303芯片,就有Sleep、Deepsleep和Standby三种模式。关于这三种模式的具体使用方法,小伙伴们可以参考《GD32F30x系列用户手册》。 今天我们来聊下几个低功耗模式要点。 1、进入低功耗模式后I…

uniapp 自定义页面顶部导航栏

效果图 1.移除原生导航栏 {"path": "pages/common/homePage/homePage","style": {"navigationBarTitleText": "","navigationStyle": "custom"} } 2.获取不同手机顶部自带 电量高度、信号、时间导航栏…

3D模型在电商行业的应用有哪些?

3D模型在电商行业的应用广泛且多样化,以下是几个主要的应用领域: 1、商品展示: 3D立体展示技术能够利用商品的3D模型进行全方位的展示,支持720旋转和任意缩放,使得消费者能够更直观地了解产品的外观、结构和特点。这…

LearnOpenGL - Android OpenGL ES 3.0 绘制纹理

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口LearnOpenGL 笔记 - 入门 04 你好,三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

世界财富 500 强公司走向 Web3,加密开发者需求量大增

原文:https://www.coinbase.com/blog/the-state-of-crypto-the-fortune-500-moving-onchain 作者:Coinbase 编译:TinTinLand 美国顶级上市公司在链上的活动量正在突破历史。根据 Coinbase 委托 The Block 进行的研究,全球财富 …

在阿里云服务器Linux系统上从头到尾实现Webapp的部署(安装卸载JDK、安装Tomcat、安装配置MySQL)

输入yum list | grep jdk 选择 devel是软件包中的典型命名格式 devel表示这个包是开发工具相关的 里面包含内容是最完整的 x86表示cpu架构是x86_64 还有openjdk表示开源版本 输入yum install java-1.8.0-openjdk-devel.x86_64 开始下载 遇到问你 is this ok? 输入y表示ok 输…

Anthropic 的 Claude 3.5 Sonnet 在企业人工智能竞赛中胜过 OpenAI 和谷歌

全球领先的人工智能研究公司 Anthropic 宣布推出 Claude 3.5 Sonnet,这是一款集无与伦比的性能和成本效益于一身的开创性人工智能模型。克劳德模型系列的最新迭代产品将彻底改变企业人工智能的格局,以低于竞争对手的成本为企业提供最先进的功能。 Anthr…

Springboot拓展之整合邮件 JavaMail的使用与实操

邮件 电子邮件仍然是我们企业间交往的一种非常常见的方式 发送简单邮件 第一步首先导入坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.6.13</version&…

自学新标日第十六课(完结)

第十六课 单词 单词假名声调词义操作そうさ1操作&#xff0c;操纵機械きかい2&#xff0c;1机械&#xff0c;机器旅行会社りょこうがいしゃ4旅行社営業部えいぎょうぶ3营业部アイティー産業アイティーさんぎょう5it产业&#xff0c;信息技术产业製品せいひん0产品建築家けんち…

【Linux必备工具】自动化构建工具makefile的使用详解

目录 引言 Makefile 简介 依赖关系与依赖方法 make运行规则 依赖关系示例 依赖方法 Makefile 工作原理 示例代码 清理项目与伪目标 清理示例 .PHONY总是被执行 文章手稿&#xff1a; 文章手稿见文末~ 引言 项目构建时遇到的各种挑战如文件编译顺序、库链接、依赖…

深入理解Java并发锁

在Java中&#xff0c;并发锁是用来控制多个线程对共享资源的访问&#xff0c;确保数据的一致性和完整性。Java提供了多种并发锁机制&#xff0c;包括内置锁&#xff08;synchronized&#xff09;、显示锁&#xff08;如ReentrantLock&#xff09;、原子变量、并发容器以及一些高…

【系统设计】如何权衡范式与反范式设计

一、什么是范式设计与反范式设计 1.1、范式设计&#xff08;Normalization&#xff09; 定义&#xff1a; 范式设计是数据库设计中最基础的设计原则之一&#xff0c;它主要通过规范化数据模型&#xff0c;减少数据冗余和数据不一致的问题。 常用的范式&#xff1a; 第一范式…

Nginx 负载均衡实现上游服务健康检查

Nginx 负载均衡实现上游服务健康检查 Author&#xff1a;Arsen Date&#xff1a;2024/06/20 目录 Nginx 负载均衡实现上游服务健康检查 前言一、Nginx 部署并新增模块二、健康检查配置2.1 准备 nodeJS 应用程序2.2 Nginx 配置负载均衡健康检查 小结 前言 如果你使用云负载均衡…

js中的window和Window

示例&#xff1a; window.name name; console.log(window.name) // name console.log(Window.name) // Window由此可见Window和window是有区别的。 console.log(Object.prototype.toString.call(Window)); // [object Function] console.log(Object.prototype.toString.c…