[3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法

news2025/1/4 18:33:47

[3D数据深度学习] (PC/服务器集群cluster)内存/显存参数设置

  • 1. 硬件配置推荐
  • 2. 深度学习流程及遇到的问题
  • 3. CPU内存限制及参数设置
  • 4. GPU显存限制及参数设置

3D数据的深度学习目前研究远不如2D深度学习成熟,其中最大的一个原因之一就是收到硬件条件的限制。3D数据虽说只比2D数据增加了一个维度,但所占据的内存却是成倍的增长。对于3D数据的深度学习,我们会分析其在CPU内存和GPU显存两方面的限制,希望大家能够充分利用自己的资源进行深度学习。

1. 硬件配置推荐

CPU: 大内存,多核(很关键,越多越好)高性能CPU
GPU: 大显存(24G以上),比如A6000(48G),TeslaV100(32G)
服务器集群: 每个节点多CPU,大内存,多卡(GPU)

2. 深度学习流程及遇到的问题

在这里插入图片描述
在深度学习代码中,以pytorch为例,CPU往往负责着数据读取/加载,数据增强的部分。而GPU负责模型模型的训练。
在CPU上完成数据读取,数据增强之后,将数据传到GPU上进行训练。所以我们的数据要同时满足CPU和GPU的限制。在执行程序时,我们既不能超过CPU内存的限制(否则会发生线程中断,程序卡死),也不能超过GPU显存的限制(否则会发生OOM)。但同时,我们也希望尽可能最大化的利用内存和显存,提高我们的训练速度,特别对于3D数据,一般只能使用较小的batch_size, 所以训练时间往往非常长,正确的参数设置可以大大提高我们的训练时间。下面我会像大家介绍如何在不超过自己内存/显存限制的情况下优化参数配置,加速训练。

3. CPU内存限制及参数设置

首先我们要知道,在进行训练时,我们的cpu并不是每次一读取batch个数据进行网络更新,再读取下一个batch数据进行训练。这里有一个关键参数:num_workers Pytorch dataloader中的num_workers (选择最合适的num_workers值)

dataloader一次性创建num_worker个worker,(也可以说dataloader一次性创建num_worker个工作进程,worker也是普通的工作进程),并用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM。

num_worker设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮…迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是CPU复制的嘛)。num_workers的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些。

num_worker小了的情况,主进程采集完最后一个worker的batch。此时需要回去采集第一个worker产生的第二个batch。如果该worker此时没有采集完,主线程会卡在这里等。(这种情况出现在,num_works数量少或者batchsize 比较小,显卡很快就计算完了,CPU对GPU供不应求。

在这里插入图片描述
num_works数量越多,CPU准备数据越快 pytorch dataloader 使用batch和 num_works参数的原理是什么?
红线情况:数据很大,num_works很少GPU计算完成后想要拿到下一个批次的数据时发现CPU还没准备好数据。要等待很久才能开始下一次计算,从而影响到GPU使用率。是3D数据训练时常见到的情况。

最好的情况是紫线这种:GPU计算的过程中CPU已经准备好数据了。等GPU计算完上一个批次数据,直接把下一个批次数据发给GPU。


由于3D数据很大,我们的batch_size因为显存的限制往往只能设置的很小(比如2,4,6)所以网络在收到小batch_size个数据之后往往很快就完成了训练,等待下一批batch数据到来。因此,对于体积较大的3D数据,其时间限制主要来自于数据读取部分,因此,数据的并行读取比较重要,我们希望使用尽量多个CPU同时读取数据。也就是说,在不超过我们的内存限制的情况下,num_worker越大越好。

对于PC,首先我们需要查看自己的硬件配置,有多少个CPU,num_worker不能超过CPU个数。
对于服务器,多个脚本程序往往在一个节点上执行,这些程序共享这个节点的内存和CPU,所以我们要合理安排每个程序的CPU使用数量以及内存占用率。如果是特别大的3D数据,建议一个节点只执行这一个程序,来充分利用CPU资源

我们可以使用htop命令来查看自己的CPU个数以及内存使用情况
在这里插入图片描述
如图,我一共有64个CPU,内存最大为188G
理论上说,我的num_worker最大可以设置为64,但实际上,当64个CPU同时加载数据,很容易超出188G内存的限制,如果我们使用服务器的话,可以使用以下命令对每个CPU所使用的最大内存做出限制:

#SBATCH --mem-per-cpu=3G

180G内存/60个CPU = 3G,当每个CPU只使用3G内存,就不会超过最大内存了。

然而,当我们的数据非常大,我们就需要降低num_worker的个数来避免超出内存,比如说我们的原始数据大小为(834,224,834,3),在多个CPU读取数据时会占用特别大的内存,所以我们要测试num_worker对于不同数据的最大值
在这里插入图片描述
经过测试,对于(834,224,834,3)的3D数据,num_workers最大值为18,如果再大的话多个CPU读取数据产生的峰值会超过内存限制,从而引起程序中断

4. GPU显存限制及参数设置

对于3D数据训练,超过GPU显存最大值(OOM)是最常遇到的问题。减小Batch_size是简单的做法,但是很多情况下Batch_size已经很小了,没法再小。

下面是三种解决办法,根据不同的情况选择:

  1. DataParallel: 模型不算很大,batch_size 较小时能够运行没有OOM,但效果不好,希望增大batch_size进行训练。可以使用模型并行扩大batch_size, 使用4张卡同时训练的话可以将batch_size扩大4倍。
  2. Model parallel:模型非常大,一张卡放不下,可以将模型的不同部分放到不同卡上进行训练。适用于多支路网络,将不同支路放到不同卡上,不会对训练时间造成太大影响。若是单支路网络使用模型并行,训练时间会变长。
  3. Gradient checkpointing:模型非常大,一张卡放不下,但是只有一张卡。将模型分段保存,在训练时会分段进行训练,会明显增长训练时间,预算有限的情况下可以使用。

服务器集群上的DataParallel详情见我之前的教程:[pytorch] 分布式训练 Distributed Data-Parallel Training (DDP)
模型并行Model parallel的教程会在以后发

因为batch_size很小,所以各种加速训练的技巧表现都不是很好,我们只讨论OOM的解决办法

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

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

相关文章

【跨层注意力:多层次融合】

Multi-level features fusion via cross-layer guided attention for hyperspectral pansharpening (基于跨层注意力引导的多层次特征融合高光谱全色锐化) 近年来,卷积神经网络(CNN)在计算机视觉中的成功应用引起了人…

新手入门吉他买什么牌子好?有哪些值得推荐的吉他品牌,附上初学者吉他选购攻略!【避坑指南】

在选购吉他之前,大家必须提前了解的一些关于吉他的知识,提前做好功课,不怕挑选不到适合的吉他,新手入门吉他怎么选?怎么选到适合自己的吉他?带着这些问题在这里我将详细地给大家一一讲解,同时最…

如何做好客户精细化管理?

很多人都知道客户精细化管理的重要性,但并不是所有人都掌握客户精细化管理的科学方法。 目前,客户精细化管理最常用的方法是基于RFM模型的客户细分方法。 RFM分析是客户关系分析中一种简单实用客户分析方法,他将最近一次消费、消费频率、消…

Java项目:基于ssm智能餐厅管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目主要分为服务员、厨师、收银员、经理四种角色; 主要功能包括: 客户可以根据自己的要求去选择菜品,厨师…

23种设计模式的分类和应用场景总结【设计模式】

23种设计模式的分类和应用场景总结【设计模式】设计模式分类创建型模式结构型模式行为型模式设计模式的几种原则应用场景总结各种模式的详细介绍创建型模式设计模式分类 23种设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式 &#x1f34…

(附源码)SSM高考志愿智能选择系统 毕业设计 134565

SSM高考志愿智能选择系统 摘 要 高中教育的普及使得每年高考人数攀升,与此同时,信息不对称会使部分考生处于劣势,造成获录学校或专业性价比不高、报录比偏低、复读率增高、考研热等问题。针对这些情况,本文设计并实现了高考志愿智…

【时钟识别】Hough变换指针式时钟识别【含GUI Matlab源码 2085期】

⛄一、简介 1 仪表示数识别流程 基于刻度准确定位的指针式仪表示数识别方法包括预处理、指针检测、刻度定位、油位计表盘中心拟合与仪表读数计算5个部分。该方法无需预先添加任何表盘信息,算法流程如图2所示。整个流程分为两步且同时进行——第1步,将油位计图像进行灰度化和边…

DPDK技术原理概述

DPDK 基本技术指标准的 DPDK 数据平面开发包和 I/O 转发实现技术,本次将概述该部分的主要技术原理。 1 技术原理与架构 由于采用软件转发和软件交换技术,单服务器内部的转发能力是 NFV 系统的主要性能瓶颈。在各类高速转发的 NFV 应用中,数…

赣货通全球桥接江西制造全球开花,贸易强国供应链出海江西在奋进

“赣货通全球”平台是什么? “赣货通全球”平台是江西制造进入全球供应链的数字贸易平台,平台免费为江西制造打造永不落幕线上国际化“赣品展”。核心的后台功能为企业用户提供大数据获客及营销功能,同时为企业提供贸易全流程的第三方外贸综合服务&…

Ubuntu18.04复现mmdetection3d

文章目录一、环境搭建二、测试demo三、数据预处理四、训练参考一、环境搭建 从零配置深度学习环境参考:ubuntu18.04 AnnacondaCUDA10.2CuDNN7.6.5使用anaconda创建虚拟环境 conda create -n open-mmlab3d python3.8 conda activate open-mmlab3d安装torch 先从官网…

自然语言处理竞赛相关比赛项目、比赛经验、工具、算力平台资源分享

本资源主要收录NLP竞赛经验贴、通用工具、学习资料等,本项目源于2020年7月一次竞赛的经历,当时在找参考资料时遇到了很多困难,包括内容分散、质量不高等。2021年3月开始更新本项目,志在帮助NLPer提升模型性能。2021年6月开放本项目…

大一Web课程设计 基于HTML家乡主题网页项目的设计与实现——中国牡丹之都山东菏泽(6页)

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

MySQL高级【索引概述索引结构】

目录 索引概述 无索引演示:一种表没有索引的查找方式 有索引演示:以二叉树进行演示 索引的优缺点 索引结构 二叉树: B-Tree(多路平衡查找树) BTree树 Hash数据结构 索引概述 索引它是一种有序的数据结构&…

测开真的是测试工程师的发展终点吗?

前言 在一线大厂,没有测试这个岗位,只有测开这个岗位,即使是做业务测试,那么你的title也是测开。 所以想聊一聊测开的看法,但不代表这是正确的看法,仅供参考。 没来阿里之前我对测开的看法 一直以为专职…

Docker入门 --- 简单安装及部署

Docker的简单安装及部署 文章目录Docker的简单安装及部署一、Docker概述1. 什么是Docker2. Docker架构3. DockerHub4. Docker运行模式5. Docker和虚拟机的区别二、安装Docker1. 环境准备2. 安装3. 配置镜像加速器三、Docker服务、镜像、容器命令1. 服务(进程)相关命令2. 镜像相…

【大数据处理技术】「#2」Hive数据分析

文章目录操作Hive简单查询分析测试简单指令查询条数统计分析关键字条件查询分析以关键字的存在区间为条件的查询根据用户行为分析用户实时查询分析操作Hive 启动Hive在“hive>”命令提示符状态下执行下面命令: hive> use dbtaobao; # 使用dbtaobao数据库 hi…

1.7 TCP粘包、缺包问题解决

文章目录1、TCP粘包问题1.1、客户端粘包现象1.2、服务端粘包1.3、粘包、缺包解决2、包头设计1、TCP粘包问题 1.1、客户端粘包现象 因为客户端有一个优化算法(Nagle), send(“abc”); send(“123”); send(“def”); 如果这三次发送非常紧密时间非常短,会…

一、Endnote简介

一、简介 1.Edit-Preference-Libraries:设置默认打开时的操作。(默认打开最近一次) 2.文献库的建立File-New 生成一个数据库文件和一个文件夹 3.在线数据库搜索 (1)设置不同的检索字段: (2&am…

零基础小白想学Python爬虫,但是不理解原理?5分钟带你理顺思路

很多人私信我,说自己是0基础学习Python,但是学爬虫的时候不太理解这个原理,下面我来给大家分享一下我的对Python爬虫的原理。 首先我们要知道什么是Python爬虫? 我们可以把互联网看成是各种信息的站点及网络设备在一起组成的一…

UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer

列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer 目录 列文章目录 前言 一、知识点提取汇总 二、案例需求分析 1、最终效果图 2、需求分解 三、程序分析 1、源码所在目录 2、主要功能分析 前言 随着工业智能化的不断发展,UG二次开发…