「解析」Pytorch 自动计算 batchsize

这篇具有很好参考价值的文章主要介绍了「解析」Pytorch 自动计算 batchsize。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

日志是一个十分必要的操作,有助于后期分析实验结果,特别是在多台不同环境下训练,为了区分,还是十分有必要记录相关平台信息的,比如 hostname,Python版本信息,Pytorch版本信息等!

import socket
import platform

'Python-{platform.python_version()}'				# Python 版本
'torch-{torch.__version__}'							# Pytorch 版本
socket.gethostname()								# 主机名

s = f'YOLOv5 🚀 {time_date()} Python-{platform.python_version()} torch-{torch.__version__} '

1、查看显卡信息

首先需要获取显卡信息,查看显存 File path: yolov5-7.0/utils/autobatch.py

torch.cuda.get_device_properties(0)			# 获取显卡属性
>>> _CudaDeviceProperties(name='NVIDIA GeForce RTX 4090', major=8, minor=9, 
							  total_memory=24563MB, multi_processor_count=128)
'name:' 显卡型号
'major:'
'minor:'
'total_memory:' 总显存
'multi_processor_count: '

torch.cuda.empty_cache()

"""-----------------------------------------------------------------------------------------"""
properties = torch.cuda.get_device_properties(device)		# 获取cuda:i属性

a = torch.cuda.memory_allocated(device) / gb  				# GiB allocated	当前Tensor占用的显存 
# Returns the current GPU memory occupied by tensors in bytes for a given device.

r = torch.cuda.memory_reserved(device) / gb  				# GiB reserved	总共占用的显存
# Returns the current GPU memory managed by the caching allocator in bytes for a given device.

t = properties.total_memory / gb  							# GiB total
f = t - (r + a)  											# GiB free

print(f'{cuda_i} ({properties.name}) {t:.2f}G total, {r:.2f}G reserved, {a:.2f}G allocated, {f:.2f}G free')
>>> 'CUDA:0 (NVIDIA GeForce RTX 4090) 23.99G total, 0.09G reserved, 0.05G allocated, 23.85G free'

2、自动计算 batchsize

上面已经获取了显卡的占用显存,空余显存和总显存

首先创建个 batch_size 的列表,用于计算不同小batch时,显卡的使用情况,最后再通过 np.polyfit 拟合计算出最佳的 batch_size

# Profile batch sizes
batch_sizes = [1, 2, 4, 8, 16]
try:
    img = [torch.empty(b, 3, imgsz, imgsz) for b in batch_sizes]
    results = profile(img, model, n=3, device=device)			# profile:yolov5-7.0/utils/torch_utils.py
except Exception as e:
    LOGGER.warning(f'{prefix}{e}')

# Fit a solution
y = [x[2] for x in results if x]  					# memory [2]
p = np.polyfit(batch_sizes[:len(y)], y, deg=1)  	# first degree polynomial fit
b = int((f * fraction - p[1]) / p[0])  				# y intercept (optimal batch size)
  • hasattr(): 函数用于判断对象是否包含对应的属性
  • isinstance(): 用来判断一个函数是否是一个已知的类型,类似 type()
  • torch.cuda.synchronize(): 等待当前设备上所有流中的所有核心完成
  • torch.numel(input) → int 返回输入张量中元素的总数

通过 np.polyfit 拟合可以看出,显存占用情况基本随 batch_size 线性增加,其中 np.polyfit 的 deg参数表示待拟合多项式的次数,输出结果从最高次幂依次递减 。通过上述计算的 free 显存,乘以 设定比例,然后减去 偏置显存,然后除以 斜率既是对应的 batch_size,再对其取整获得即可
「解析」Pytorch 自动计算 batchsize

3、完整版代码

「解析」Pytorch 自动计算 batchsize
「解析」Pytorch 自动计算 batchsize文章来源地址https://www.toymoban.com/news/detail-412744.html

到了这里,关于「解析」Pytorch 自动计算 batchsize的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • pytorch保存、加载和解析模型权重

    1、模型保存和加载          主要有两种情况:一是仅保存参数,二是保存参数及模型结构。 保存参数:          torch.save(net.state_dict()) 加载参数(加载参数前需要先实例化模型):          param = torch.load(\\\'param.pth\\\')          net.load_state_dict(param) 保存模型结构

    2024年02月16日
    浏览(44)
  • 使用pytorch解析mnist数据集

    当解析MNIST数据集时,以下是代码的详细介绍:    这些库是用于处理数据集和图像可视化的关键库。`torch`和`torchvision`是PyTorch的库,而`transforms`用于定义图像转换,`MNIST`用于加载MNIST数据集,`matplotlib`用于图像可视化。    这里设置了数据集的根目录。请确保你已经将MNIS

    2024年02月07日
    浏览(28)
  • Pytorch-SGD算法解析

    关注B站可以观看更多实战教学视频:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) SGD,即随机梯度下降(Stochastic Gradient Descent),是机器学习中用于优化目标函数的迭代方法,特别是在处理大数据集和在线学习场景中。与传统的批量梯度下降(Batch Gradient

    2024年02月19日
    浏览(40)
  • Pytorch-RMSprop算法解析

    关注B站可以观看更多实战教学视频:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) Hi,兄弟们,这里是肆十二,今天我们来讨论一下深度学习中的RMSprop优化算法。 RMSprop算法是一种用于深度学习模型优化的自适应学习率算法。它通过调整每个参数的学习率来

    2024年02月21日
    浏览(29)
  • Pytorch-Adam算法解析

    关注B站可以观看更多实战教学视频:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) Hi,兄弟们,这里是肆十二,今天我们来讨论一下深度学习中的Adam优化算法。 Adam算法是一种在深度学习中广泛使用的优化算法,它的名称来源于适应性矩估计(Adaptive Moment

    2024年02月20日
    浏览(41)
  • PyTorch detach():深入解析与实战应用

    PyTorch detach():深入解析与实战应用 在PyTorch中, detach() 函数是实现计算图灵活控制的关键。通过理解其背后的原理和应用场景,我们能够更有效地利用PyTorch进行深度学习模型的训练和优化。本文将深入探讨 detach() 函数的工作原理,并通过实战案例展示其在深度学习实践中的

    2024年02月20日
    浏览(40)
  • Pytorch 注意力机制解析与代码实现

    注意力机制是深度学习常用的一个小技巧,它有多种多样的实现形式,尽管实现方式多样,但是每一种注意力机制的实现的核心都是类似的,就是注意力。 注意力机制的核心重点就是让网络关注到它更需要关注的地方。 当我们使用卷积神经网络去处理图片的时候,我们会更

    2024年02月06日
    浏览(47)
  • 深度解析 PyTorch Autograd:从原理到实践

    本文深入探讨了 PyTorch 中 Autograd 的核心原理和功能。从基本概念、Tensor 与 Autograd 的交互,到计算图的构建和管理,再到反向传播和梯度计算的细节,最后涵盖了 Autograd 的高级特性。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理

    2024年02月03日
    浏览(59)
  • 深度解析BERT:从理论到Pytorch实战

    本文从BERT的基本概念和架构开始,详细讲解了其预训练和微调机制,并通过Python和PyTorch代码示例展示了如何在实际应用中使用这一模型。我们探讨了BERT的核心特点,包括其强大的注意力机制和与其他Transformer架构的差异。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网

    2024年02月10日
    浏览(35)
  • PyTorch中的torch.nn.Linear函数解析

    torch.nn是包含了构筑神经网络结构基本元素的包,在这个包中,可以找到任意的神经网络层。这些神经网络层都是nn.Module这个大类的子类。torch.nn.Linear就是神经网络中的线性层,可以实现形如y=Xweight^T+b的加和功能。 nn.Linear():用于设置网络中的全连接层,需要注意的是全连接

    2024年02月16日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包