模型大小的指标和模型量化的指标和手段

图片

一、模型大小的指标

  • 1.计算量

计算次数,反映了模型对硬件计算单元的需求。计算量的单位是 OPs(Operations) 。最常用的数据格式 为 float32,因此float32类型下的计算量单位被写作 FLOPs (Floating Point Operations),即浮点计算次数。模型的整 体计算量等于模型中每个算子的计算量之和

例子:两个shape为(N, C, H, W)的float32 tensor相加,即add,计算量为 N x C x H x W FLOPs

  • 2.参数量

模型中的参数的总和,反映了模型占的磁盘空间。对于 CNN ,参数主要由 Conv/FC 层的 Weight 构成, 其他算子也有参数,不过跟这俩比较小,还有bias。

  • 3.访存量

指模型计算时所需访问内存/显存的字节大小,反映了模型对内存/显存带宽的需求。访存量单位为

Bytes,表示模型计算到底需要存/取多少 Bytes 的数据。

例子:两个shape为(N, C, H, W)的float32 tensor相加,即add,访存量为(2+1)x N x C x H x W x sizeof(float32) bytes

2+1指的是两个输入和一个输出,2个读入,1个输入

  • 4. (峰值)内存占用

内存占用指模型跑起来的时候(训练或推理),所占用的内存/显存大小。峰值内存占用,指 在跑起来的过程中内存/显存的占用峰值。注意,内存占用 ≠ 访存量,一般在前向传播结束的时候内存占用最高,反向传播中的一些参数不再需要,所以内存逐渐降低。

图片

二、模型量化的几个指标以及手段

1 量化指标

  • 模型大小:量化可以显著降低模型的存储空间,例如将 32 位浮点数模型量化为 8 位整数模型,可使模型大小直接降为将近 1/4。

  • 推理速度:能提高系统吞吐量,降低系统延时。例如在支持低精度计算的 CPU 上,采用 8 位数据表示时,理论上可使芯片的计算峰值增加数倍。

  • 精度损失:量化可能会导致一定的精度损失,其大小取决于量化策略、模型特性等。常见的量化方法精度损失有所不同,如 16 位量化(fp16)精度损失通常非常小;8 位量化(int8)可能有一些精度损失,通常能控制在可接受范围内,量化后模型精度与原始模型相比,精度下降往往在 1%以内;4 位量化(int4)的精度损失可能相对更大。

2 量化手段

量化按照阶段的不同,可分为量化感知训练(qat)和训练后量化(ptq)。qat 需要在训练阶段就对量化误差进行建模,一般能获得较低的精度损失;ptq 则直接对普通训练后的模型进行量化,过程相对简单。

量化算法包括对称算法和非对称算法:

  • 对称算法:通过一个收缩因子(scale)将 fp32 张量中的最大绝对值映射到 8 位数据的最大值(127),将最大绝对值的负值映射到 8 位数据的最小值(-128)。量化公式为:$x_q = round(x_f / scale)$(其中,$x_f$表示原始浮点数张量,$x_q$表示量化张量,$scale$表示收缩因子)。该算法适用于数据大致均匀分布在 0 左右的情况。

  • 非对称算法:通过收缩因子(scale)和零点(zeropoint)将 fp32 张量的最小值(min)和最大值(max)分别映射到 8 位数据的最小和最大值。量化公式为:$x_q = round((x_f - zero_point) / scale)$,其中$zero_point = rounding(scale * min_x_f)$。这种算法能较好地处理数据分布不均匀的情况,并且 zero_point 可以无误差地量化浮点数中的数据 0,从而减少补零操作在量化中产生的额外误差。

3 量化算法的动态范围的确定

在实际应用中,确定量化算法的动态范围时,为了更准确地进行量化,可以采用一些方法,例如:

  • histgram 方法:首先计算数据的直方图分布,然后通过双指针法限制筛选数据的范围,剔除部分离散点,最终得到合适的 scale。

  • entropy 方法:同样将数据分布划分为若干个 bin(类似直方图分布),然后通过 KL 散度计算量化前后的差异。KL 散度的计算公式为:$D_{KL}(p||q) = \sum_{i} p(x_i) \log(p(x_i) / q(x_i))$,其中$p(x_i)$表示量化前的数据分布,$q(x_i)$表示量化后的数据分布。

此外,还可以结合两种量化方法,例如使用对称量化来量化权重,而使用非对称量化来量化激活值,以充分利用不同方法的优势。同时,量化的效果还与具体的模型结构和应用场景有关,需要根据实际情况进行调整和优化。

有兴趣可以关注我的专栏《高性能开发基础教程》

该文章首发于 subscriptions极空AI,后续我会在上面整理完整的AI+HPC资料,并提供相关书籍推荐,至于视频要不要录制,看大家需要不需要。

有兴趣的可以关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D Web轻量化引擎HOOPS Communicator针对复杂大模型Web端可视化的解决方案

随着工程设计、制造和建筑领域中三维模型的日益复杂化,如何在Web端高效处理和展示这些大规模数据成为一大挑战。HOOPS Communicator作为一款强大的3D可视化工具,提供了一套针对复杂大模型的轻量化解决方案,涵盖了模型轻量化及格式转换、超大模…

PostgreSQL成为最受欢迎的数据库; TiDB马拉松大赛开启, Serverless和Vector为比赛焦点

重要更新 1. TiDB Hackathon大赛报名开启,总奖金达21万,主题是基于 TiDB Serverless 内置的向量搜索功能(Vector Search)构建 AI 创新应用,感兴趣的可以报名参加。( [1] ) 2. Stack Overflow 2024 开发者调研结果公布…

自学JavaScript(放假在家自学第一天)

目录 JavaScript介绍分为以下几点 1.1 JavaScript 是什么 1.2JavaScript书写位置 1.3 Javascript注释 1.4 Javascript结束符 1.5 Javascript输入输出语法 JavaScript(是什么?) 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。 2.作用(做什么?)网…

从头开始微调Llama 3.1模型

在今天的科技专栏中,我们将深入探讨如何微调Llama 3.1模型,以使其更好地适应您的特定领域数据。微调大型语言模型(如Llama)的主要目的是为了在特定领域的数据上表现更好,从而生成更符合您需求的输出。以下是我们将要介…

SpringBoot知识笔记

一、基本概念 1.1 特性 起步依赖 自动配置 其它特性:内嵌的Tomcat、Jetty(无需部署WAR文件),外部配置,不需要XML配置(properties/yml)。 1.2 配置文件 SpringBoot提供了多种属性配置方式 //application.properties server.port=9090 server.servlet.context-path…

Python爬虫知识体系-----Urllib库的使用

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349 文章目录 1. 基本使用2. 请求对象的定制3. 编解码1. get请求方式:urllib.parse.quote()2. ur…

邦布带你从零开始实现图书管理系统(java版)

今天我们来从零开始实现图书管理系统。 图书管理系统 来看我们的具体的实现,上述视频。 我们首先来实现框架,我们要实现图书管理系统,首先要搭框架。 我们首先定义一个书包,在书包中定义一个书类和一个书架类,再定义…

用Java手写jvm之实现查找class

写在前面 完成类加载器加载class的三阶段,加载,解析,初始化中的加载😀😀😀 源码 。 jvm想要运行class,是根据类全限定名称来从特定的位置基于类加载器来查找的,分别如下:…

【SQL 新手教程 2/20】关系模型 -- 主键

💗 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表 记录 (Record): 表的每一行称为记录(Record),记录是一个逻辑意义上的数据 字段 (Column):表的每一列称为字段(Colu…

吴恩达的TranslationAgent学习

TranslationAgent构成 整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译(按照Token进行划分)。 但是不论长文本翻译还是短文本翻译,总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路…

【数字IC/FPGA】使用Verdi对比两个波形

步骤一: 使用verdi打开第一个波形 bsub verdi -ssf 1.fsdb添加需要观察的信号,如下图所示: 步骤二: 新建容器,依次点击Window --> Dock to --> New Container Window。 然后输入容器的名字,如下图所…

SQL数据库:通过在视频监控平台服务器上直接使用SQL存储过程,在海量记录中查询特定时间段内-某个摄像头的所有视频片段

目录 一、背景 1、存储过程 2、视频监控系统 二、需求和数据表 1、具体要求 2、数据表 3、部分数据 三、实现 1、目标 2、创建存储过程 (1)存储过程代码 (2)创建成功 3、存储过程的解释 4、SQL命令调用方式 5、调用…

Java----队列(Queue)

目录 1.队列(Queue) 1.1概念 1.2队列的使用 1.3队列的模拟实现 1.4循环队列 1.4.1循环队列下标偏移 1.4.2如何区分队列是空还是满 1.5双端队列 (Deque) 1.队列(Queue) 1.1概念 队列:只允许在一端进行插入数据…

Linux Redhat ens33不显示IP问题

优质博文:IT-BLOG-CN 【第一步】:查看系统网卡设备 : ip addr show 【第二步】:修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens33 修改ONBOOT参数为yes 【第三步】:重启网卡,然后ping检测…

奇怪的Excel单元格字体颜色格式

使用VBA代码修改单元格全部字符字体颜色是个很简单的任务,例如设置A1单元格字体颜色为红色。 Range("A1").Font.Color RGB(255, 0, 0)有时需要修改部分字符的颜色,如下图所示,将红色字符字体颜色修改为蓝色。代码将会稍许复杂&am…

Linux:Linux进程控制

目录 1. 进程概念 1.1 并行和并发 2. 进程创建 2.1 fork()函数初识 2.2 写时拷贝 2.3 fork常规用法 2.4 fork调用失败的原因 3. 进程终止 3.1 进程场景 3.2 进程常见退出方法 4. 进程等待 4.1 进程等待必要性 4.2 进程等待的方法 4.2.1 wait方法: 4.…

2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题是由安全生产模拟考试一点通提供,起重信号司索工(建筑特殊工种)证模拟考试题库是根据起重信号司索工(建筑特…

2.9.GoogLeNet

GoogLeNet ​ 主要解决了什么样大小的卷积核是最合适的:有时使用不同大小的卷积核组合是有利的 1.Inception块 ​ Inception块由四条并行路径组成。 前三条路径使用窗口大小为11、33和55的卷积层,从不同空间大小中提取信息。 ​ 中间的两条路径在输入…

谷粒商城实战-58-商品服务-API-三级分类-删除-批量删除小结

文章目录 一,增加一个批量删除的按钮并绑定事件二,全栈工程师三,逆向工程在全栈开发中的应用提升效率的方式:使用案例: 这一节的主要内容是开发批量删除分类的功能。 一,增加一个批量删除的按钮并绑定事件 …

zh echarts样式

记录一下: 一个图的配置 在echarts官网demo界面 option {title: {text: },legend: {data: [xxx前, xxx后]},radar: {// shape: circle,name: {// 雷达图各类别名称文本颜色textStyle: {color: #000,fontSize: 16}},indicator: [{ name: 完整性, max: 1 },{ name:…