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

这篇具有很好参考价值的文章主要介绍了[3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1. 硬件配置推荐

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

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

[3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法
在深度学习代码中,以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供不应求。

[3D数据深度学习] (PC/服务器集群cluster)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个数以及内存使用情况
[3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法
如图,我一共有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对于不同数据的最大值
[3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法
经过测试,对于(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的解决办法文章来源地址https://www.toymoban.com/news/detail-497013.html

到了这里,关于[3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习GPU服务器环境配置

    组里面分配了台gpu服务器,让我负责管理,需要先配置一些深度学习环境,记录一下。 一些linux服务器常用命令:https://blog.csdn.net/qq_51570094/article/details/123949910 首先需要了解linux系统信息 通过 cat /proc/version 查看包含gcc的版本信息 通过 hostnamectl 命令查看系统信息,这个命令是

    2024年02月01日
    浏览(42)
  • (深度学习)PyCharm 连接配置服务器

    需要 Pycharm 专业版 以 2022 版的 PyCharm 为例: 1. 连接服务器 File ---- Settings ---- Python Interpreter ---- Add Interpreter ---- On SSH 输入服务器的 Host、Port 和 Username ---- Next 输入密码 ---- Next Next 可以选择虚拟环境,我个人习惯选择下面那个 System Interpreter 选择本机项目地址和对应的服务器同

    2024年02月11日
    浏览(38)
  • 服务器上运行跑深度学习代码(一)

    我准备复现的是Point2roof的代码。这是第一次复现论文代码,所以记录一下^ _ ^。 从GitHub找到他的项目point2roof项目。 先把工程down下来 ^ _ ^ 。 看他工程里面提供的README。 这篇里面提到他的数据集,我也顺便下载下来了。目前只是想跑一下代码,好像没必要下载数据集? 接下

    2024年02月11日
    浏览(34)
  • 电子取证之服务器取证,本人第一次从pc取证到服务器,这里有一套例题分享给大家,所有解析我都尽可能全面具体,希望与各位同仁一起学习。(二次修改)

    话不多说,先上链接,这个包含一个2G的服务器镜像和题目,原题是弘连公司的,致谢,此处纯粹分享解法供大家学习。 第二次做题目,发现宝塔新版已经不支持,所以题目意义减少,还是欢迎手搓与小白来看看 链接: https://pan.baidu.com/s/1p8T7Fez_VlnSqdzvptARRw?pwd=ybww 提取码: ybww

    2024年02月07日
    浏览(41)
  • 深度学习服务器(Linux)开发环境搭建教程

    当你拿到一台服务器的使用权时,最头疼的莫过于登陆服务区并配置开发环境。本文将从0开始,讲述一台刚申请的服务器远程登陆并配置开发环境的全过程。希望对你有所帮助 打开MobaXterm软件,创建一个新的Session,选择SSH登陆。其中Remote host填服务器的IP地址,Specify userna

    2024年02月05日
    浏览(39)
  • 使用vscode 连接服务器 进行深度学习代码调试

    博主本来在Win上已经配好环境了,但是在跑代码的过程中,因为tensor拼接得太大了,导致笔记本内存不足,因此需要到服务器上跑 为什么选择vscode? 如果直接用xshell连接服务器,在命令行运行py文件,不是很直观,也不能debug,还不能直接输出图片。 pycharm连接服务器好像要

    2024年02月22日
    浏览(29)
  • Linux服务器下配置深度学习环境(PyTorch)

    一. 安装anaconda 二. 创建虚拟环境 三. 安装PyTorch 在配置环境前,需要远程连接服务器,我选择使用MobaXterm,具体操作详见: 使用MobaXterm连接Linux服务器 Anaconda ,中文大蟒蛇,是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 1. 下载anaconda 在官网

    2024年02月06日
    浏览(40)
  • 如何在服务器使用GPU跑深度学习代码

    每个人都有他们偏好的工具和工作流程。就我个人而言,我喜欢使用 PyCharm Professional Edition 作为我的集成开发环境,选择使用 HengYuan Cloud\\\'s OSS.exe 和 FileZilla 进行文件传输,并且我倾向于使用 Xshell 来处理命令行操作。这些工具的组合满足了我的所有需求,并使我的工作效率最

    2024年04月12日
    浏览(41)
  • Linux服务器集群-大数据基础环境搭建指南

    本文将构建三台Linux服务器(node1、node2、node3),通过相关配置,搭建出一个Linux服务器集群环境适用于大数据的开发学习。 本文使用的VMware版本为:VMware16; 本文环境搭建使用到的Linux发行版本为:CentOS7; 本文的电脑操作环境为:windows11。 首先,需要根据之前发文中的流程

    2024年02月07日
    浏览(45)
  • Windows Server 2019服务器远程桌面服务部署+深度学习环境配置教程

    实验室需要将Win10的系统改装为Server系统供多人以远程桌面的方式使用,同时配置Tensorflow+Pytorch的深度学习环境,遂记录一下大概步骤。 和安装其他Windows系统的步骤差不多,也是插入U盘后进BIOS然后根据引导分区创建管理员等等,可以参考:windows server 2019安装教程 如果装完

    2024年02月04日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包