当前位置: 首页 > 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": "…...

从Windows到Linux:Kettle 8.2作业与转换的跨平台部署实战指南

从Windows到Linux:Kettle 8.2作业与转换的跨平台部署实战指南 在数据工程领域,跨平台ETL流程部署一直是企业级应用的关键挑战。当开发环境采用Windows而生产环境运行Linux时,如何确保Kettle作业无缝迁移?本文将深入解析从图形化开…...

高效Markdown浏览器插件:轻松预览本地与在线文档的完整解决方案

高效Markdown浏览器插件:轻松预览本地与在线文档的完整解决方案 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 还在寻找一款能够优雅渲染Markdown文档的浏览器扩展吗…...

告别手动匹配:Brigadier如何用一行命令解决Boot Camp驱动难题

告别手动匹配:Brigadier如何用一行命令解决Boot Camp驱动难题 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 还记得那些在Mac上安装Windows时,为了找一个正确…...

Windows 10变身简易服务器:低成本搭建多用户远程开发/测试环境全记录

Windows 10变身简易服务器:低成本搭建多用户远程开发/测试环境全记录 在当今快节奏的开发环境中,团队协作和资源共享变得越来越重要。对于小型团队、学生项目组或个人开发者来说,购买专业服务器设备往往意味着高昂的成本投入。而实际上&#…...

d2s-editor暗黑破坏神2存档编辑器:打造完美角色的终极Web工具

d2s-editor暗黑破坏神2存档编辑器:打造完美角色的终极Web工具 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾经梦想过完全掌控暗黑破坏神2的角色成长轨迹?d2s-editor暗黑破坏神2存档编辑器正是你…...

告别嗡嗡声与异常发热:深入解读PWM整流器在电网不平衡时的两种主流控制方案

告别嗡嗡声与异常发热:深入解读PWM整流器在电网不平衡时的两种主流控制方案 光伏逆变器突然发出刺耳的蜂鸣声,充电桩散热风扇狂转不止——这些现象背后,往往隐藏着电网电压不平衡时PWM整流器的控制难题。当三相电压幅值出现差异,…...

告别啸叫与发热!手把手教你搞定DC-DC电源PCB布局(附Buck电路实战避坑清单)

告别啸叫与发热!手把手教你搞定DC-DC电源PCB布局(附Buck电路实战避坑清单) 在硬件工程师的日常工作中,DC-DC电源模块的设计总是让人又爱又恨。高效的电源转换性能背后,往往隐藏着各种"暗坑"——莫名其妙的啸…...

从周期到成长:中国巨石如何成为AI材料基础设施核心?

4月15日晚间,中国巨石披露2026年一季度业绩预告,预计归母净利润11.69亿元至13.15亿元,同比增长60%至80%;扣非净利润同样增长60%至80%。如果仅从数字看,这是一个典型的高增长季度,但更重要的问题是&#xff…...

超越TextMeshPro基础:用AnimationCurve打造动态弯曲文字效果

超越TextMeshPro基础:用AnimationCurve打造动态弯曲文字效果 在AR/VR和交互式UI设计中,动态文字效果往往能带来更沉浸的体验。传统的静态文字布局已经无法满足现代应用对视觉表现力的需求,而TextMeshPro作为Unity中最强大的文字渲染工具&…...

避坑指南:STM32连接ADS1256时SPI时序与DRDY引脚的那些事儿

STM32与ADS1256高效通信实战:SPI时序优化与DRDY引脚深度解析 调试ADS1256这类高精度ADC时,工程师们常会遇到数据不稳定、通信失败等"玄学问题"。上周深夜,当我第三次抓取到杂乱的SPI波形时,才意识到数据手册里那些微妙…...