mmdet 加载预训练模型多卡训练过程中,存在显卡占用显存不均匀

1. 问题描述

基于mmdet https://github.com/open-mmlab/mmdetection代码仓库,修改了自己的检测代码,加载了预训练模型,进行分布式训练。

在训练过程中,出现了显卡的占用显存不均匀的问题。

如图所示,可以看到显卡2 占用了更多的显存。

2. 分析

查找了网上的资料[1,2],发现这个问题在于load模型的时候,直接load的话会导致参数加载到之前保存模型的device上(大部分情况下应该是只用cuda0去保存),这里可以将load函数加一个参数为map_location解决:

model_weights = torch.load(path, map_location='cpu')

3. debug

3.1 代码逻辑

mmengin/runner源代码中,如果没有指定设备那就会按照下面的逻辑得到device,然这种方式得到的device是'cuda'

因为没有指定显卡号,一般是在cuda:0上占用的显存多,参考[1]。

我遇到的问题是,占用显卡更大的显卡不应当是卡0,任意一张卡都有可能出现显存占用更多的显存。我也还没完全搞懂这个随机的逻辑。

DEVICE = 'cpu'
if is_npu_available():DEVICE = 'npu'
elif is_cuda_available():DEVICE = 'cuda'
elif is_mlu_available():DEVICE = 'mlu'
elif is_mps_available():DEVICE = 'mps'
elif is_dipu_available():DEVICE = 'dipu'def get_device() -> str:"""Returns the currently existing device type.Returns:str: cuda | npu | mlu | mps | cpu."""return DEVICE

3.2 修改逻辑

既然代码存在指定cuda显卡的不确定性,那么我们干脆直接把模型加载在内存中。具体操作是在传入的参数中指定cpu,这样就不会出现某个显卡占的多了。

3.3 具体的修改如下

把Runner类这个load_or_resume函数修改

(1)

self.resume(resume_from) 

改为

self.resume(resume_from,map_location=torch.device('cpu'))

(2)

self.load_checkpoint(self._load_from) 

改为

self.load_checkpoint(self._load_from, map_location=torch.device('cpu'))

3.4 改完的代码如下所示。

    def load_or_resume(self) -> None:"""load or resume checkpoint."""if self._has_loaded:return None# decide to load from checkpoint or resume from checkpointresume_from = Noneif self._resume and self._load_from is None:# auto resume from the latest checkpointresume_from = find_latest_checkpoint(self.work_dir)self.logger.info(f'Auto resumed from the latest checkpoint {resume_from}.')elif self._resume and self._load_from is not None:# resume from the specified checkpointresume_from = self._load_fromif resume_from is not None:## 2024.12.4## add ,map_location=torch.device('cpu')self.resume(resume_from,map_location=torch.device('cpu'))# self.resume(resume_from)self._has_loaded = Trueelif self._load_from is not None:## add ,map_location=torch.device('cpu')self.load_checkpoint(self._load_from, map_location=torch.device('cpu'))# self.load_checkpoint(self._load_from)self._has_loaded = True

4. 结果

如图所示,问题解决了。

5. 参考

  • 解决多卡加载预训练模型时,卡0总会比其他卡多占用显存,多卡占用显存不均_多卡训练为什么占的内存多-CSDN博客
  • pytorch 模型训练时多卡负载不均衡(GPU的0卡显存过高)解决办法(简单有效)_多卡部署大模型还是爆显存-CSDN博客
  • DataParallel里为什么会显存不均匀以及如何解决-腾讯云开发者社区-腾讯云
  • https://github.com/open-mmlab/mmdetection
  • https://mmdetection.readthedocs.io/

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

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

相关文章

使用ALB将HTTP访问重定向至HTTPS

HTTPS是加密数据传输协议,安全性高。当企业进行HTTPS安全改造后,为了方便用户访问,可以使用ALB在用户无感知的情况下将HTTP访问重定向至HTTPS。 前提条件 您已创建ALB实例,并为该实例添加了HTTP监听和监听端口为443的HTTPS监听。…

力扣92.反转链表Ⅱ

题目描述 题目链接92. 反转链表 II 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left …

Java版-速通ETL工具中简单的DAG执行实现

DAG作用 在ETL工具中&#xff0c;一般使用DAG图来进行任务的配置&#xff0c;将任务配置在有向无环图中&#xff0c;执行时候从首层节点&#xff0c;依次往下&#xff0c;下层节点的执行依赖于父节点是否执行完毕的状态&#xff0c;当最后一层的节点执行完成之后&#xff0c;整…

Web安全深度剖析

1.Web安全简介 ​ 攻击者想要对计算机进行渗透&#xff0c;有一个条件是必须的&#xff0c;就是攻击者的计算机与服务器必须能够正常通信&#xff0c;服务器与客户端进行通信依靠的就是端口。 ​ 如今的web应该称之为web应用程序&#xff0c;功能强大&#xff0c;离不开四个要…

策略模式的理解和实践

在软件开发中&#xff0c;我们经常遇到需要在不同算法之间进行选择的情况。这些算法可能实现相同的功能&#xff0c;但使用不同的方法或逻辑。为了增强代码的可维护性和可扩展性&#xff0c;我们可以使用设计模式来优化这些算法的实现和管理。策略模式&#xff08;Strategy Pat…

在 Linux 环境下搭建 OpenLab Web 网站并实现 HTTPS 和访问控制

实验要求 综合练习&#xff1a;请给openlab搭建web网站 ​ 网站需求&#xff1a; ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! ​ 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c…

Java开发利器:IDEA的安装与使用(下)

文章目录 8. 快捷键的使用8.1 常用快捷键8.2 查看快捷键8.3 自定义快捷键8.4 使用其它平台快捷键 9. IDEA断点调试(Debug)9.1 为什么需要Debug9.2 Debug的步骤9.3 多种Debug情况介绍9.3.1 行断点9.3.2 方法断点9.3.3 字段断点9.3.4 条件断点9.3.5 异常断点9.3.6 线程调试9.3.7 …

非对称任意进制转换器(安卓)

除了正常进制转换&#xff0c;还可以输入、输出使用不同的数字符号&#xff0c;达成对数值进行加密的效果 点我下载APK安装包 使用unity开发。新建一个c#代码文件&#xff0c;把代码覆盖进去&#xff0c;再把代码文件添加给main camera即可。 using System.Collections; usin…

神经网络入门实战:(十四)pytorch 官网内置的 CIFAR10 数据集,及其网络模型

(一) pytorch 官网内置的网络模型 图像处理&#xff1a; Models and pre-trained weights — Torchvision 0.20 documentation (二) CIFAR10数据集的分类网络模型&#xff08;仅前向传播&#xff09;&#xff1a; 下方的网络模型图片有误&#xff0c;已做修改&#xff0c;具…

linux 系列服务器 高并发下ulimit优化文档

系统输入 ulimit -a 结果如下 解除 Linux 系统的最大进程数 要解除或提高 Linux 系统的最大进程数&#xff0c;可以修改 ulimit 设置和 /etc/security/limits.conf 文件中的限制。 临时修改 ulimit 设置 可以使用 ulimit 命令来查看和修改当前会话的最大进程数&#xff1a; 查…

Elasticsearch数据迁移(快照)

1. 数据条件 一台原始es服务器&#xff08;192.168.xx.xx&#xff09;&#xff0c;数据迁移后的目标服务器&#xff08;10.2.xx.xx&#xff09;。 2台服务器所处环境&#xff1a; centos7操作系统&#xff0c; elasticsearch-7.3.0。 2. 为原始es服务器数据创建快照 修改elas…

基于 SpringBoot 构建校园失物招领智能平台:优化校园失物处理流程

4系统设计 4.1系统概要设计 本文通过B/S结构(Browser/Server,浏览器/服务器结构)开发的该校园失物招领系统&#xff0c;B/S结构的优点很多&#xff0c;例如&#xff1a;开发容易、强的共享性、便于维护等&#xff0c;只要有网络&#xff0c;用户可以随时随地进行使用。 系统工作…

图解SSL/TLS 建立加密通道的过程

众所周知&#xff0c;HTTPS 是 HTTP 安全版&#xff0c;HTTP 的数据以明文形式传输&#xff0c;而 HTTPS 使用 SSL/TLS 协议对数据进行加密&#xff0c;确保数据在传输过程中的安全。 那么&#xff0c;HTTPS 是如何做到数据加密的呢&#xff1f;这就需要了解 SSL/TLS 协议了。 …

HTTP协议图--HTTP 工作过程

HTTP请求响应模型 HTTP通信机制是在一次完整的 HTTP 通信过程中&#xff0c;客户端与服务器之间将完成下列7个步骤&#xff1a; 建立 TCP 连接 在HTTP工作开始之前&#xff0c;客户端首先要通过网络与服务器建立连接&#xff0c;该连接是通过 TCP 来完成的&#xff0c;该协议…

BurpSuite工具-Proxy代理用法(抓包、改包、放包)

一、Burp Suite 项目管理 二、Proxy&#xff08;代理抓包模块&#xff09; 1. 简要说明 1.1. Intercept&#xff08;拦截&#xff09; 1.2. HTTP History&#xff08;HTTP 历史&#xff09; 1.3. WebSockets History&#xff08;WebSocket 历史&#xff09; 1.4. Options…

前端测试框架 jasmine 的使用

最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 &#xff0c;Karma 自动化完成&#xff0c;当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs &#xff0c;使用 npm 安装好必要…

Blender均匀放缩模型

解决办法&#xff1a; 首先选中模型&#xff0c;按下“s”键&#xff0c;如下图所示&#xff0c;此时模型根据鼠标的移动放缩 或者在按下“s”后输入数值&#xff0c;再按回车键Enter&#xff0c;模型会根据你该数值进行均匀放缩 指定放大2倍结果——

TCP/IP 协议图--计算机网络体系结构分层

计算机网络体系结构分层 计算机网络体系结构分层 不难看出&#xff0c;TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”&#xff0c;而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”

hive 行转列

行转列的常规做法是&#xff0c;group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…

5G Multicast/Broadcast Services(MBS)相关的Other SI都有哪些?

系统消息分为Minimum SI 和other SI&#xff0c;其中Minimum SI 包括MIB和SIB1&#xff0c;Minimum SI包含初始访问所需的基本信息和获取任何其他 SI 的信息。 而随着3GPP引入的技术越来越多&#xff0c;例如sidelink&#xff0c;NTN&#xff0c;MBS broadcast/multicast以及A…