【pytorch】深度学习所需算力估算:flops及模型参数量
创始人
2025-06-01 18:30:21
0

目录

  • 计算量的要求是在于芯片的floaps(指的是gpu的运算能力)
  • 参数量对应显存大小选型
  • 常见的英伟达显卡的FLOPS和显存规格
  • pytorch中的floaps与显存计算方法

计算量的要求是在于芯片的floaps(指的是gpu的运算能力)

确定神经网络推理需要的运算能力需要考虑以下几个因素:

网络结构:神经网络结构的复杂度直接影响运算能力的需求。一般来说,深度网络和卷积网络需要更多的计算能力。

输入数据大小和数据类型:输入数据的大小和数据类型直接影响到每层神经网络的计算量和存储需求。例如,输入数据是较大的图像或视频,需要更多的内存和计算能力。

批量大小:批量大小决定了每次处理的样本数量,也会影响到计算能力的需求。一般来说,批量大小越大,需要的计算能力就越大。

计算网络结构的浮点运算量(FLOPs):可以使用现有的工具或代码库(如TensorFlow Profiler或PyTorch Profiler)来计算网络结构的FLOPs。

参数量对应显存大小选型

PyTorch模型的参数量和GPU显存之间有一定的关系。模型参数越多,需要的显存也就越大。这是因为模型的参数需要存储在显存中,而在计算过程中,也会涉及到一些中间结果的存储和计算,所以需要足够的显存来支持模型的运行。
在部署时,需要考虑芯片的显存,是因为显存的大小限制了模型的最大批次大小。如果模型的批次大小超过了显存的大小,那么就无法将整个批次的数据同时加载到显存中,需要分批处理,这会增加模型推理的时间。因此,在部署时,需要选择适合芯片显存大小的模型和批次大小。

假设我们已知模型的参数量为100M,最大推理batchsize为32,现在需要选定适合的推理芯片显存大小。下面是一个简单的计算过程:
首先,我们需要计算出模型在最大推理batchsize下所需要的显存大小。假设模型的输入数据大小为[h, w],每个元素的数据类型为float32,那么模型每个batch的输入数据大小为[h, w, 32](32为batchsize),占用显存大小为h * w * 32 * 4(4为float32的字节大小,即4个字节),同理,输出数据大小也为[h, w, 32],占用显存大小也为h * w * 32 * 4,因此,模型在最大推理batchsize下所需要的显存大小为:

显存大小 = 输入数据大小 + 输出数据大小 + 模型参数大小
显存大小 = h * w * 32 * 4 + h * w * 32 * 4 + 100M * 4

注意,这里假设模型所有参数都是float32类型,所以模型参数大小是100M * 4,如果模型参数类型不是float32,需要相应地调整计算。
假设我们希望显存利用率达到80%,则最终选定的显存大小为:

显存大小 = (h * w * 32 * 4 + h * w * 32 * 4 + 100M * 4) / 0.8

接下来,我们需要根据计算结果选择适合的推理芯片显存大小。以NVIDIA的显卡为例,NVIDIA显卡的显存有不同的规格,例如8GB、16GB、32GB等。我们可以选择最接近计算结果的显存规格作为推理芯片的显存大小。
假设计算结果为3000MB,我们可以选择8GB的显存规格作为推理芯片的显存大小。因为8GB显卡的实际可用显存约为7500MB左右,可以满足模型在最大推理batchsize下的显存需求,同时还有一定的余量,可以保证模型能够正常运行。如果选择16GB或32GB的显存规格,虽然可以更好地满足显存需求,但是会造成显存的浪费,同时也会增加硬件成本。

一般一个参数是值一个float,也就是4个字节
1kb=1024字节

常见的英伟达显卡的FLOPS和显存规格

NVIDIA GeForce GTX 1080 Ti
FLOPS: 11.34 TFLOPS
显存: 11 GB GDDR5XNVIDIA GeForce RTX 2080 Ti
FLOPS: 14.2 TFLOPS
显存: 11 GB GDDR6NVIDIA Tesla V100
FLOPS: 7.5-15.7 TFLOPS (取决于精度)
显存: 16 GB HBM2NVIDIA Tesla P100
FLOPS: 4.7-9.3 TFLOPS (取决于精度)
显存: 16 GB HBM2NVIDIA Tesla T4
FLOPS: 8.1 TFLOPS
显存: 16 GB GDDR6NVIDIA Quadro RTX 6000
FLOPS: 16.3 TFLOPS
显存: 24 GB GDDR6

pytorch中的floaps与显存计算方法

安装库:

pip install thop

执行代码:

# -- coding: utf-8 --
import torch
import torchvision
from thop import profile# Model
print('==> Building model..')
model = torchvision.models.alexnet(pretrained=False)dummy_input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, (dummy_input,))
print('flops: ', flops, 'params: ', params)
print('flops: %.2f M, params: %.2f M' % (flops / 1000000.0, params / 1000000.0))

输出结果:

flops:  714206912.0 params:  61100840.0
flops: 714.21 M, params: 61.10 M

注:
FLOPS(Floating Point Operations Per Second)是一种计算机性能单位,用于表示每秒钟可以执行的浮点运算次数。它通常用于衡量计算机的处理速度和性能,特别是在科学计算、人工智能、大数据处理等领域。FLOPS的单位是每秒浮点运算次数,常用的前缀有k(千)、M(百万)、G(十亿)、T(万亿)等。

故在批次为1时,224*224的3通道输入,其计算量为714206912.0flops

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...