当前位置: 首页 > news >正文

深度学习模型部署(四)常用模型及推理平台评估指标

判断选择什么模型,什么量化方案,什么推理框架,最基础的知识就是如何评估自己的模型以及推理平台。

模型衡量标准

衡量一个模型的最直接标准就是运算速度,但是运算速度是无法计算的,所以定义了一些间接标准来推测模型的运算速度。这些标准不仅仅可以用来选择模型的量化方案,在设计模型时也应该有所参考。

模型计算量FLOPs

Floating point operations,浮点运算数量,代表一次推理需要的浮点运算次数

注意不要与FLOPS混淆,FLOPS是floating point operations per second指芯片每秒浮点运算数量用于衡量芯片的运算能力。

例如对于一个普通CNN卷积层,输入尺寸为 C o u t × H × W C_{out}\times H\times W Cout×H×W输出尺寸相同,卷积核尺寸 K = 3 K=3 K=3,添加偏置 b i a s bias bias
一次卷积的运算量:

  • 乘法: C i n K 2 C_{in} K^2 CinK2
  • 加法: C i n ( K 2 − 1 ) + ( C i n − 1 ) + 1 = C i n K 2 C_{in}(K^2-1)+(C_{in}-1)+1=C_{in}K^2 Cin(K21)+(Cin1)+1=CinK2

输出尺寸 C o u t × H × W C_{out}\times H\times W Cout×H×W中的每个像素点都是一次卷积,运算量共计:
2 C i n C o u t H W × K 2 2C_{in}C_{out}HW\times K^2 2CinCoutHW×K2

计算方法的不同以及是否添加bias导致算出来的结果可能不完全一样,无所谓,FLOPs这种就跟算法中的复杂度O(n)差不多,常数不会对结果产生数量级的影响。
FLOPs只是一个衡量标准,还有其他的衡量标准例如MACCs,multiply-accumulate operations,乘-加操作次数,一次乘法+一次加法为一个MACCs,MACCs 大约是 FLOPs 的一半。

模型参数量parameters

顾名思义,模型的参数总量
例如对于普通CNN卷积层,一共有 C i n C o u t C_{in}C_{out} CinCout个卷积核,参数量: C i n C o u t × K 2 C_{in}C_{out}\times K^2 CinCout×K2

模型内存访问代价MAC

一次前向推理的过程中,模型内存交换的总量,体现了模型的空间复杂度。

模型计算强度

I = F L O P s M A C I=\frac{FLOPs}{MAC} I=MACFLOPs,表示每次内存交换对应多少次浮点运算,计算强度越大,模型内存利用率越高,

模型量化就约等于是运算量不变,但是每次运算本来要读取fp32,4个字节,现在换成了读取int8,1个字节,MAC降低了,模型计算强度提高了。

推理平台衡量标准

算力FLOPS

每秒浮点数运算次数,(用 π \pi π来表示)

带宽

每秒的内存交换量,(用 β \beta β表示)

计算强度上限

I m a x = π β I_{max}=\frac{\pi}{\beta} Imax=βπ

理论上模型的计算强度刚好达到推理平台的计算强度上限时性能最佳,这个理论最佳性能称为roof-line。计算强度低于 I m a x I_{max} Imax时被称为带宽瓶颈区,这时推理平台的性能没有完全发挥出来,性能的上限取决于模型的计算强度;计算强度高于 I m a x I_{max} Imax时称为计算瓶颈区,平台的算力得到了充分利用。
在这里插入图片描述

不过想要达到roof-line不是光考虑模型的计算量和内存访问代价就够的。因为实际计算过程中还有除算力和带宽之外的其他重要因素,它们也会影响模型的实际性能,这是 Roofline Model 未考虑到的。例如矩阵乘法,会因为 cache 大小的限制、GEMM 实现的优劣等其他限制,导致你几乎无法达到 Roofline 模型所定义的边界(屋顶)。

GEMM指通用矩阵乘法,这个在后面的blog中我们也要讲到,多年来数学家和计算机科学家都在努力优化矩阵乘法,但是进展不大,最近清华姚班大佬发了一篇paper被称为十年来矩阵乘法的最大优化,有空可以读一下
论文地址:https://epubs.siam.org/doi/10.1137/1.9781611977912.134
在这里插入图片描述
多年来矩阵乘法优化算法的发展历程
pytorch社区中的一篇讲解矩阵乘法的blog:https://pytorch.org/blog/inside-the-matrix/

解放双手

这么复杂的运算,自然不会是考我们人手工计算然后评估模型,实际上有很多用于评估模型的库,实践如下:

pytorch自行计算

如果只是评估模型参数量,不需要进行借助工具,直接两行代码就搞定

from torchvision.models import resnet50model = resnet50()
total = sum([param.nelement() for param in model.parameters()])
print("parameter:%fM" % (total/1e6))

Torchstat

  • 统计模型的参数量、计算量、访存量等指标,且会针对模型的每层指标进行打印;
  • 部分指标与常见含义不同,具体会结合yolov5的指标进行介绍
  • 只对常见网络层进行统计;
  • 安装方法如下:
pip install torchstat
  • 使用方法如下:
import torch
import torchvision.models as models
from torchstat import statmodel = models.resnet50(pretrained=True)# 使用torchstat的stat函数来分析模型
stat(model, (3, 224, 224))

Thop

top这个词在计算机领域很常见,很多关系到性能的都会有top这个词,例如Linux平台下的性能管理工具:top,Jetson中的性能检测工具:jtop。这是为啥呢,不懂。

  • 统计模型的参数量和计算量;
  • 部分指标与常见含义不同,具体会结合yolov5的指标进行介绍;
  • 只对常见网络层进行统计;
  • 安装方法如下:
pip install thop
  • 使用方法如下:
from torchvision.models import resnet50
from thop import profile
model = resnet50()
input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, inputs=(input, ))
print("FLOPs=", str(flops/1e9) + '{}'.format("G"))
print("params=", str(params/1e6) + '{}'.format("M"))

更复杂的使用建议用到了再去翻文档学习,工具类的提前学习没有意义。

如果感觉有帮助,点赞收藏+关注,thanks

相关文章:

深度学习模型部署(四)常用模型及推理平台评估指标

判断选择什么模型,什么量化方案,什么推理框架,最基础的知识就是如何评估自己的模型以及推理平台。 模型衡量标准 衡量一个模型的最直接标准就是运算速度,但是运算速度是无法计算的,所以定义了一些间接标准来推测模型的…...

【控制台警告】npm WARN EBADENGINE Unsupported engine

今天用webpack下载几个loader依赖,爆出了三个警告,大概的意思就是本地安装的node和npm的版本不是很匹配? 我的解决思路是: 先检查node和npm版本 然后去官网查找版本的对应 靠,官网404 Node.js (nodejs.org) 就找到…...

ArmSoM Rockchip系列产品 通用教程 之 GPIO 使用

1. GPIO简介​ GPIO,全称 General-Purpose Input/Output(通用输入输出),是一种在计算机和嵌入式系统中常见的数字输入输出接口。它允许软件控制硬件的数字输入和输出,例如开关、传感器、LED灯等。GPIO通常由一个芯片或…...

npm镜像源地址

镜像源地址替换问题(重要) 2024 年 1 月 22 日 ,registry.npm.taobao.org 的 SSL 证书正式过期。 2022 年 5 月 淘宝源发布了公告: (大家应该没有太多关注哦,也包括我,哈哈) &am…...

Java的Writer类详解

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…...

R语言基础的代码语法解译笔记

1、双冒号,即:“::” 要使用某个包里的函数,通常做法是先加载(library)包,再调用函数。最新加载的包的namespace会成为最新的enviroment,某些情况下可能影响函数的结果。而package name::funct…...

【蓝桥杯】蓝桥杯算法复习(一)

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!&#x1f4…...

移动端精准测试简介

在测试领域每隔一段时间,就会有一些主流的测试技术,比如说:接口自动化,WebUI, AppUI自动化,然后就是测试平台的开发,各类专项测试(性能,安全),再到前几年的手机集群云测平…...

CCProxy代理服务器地址的设置步骤

目录 前言 一、下载和安装CCProxy 二、启动CCProxy并设置代理服务器地址 三、验证代理服务器设置是否生效 四、使用CCProxy进行代理设置的代码示例 总结 前言 CCProxy是一款常用的代理服务器软件,可以帮助用户实现网络共享和上网代理。本文将详细介绍CCProxy…...

探秘分布式神器RMI:原理、应用与前景分析(二)

本系列文章简介: 本系列文章将深入探究RMI远程调用的原理、应用及未来的发展趋势。首先,我们会详细介绍RMI的工作原理和基本流程,解析其在分布式系统中的核心技术。随后,我们将探讨RMI在各个领域的应用,包括分布式计算…...

[项目设计] 从零实现的高并发内存池(三)

🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[高并发内存池] ❤️ 前置学习专栏:[Linux学习] ⏰ 我们仍在旅途 ​ 目录 4.CentralCache实现 4.1 CentralCache整体架构 4.2 围绕Span的相关设计…...

将Q算法和D算法结合应用到llm解码上之人在回路

将Q算法和D算法结合应用到llm解码上之人在回路 参考地址代码解释 参考地址 https://dongfangyou.blog.csdn.net/article/details/136466609 代码 import numpy as np from tqdm import tqdmfrom sample import net, char2id_dict, get_real_p# 假设的词汇表 VOCABULARY lis…...

el-table-column嵌套el-form-item不能进行校验问题解决

项目为vue3elementPlus开发的项目 业务要求:table表格展示数据,其中有一行是ip地址可展示可修改,此处要求增加自定义校验规则 先看一下效果: 此处先描述一下,问题出在了哪里,我将el-table的data,使用一个…...

leetcode200. 岛屿数量

leetcode200. 岛屿数量 题目 思路 遍历每一个网格,若网格为1,岛屿数量1,利用一个深度优先搜索函数将岛屿置零,注意判断数组边界 代码 class Solution:def numIslands(self, grid: List[List[str]]) -> int:self.grid grid…...

MySQL--索引类型详解

索引的类型 主键索引: PRIMARY KEY,当一张表的某个列是主键的时候,该列就是主键索引,一张表只允许有一个主键索引,主键所在的列不能为空。 创建主键索引的SQL语法: # 给user表中的id字段创建名为id_ind…...

R语言中ggplot2图例位置、颜色、背景、标题

目录 1、不显示图例 2、自定义图例位置 3、修改图例背景颜色、外框颜色、大小 4、修改图例大小 5、图例设置背景、线框为空 6、自定义设置多个图例的标题 7、设置多个图例的之间的间隔 8、取消不需要的图例显示 1、不显示图例 theme(legend.position "none"…...

波卡 Alpha 计划启动,呼唤先锋创新者重新定义 Web3 开发

原文:https://polkadot.network/blog/the-polkadot-alpha-program-a-new-era-for-decentralized-building-collaboration/ 编译:OneBlock 区块链领域不断发展,随之而来的是发展和创新机会的增加。而最新里程碑是令人振奋的 Polkadot Alpha …...

公网IP与私有IP及远程互联

1.公网有私有IP及NAT 公网IP是全球唯一的IP,通过公网IP,接入互联网的设备是可以访问你的设备。但是IPV4资源有限,一般ISP(Internet Service Provider)并不会为用户提供公网IP。所以家里的计算机在公司是没法直接使用windows远程桌面直接访问…...

openCV xmake debug失效 release可以使用

在使用xmake构建一个项目时,添加openCV库,调用 imread函数时,debug函数失效, release可以使用,最后发现是xmake.lua写的有问题 option("OpenCV4.6.0")set_showmenu(true) set_default(true) set_category(&…...

ES分布式搜索-IK分词器

ES分词器-IK 1、为什么使用分词器? es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。 我们在kibana的DevTools中测试: GET /_analyze {"analyzer": "…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...