「解析」Pytorch 自动计算 batchsize

news/2024/11/29 12:37:06/

日志是一个十分必要的操作,有助于后期分析实验结果,特别是在多台不同环境下训练,为了区分,还是十分有必要记录相关平台信息的,比如 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 freeprint(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,再对其取整获得即可
在这里插入图片描述

3、完整版代码

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/48706.html

相关文章

javascript中this指向问题

JavaScript中this指向问题 1、this指向window的情况 对于非箭头函数情况下,谁调用就指向谁,如果函数在全局作用域下调用,里面的this就是window。 在全局作用域下,this window function sum() {console.log(this); }sum(); // windowconsole.log(this…

educoder实训——函数【1】

文章目录 无参无返回值函数任务描述代码无参有返回值函数任务描述代码有参有返回值函数任务描述代码多参函数任务描述代码任意数量参数任务描述代码pow函数详解任务描述编程要求代码最大公约数任务描述编程要求代码最小公倍数<

ReetrantLock源码剖析_03公平锁、非公平锁

一直努力就会有offer&#xff0c;一直努力就会有offer&#xff0c;一直努力就会有offer&#xff01; 文章目录 ReetrantLock公平锁代码解析ReetrantLock公平锁执行流程ReetrantLock非公平锁代码解析ReetrantLock非公平锁执行流程公平锁与非公平锁的比较 ReetrantLock公平锁代码…

KDZD608屏蔽服效率测试仪

一、产品概述 KDZD608型屏蔽服效率试验装置&#xff08;带电作业用屏蔽服屏蔽效率试验装置&#xff09;是对屏蔽服进效率试验的专用设备&#xff0c;广泛用于电力系统、生产厂家和科研单位不可缺少的检测设备。KDZD608型屏蔽服效率试验装置根据最新国家标GB6568.2-86《带电作业…

苹果跌倒检测新专利获得,结合苹果Find My可准确定位

苹果首款“跌倒检测”功能专利可追溯到 2018 年公示的 20190103007&#xff0c;后续又获得了至少 5 项相关专利。根据美国商标和专利局&#xff08;USPTO&#xff09;上周四公示的专利&#xff0c;苹果公司再次获得了一项“跌倒检测”功能专利。 苹果在报告中表示&#xff0c…

数据结构和算法面试题系列-栈

0 概述 栈作为一种基本的数据结构&#xff0c;在很多地方有运用&#xff0c;比如函数递归&#xff0c;前后缀表达式转换等。本文会用C数组来实现栈结构(使用链表实现可以参见链表那一节&#xff0c;使用头插法构建链表即可)&#xff0c;并对常见的几个跟栈相关的面试题进行分析…

怎么恢复回收站清空删除的文件

当回收站中的文件被清空时&#xff0c;看到有重要的文件被误删了&#xff0c;该怎么恢复回收站清空删除的文件呢?相信有不少人都碰到过这样的事&#xff0c;那么我们如何解决它呢?首先在发现回收站中的数据丢失后&#xff0c;应尽可能避免一切写操作&#xff0c;以保证丢失的…

Unity之ShaderGraph入门

前言 随着Unity版本的不断升级&#xff0c;URP&#xff08;可编程渲染管线&#xff09;也越来越普及了。不管是从效果还是性能&#xff0c;都是吊打老版的build-in-shader。所以无论如何我们都要开始 拥抱URP&#xff0c;升级Unity的时候到了。 引擎版本 我这里选择了Unity …