解决训练时显存不断增大问题

问题描述:在训练时显存不断增大,最终显存爆炸

在上一篇提到,为了解决这个问题我无意间解决了另一个问题,但发现那个问题并不是根本原因,于是我又查阅了一些资料,经过一番尝试后找到了真正原因。
首先网上有一些解决方法,例如:

在这里插入图片描述
但是经过尝试,无论添加与否,显存还是在不断增加
最终原因是由于我在训练时将一个中间结果不断地存进了一个列表里,并始终没有清空,最终导致了显存爆炸的问题
在这里插入图片描述

最终注释掉这一行成功解决问题,在循环中尽量少用append方法,如果要保存中间结果,利用np.save等方法储存较好。

### YOLO训练速度变慢的原因 YOLO训练过程中速度逐渐变慢可能由多种因素引起,以下是主要原因及其对应的解决方案: #### 1. 磁盘I/O瓶颈 如果硬盘的缓存读取速度(Cached Read Speed)和不带缓存的读取速度(Buffered Disk Read Speed)较低,则可能导致数据加载缓慢,从而影响整体训练速度[^1]。 #### 2. Batch Size过大 过大的Batch Size不仅会增加内存消耗,还可能导致显卡内存不足的问题。此外,较大的Batch Size会使损失函数(Loss Function)难以收敛,并且随着Batch Size的增大,达到相同精度所需的Epoch数量也会增多[^2]。 #### 3. 数据预处理耗 复杂的图像预处理操作(如高分辨率输入、过多的数据增强策略等),可能会显著延长每轮迭代的间。因此,在不影响模型性能的前提下简化这些过程是非常重要的[^4]。 #### 4. GPU资源利用率低 当GPU未能被充分利用,即使硬件配置足够强大也无法有效加速训练进程。这可能是由于程序本身存在同步等待间或者多线程管理不当等原因造成的。 #### 解决方案 针对以上提到的各种潜在原因,可以采取如下措施来提升YOLO模型训练的速度: - **优化磁盘访问**: 使用更快的存储介质(SSD代替HDD), 并确保操作系统已开启文件系统的写入缓冲功能; 同考虑采用分布式计算框架以分摊单节点上的压力. - **调整超参数设置**: - 减少`batch size`, 这样既能缓解显存占用又能促进更稳健的学习动态; - 调整合适的`image resolution`(图片尺寸); - **改进数据管道效率**: 实现异步数据加载机制, 预先准备好下一批次所需样本而无需阻塞主线程执行流程. - **升级算法版本或引入新技术** 结合最新的研究成果不断改良原有体系结构, 如尝试新型激活函数ReLU替代传统sigmoid/tanh形式等等[^3]. ```python import torch.optim as optim def adjust_learning_rate(optimizer, epoch): """Sets the learning rate to the initial LR decayed by 10 every X epochs""" lr = args.lr * (0.1 ** (epoch // args.step)) for param_group in optimizer.param_groups: param_group['lr'] = lr optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=0.9, weight_decay=1e-4) for epoch in range(start_epoch, start_epoch + num_epochs): train_loader.sampler.set_epoch(epoch) adjust_learning_rate(optimizer, epoch) train(train_loader, model, criterion, optimizer, epoch) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值