一种增大Batch的训练方法,低显存GPU也能加载更大的Batch

深度学习多机多卡batchsize和学习率的关系 前言 最近的一些实验感觉碰到一些玄学的问题。 总结一下: 纯FC的网络,学习率对训练结果的影响很大。实验现象是这样的,把resnet50的backbone给冻结了之后,只训练后面的head部分(不是简单的几层FC,还是比较复杂的结构拼了些transformer的block还有很重的MLP),发现不同的学习率会有两个点多的浮动。 单机多卡和多机多卡即使全局batchsize对齐训练结果仍有较大的diff,实验结果是差了2个多点。 玄学一 在没冻结backbone之前没有这样的情况出现。有点怀疑的地方是因为 阅读详情

​炼丹药的迷惑

相信各位丹友在炼丹期间都会遇到各种各样的问题,有些问题查查资料,做做实验就解决了,有些问题可能还是需要等大佬们去解决。本人在炼丹期间,就遇到了一个问题,这里简单分享一下,一般我们训练模型的时候,选择一个较大的Batch加载训练数据是一个高效训练的方法,当然也不是说Batch越大就越好,一个合适的Batch size对于模型训练才是最好的选择。如果输入是高分辨率图像的时候,由于显存的限制,batch就会变得很小,而且GPU显存总是告急,但是GPU计算资源却大量冗余。如何在加载大分辨率图像的时候增大Batch,有效的利用计算资源,是我们需要解决的问题。

一般当图像分辨率较小的时候,我们不会过于担心训练过程中Batch size的设置问题,由于图像分辨率较小,加载较大Batch不会出现显存不够用的情况,但是当遇到较大分辨率的图片做为训练数据的时候,情况就不一样了,这时候往往会需要更大显存来加载数据,模型训练中一般会出现一次加载的Batch极度变小的情况,这无疑加大了模型的训练时间,对于加了BN层的模型来说还会影响到训练效果。比如在训练YOLO模型的时候,当图像的大小达到了640*640,在6G的显存上一次只能加载几张图片。而对于训练一个泛化性能较好的模型,往往需要更大的数据集来学习,一边是捉襟见肘的显存,一边是更大的训练数据集,显而易见,扩大显存已经是迫在眉睫。

增加显存最好的方法,是更换更大显存的GPU,但是这种从硬件上直接下手的方法不是谁都有这个资本的,毕竟显卡是用真金白银换来的,所以最好办法是从模型上下手去操作。我们在训练大分辨率的图像数据的时候,最容易出现的情况就是一边是显存溢出,一边算力闲置。

所以联想到能否以闲置的计算资源来换取匮乏的显存呢?其实大佬们早以为我们提供了方法。

大批量的炼药方法

2020年6月17日发布的论文《Dynamic Tensor Rematerialization》全面论述了以计算资源换取显存的可行性。该论文在此后的时间了进行了几次改进,直到2021年3月18日出现了V4版本,论文也提供了pytorch中的使用方法。

论文介绍中也简单的阐述了基本的实现思路:

检查点通过从内存中释放中间激活并按需重新计算它们,可以在有限的内存预算下训练深度学习模型。当前的检查点技术静态地计划这些离线重新计算并假设静态计算图。我们证明了一个简单的在线算法可以通过引入动态张量重新实现(DTR)来实现可比的性能,这是一种用于检查点的贪婪在线算法,具有可扩展性和通用性,由驱逐策略参数化,并支持动态模型。我们证明了 DTR 可以训练一个N-层线性前馈网络 Ω (N--√) 内存预算只有 O (N)张量运算。DTR 与模拟实验中最佳静态检查点的性能密切匹配。我们仅通过插入张量分配和运算符调用并收集有关张量的轻量级元数据,将 DTR 原型合并到 PyTorch 中。

 基本操作就是使用GPU的计算资源换取神经网络每次前向传播过程中的部分中间缓存值,简而言之,就是以GPU的计算力换取GPU的显存空间,从而加载更大的batch。具体做法就是释放模型中的部分前向激活输出值,等后向传播的时候再从当前节点的上一层重新计算一次该层的输出,而不是一直保存在显存中,这样就等于提前释放了这部分显存空间,等下一次加载新的数据的时候就可以加载更大的batch。

下图是正常的模型前向和后向运行过程中每个节点的张量释放情况:

下图是使用了以计算资源来换取显存后的模型每个节点的张量释放情况:

关于释放哪一部分缓存值才是最高效的替代方法,也有一定的讲究。具体来说满足以下三个需求即可:

①被释放后需要重新计算的张量对于GPU的开销越小越好

②被释放的张量占用的显存越大越好

③被释放的张量在显存中占用的时间越长越好

 

其中,H localDTR为被释放的最优张量;C0(t)为重新计算张量时该算子运行的时长,运行时间越短对于GPU的开销越小;s(t)是张量进入显存的时长,越长越好;m(t)是张量占用的内存,越大越好。

我们的模拟显示了在合理的计算开销上的显著节省。虽然由于混叠和变异的复杂性,我们无法实现现有的静态检查点方案作为基线(特别是在动态模型中),但我们注意到,与专家手工修改模型相比,这些结果节省了类似数量的内存。例如,一个手动优化的DenseNet-BC模型[27]在降低25.5%的情况下实现了56.1%的内存消耗,而我们使用DTR-EqClass的模拟试验产生了20.0%的内存消耗,开销22.7%。尽管这些数字并不具有直接的可比性,因为模拟不包括动态分析开销,但它们说明了DTR(使用适当的启发式)可以实现内存计算的折衷,否则就需要专家进行干预。

此外,与现有的静态方法不同,DTR在具有任意动态性的模型上自动节省内存,尽管它开始在LSTM和TreeLSTM的较低预算上大打折扣。在所有情况下,结果表明,更复杂的启发式方法可以通过更低的操作符开销获得更好的内存节省,尽管这些复杂的启发式方法也引入了更多的运行时开销,这在DTR的实现中必须加以考虑。值得注意的是,即使是最不复杂的启发式算法,如LRU(需要非常少的运行时开销),也可以在抖动之前用非常少的开销实现高达30%的内存节省,这表明检查点可以很容易地获得一些内存节省。

 

论文中比较了不同模型上的不同方法,比较了不同预算(原始峰值内存使用量的一小部分)的计算减速率。每个图中的黑色区域对应于存储输入和权重所需的内存,而灰色区域表示需要同时使用最多内存的单个操作符。虚线和虚线分别表示抖动和内存不足错误之前的最后一个比率。

以下是论文中对于使用DTR前后的显存情况对比:

此外,论文中还提出了DTR的三种变种体:DTR-Full、DTR-EqClass、DTR-Local,对于3种主要hDT R变体,通过不同的内存比率比较启发式评估和元数据维护引起的总存储访问。

关于tensorflow和pytorch上的使用方法:https://github.com/merrymercy/dtr-prototype

最后祝大家在炼丹的路上越走越好,有什么好的方法也可以互相讨论。

关注微信公众号:深度人工智能学院,获取更多人工智能方面的知识!

              

                官方公众号                                                    官方微信号

dtr-prototype:动态Tensor重新实现原型(修改后的PyTorch)和模拟器。 纸 动态张量再实现(DTR)原型 DTR作者:Marisa Kirisame,Steven Lyubomirsky,Altan Haan,Jennifer Brennan,Mike He,Jared Roesch,Tianqi Chen,Zachary Tatlock 存档内容 该档案包含以下内容: data_files :从原型评估图中的运行产生的数据 dtr_configs :用于运行原型DTR实现的配置文件 dtr_code :DTR原型实现和用于运行实验评估的基础结构 simrd :模拟器实现和用于在模拟评估中生成数字的日志 checkmate_comp :Jain等人的MLSys 2020重现性工件的修改版,其中包括与simrd作为求解器的比较 注意:我们在使用NVidia Titan-V GPU(12 GB内存)的Ubuntu 18.04计算机上使用CUDA 10.1和CuDNN 立即下载

相关推荐

中科蓝讯AB536X/AB892X芯片开发避坑指南:Downloader配置中那些容易忽略的细节

本文详细解析中科蓝讯AB536X/AB892X芯片开发中Downloader配置的关键细节,包括软开关机实现、触摸灵敏度调试、量产校频等常见问题。特别针对无PR口芯片的替代方案、触摸参数优化、校频流程等易忽略环节提供实用解决方案,帮助开发者规避量产风险,提升开发效率。

weixin_30687051的博客 475

pytorch 显存逐渐增大

在训练过程中,显存随着batch的增加而增大,特别是在预测的时候. 这时候可能是因为在训练过程中存储的数组是添加的而不是覆盖的.例如在预测过程中将所有结果逐渐添加保存到一个list中,导致list越来越大,占用的显存越来越多,从而导致oom或者卡死现象. 如果一定要使用添加数组,可以考虑使用np.save分布存储,再使用np.load读取,这样就不会添加进显存. 使用 torch.cuda...

a362682954的博客 1万+

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析

本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。

weixin_30919429的博客 127

在显存不足时,增加batch size的方法

问题: 如何在显存不足的情况下,增加batch-size? 换言之,如何增加batch-size而无需扩大显存? 思路: 将batch数据,分为多个mini-batch,对mini-batch计算loss,再求和,进行反向传播。 这样内存只占用mini-batch大小的数据,用时间换空间。 pytorch实现: import torch from sklearn import metrics from torch import nn import torch.nn.functio..

qq_28969139的博客 5477

标签传播算法LPA:半监督学习解决标注数据不足的完整实战指南

在机器学习实际工程中,标注数据稀缺往往是制约模型性能的核心瓶颈。半监督学习提供了一条利用海量未标注数据来增强模型泛化能力的有效路径,其中标签传播算法(Label Propagation Algorithm, LPA)因其直观的图结构和优雅的数学原理而备受关注。LPA通过将样本映射为图中的节点,以相似度作为边权重,让已知标签沿着图结构不断扩散,从而实现对未知样本的预测。其背后基于聚类假设与流形假设,能在低标注率场景下显著缓解过拟合问题,提升分类准确率。该技术在文本分类、金融风控、图像识别等存在大量无标注数据的

weixin_29056781的博客 239

Allegro如何输出ODB文件操作指导

在PCB设计完成之后,需要输出生产文件用于生产加工,除了gerber文件可以用生产制造,ODB文件同样也可以用于生产,如下图。用Allegro如何输出ODB文件,具体操作如下。如何输出ODB文件操作指导。

weixin_54787054的博客 7202

笔记本3060显卡使用yolo-v4训练报错显存不足处理

笔记本 3060 显卡使用yolo-v4训练报错显存不足

wuxin_variable的博客 5897

RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型

本文记录的是基于 GhostNetV3 的 RT-DETR轻量化改进方法研究。GhostNetV3的轻量模块采用方法,训练时为深度可分离卷积和1×1卷积添加,推理时通过移除分支、折叠操作,能够在不增加推理成本的同时提高性能,从而实现RT-DETR的轻量化改进。

Limiiiing的博客 970

batch size大小的选择与显存

因为越大,虽然线程多了,但是切分到每一个线程消耗也大了,所以会增加CPU的负荷,从而降低对GPU的利用。模型的加载很难控制(但是考虑到部署的话就要考虑模型加载需要的显存问题了),一般调节batch_size来控制显存的占用(若出现out of memry,那就调batch_size就完事了)梯度累加则实现了batchsize的变相扩大,如果accumulation_steps为8,则batchsize '变相' 扩大了8倍,是解决显存受限的一个不错的trick。GPU利用率低的因素有很多,一般情况下,

m0_61688615的博客 1万+

通用、可复用的 AI Skill 开发基本流程

-----name:唯一标识符(建议用领域-功能格式):自然语言描述触发条件(AI 依赖此判断是否激活)tags(可选):便于分类和搜索version:支持后续迭代步骤输出物1. 定范围触发场景描述2. 写元数据name3. 填内容结构化 Markdown 文件4. 做验证可运行 + 符合规范5. 去集成放入对应 IDE 目录6. 持续维护跟进框架更新通过这套流程,你不仅可以开发(Hooks 最佳实践)(原生 WebGL 优化)(Pandas/Numpy 高效写法)

lpfasd123的博客 721

Python爬虫实战:股票历史数据抓取与量化回测全流程详解

我们以**东方财富网(eastmoney.com)和雪球网(xueqiu.com)**为主要目标,演示如何爬取A股历史行情。最常用的HTTP请求库,简单易用,适合静态页面数据请求。本文详细介绍了从股票历史数据抓取到简单回测的完整流程,代码示例基于最新技术,结构清晰,适合初学者和进阶者学习量化投资实战。希望对你入门Python爬虫和量化交易有所帮助!

2201_76125261的博客 1778

YOLO训练Batch Size怎么设?GPU显存优化建议

在YOLO目标检测模型训练中,合理设置Batch Size对显存使用和模型性能至关重要。面对CUDA显存不足问题,可通过梯度累积、混合精度训练、多卡DDP并行及输入分辨率调整等策略,在有限硬件条件下实现高效稳定训练,兼顾收敛性与泛化能力。

weixin_30923011的博客 1056

YOLO26全网首发:CVPR2026 FAA| 解决YOLO Neck跨尺度方向冲突--- FAAFusion频域对齐融合模块 | 暴力涨点篇

本文改进:FAAFusion引入YOLO neck ,代替nn.Upsample和Concat

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 636

批处理效率低?调整batch size提升Fun-ASR吞吐量

在Fun-ASR语音识别系统中,通过合理增大batch size并结合VAD语音检测技术,可显著提升GPU利用率和整体转写吞吐量。实测显示,Tesla T4上吞吐量提升超130%,任务耗时下降过半。关键在于平衡显存占用与并行效率,实现低开销、高并发的批处理推理。

weixin_42561464的博客 844

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

DAMOYOLO-S显存优化技巧:降低batch size与阈值设置对GPU占用影响

本文介绍了如何在星图GPU平台上自动化部署DAMOYOLO-高性能通用检测模型-S镜像,并利用该模型进行目标检测。通过调整batch size与置信度阈值等关键参数,可以有效优化GPU显存占用,提升模型在安防监控、图像内容分析等实际应用场景中的部署与运行效率。

weixin_35950531的博客 669

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LoRA训练助手GPU利用率优化:动态batch size适配不同显存容量

本文介绍了如何在星图GPU平台上自动化部署LoRA训练助手镜像,并优化其GPU利用率。通过动态调整batch size,该方案能自动适配不同显存容量的GPU,确保高效、稳定的AI模型训练,特别适用于个性化图片生成等场景,有效提升训练速度与资源利用效率。

weixin_28872035的博客 586

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Llama Factory GPU利用率低?算力优化实战部署案例

本文介绍了如何在星图GPU平台上自动化部署Llama Factory镜像,以解决大模型微调中GPU利用率低的常见问题。通过该平台,用户可以快速搭建环境,并利用Llama Factory对模型(如Qwen2)进行高效微调,显著提升训练速度,适用于快速定制专属AI助手等场景。

weixin_29443363的博客 924

别再瞎调batch size了!用GPU显存算力反推最佳batch size的实战技巧

本文提供了一套基于GPU显存与算力反推最佳batch size的实战方法。文章深入分析了显存容量与内存带宽两大核心约束,提供了详细的显存占用估算公式和Python脚本,并针对不同型号显卡给出了配置策略。重点强调了batch size与学习率的联动调整原则,并介绍了梯度累积、混合精度训练等高级技巧,帮助开发者科学配置参数,告别盲目试错。

weixin_29079743的博客 266

PyTorch梯度累积模拟更大Batch Size(节省GPU显存)

在GPU显存有限的情况下,通过梯度累积模拟大batch size训练,既能稳定梯度又不增加显存占用。结合PyTorch的混合精度和容器化环境,可高效实现可复现的训练流程,是AI工程师应对硬件限制的实用技能。

weixin_36213081的博客 644

Stable-Diffusion-v1-5-archive GPU利用率优化:FP16权重加载+批处理调优技巧

本文介绍了在星图GPU平台上自动化部署stable-diffusion-v1-5-archive镜像,并优化其GPU利用率的技巧。通过结合FP16权重加载与批处理调优,可显著提升AI图片生成效率,适用于快速批量创作数字艺术、概念设计等场景。

weixin_32005771的博客 408

显存占用太高怎么办?批处理大小调整建议

本文介绍了基于星图GPU平台自动化部署Speech Seaco Paraformer ASR阿里中文语音识别模型 构建by科哥镜像的实践方法。通过该平台,用户可高效配置环境,实现语音识别模型的快速上线与调优。典型应用于会议记录、访谈转写等场景,支持批处理大小调整、FP16推理优化等策略,显著降低显存占用,提升识别效率与系统稳定性。

weixin_29025501的博客 250

Batch_Size对神经网络训练效率的影响:一个PyTorch实例分析

Batch-size对神经网络训练的影响

Angelaboy的博客 1230

显存不足?Diffusers梯度累积技术让你的GPU焕发第二春

还在为GPU显存不足而烦恼吗?想要训练更大模型却受限于硬件条件?Diffusers的梯度累积技术正是你需要的解决方案!💪 这项强大的技术能让你的有限显存发挥出惊人潜力,让你在小显存GPU上也能训练高质量扩散模型。 ## 什么是梯度累积技术?🤔 梯度累积是一种**显存优化技术**,通过将一个大batch拆分成多个小batch进行前向传播,只在最后一个batch时进行反向传播和参数更新。简单来

gitblog_00649的博客 820

Qwen3-1.7B性能调优:batch_size对推理速度的影响测试

本文介绍了基于星图GPU平台自动化部署Qwen3-1.7B镜像的实践方法,重点测试了不同batch_size对模型推理速度的影响。该配置适用于批量文本生成、AI应用开发等场景,通过动态批处理显著提升吞吐量,结合LangChain可快速集成至实际业务系统。

weixin_42604188的博客 854

万象视界灵坛参数详解:batch size对GPU利用率与吞吐量的影响

本文介绍了如何在星图GPU平台上自动化部署🔮 万象视界灵坛 | Omni-Vision Sanctuary 🔮镜像,并探讨batch size对GPU利用率与吞吐量的影响。通过合理设置batch size参数,用户可优化CLIP模型的推理效率,适用于图片分类、内容审核等视觉任务,显著提升AI应用的性能表现。

weixin_42600128的博客 671

OFA-VE效果对比:不同batch size对OFA-VE GPU利用率与吞吐影响

本文介绍了如何在星图GPU平台上自动化部署OFA-VE: 赛博风格视觉蕴含智能分析系统镜像,实现高效的视觉推理任务。通过调整batch size参数,用户可优化GPU利用率与吞吐量,典型应用于智能图像分析与多模态内容理解场景,提升AI推理效率。

weixin_28933797的博客 609
上一篇: 实现人工智能的三要素
下一篇: CPU、GPU、DPU、TPU、NPU...傻傻分不清楚?实力扫盲——安排
深度人工智能
博客等级 码龄5年 636粉丝 118原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值