首页 > 其他分享 >关于深度学习量化的操作

关于深度学习量化的操作

时间:2024-09-23 14:53:42浏览次数:9  
标签:映射 对称 模型 学习 深度 量化 非对称 Round


0. 简介

深度学习中做量化提升运行速度是最常用的方法,尤其是大模型这类非常吃GPU显存的方法。一般是高精度浮点数表示的网络权值以及激活值用低精度(例如8比特定点)来近似表示达到模型轻量化,加速深度学习模型推理,目前8比特推理已经比较成熟。比如int8量化,就是让原来32bit存储的数字映射到8bit存储。int8范围是[-128,127], uint8范围是[0,255]。

使用低精度的模型推理的优点:1. 模型存储主要是每个层的权值,量化后模型占用空间小,32比特可以缩减至8比特,并且激活值用8比特后,减小了内存的访问带宽需求。2:单位时间内处理定点运算指令比浮点数运算指令多。

1. 量化分类

一般按照量化阶段不同分为后量化和训练时量化,用的比较多的是后量化,像tensorRT和RKNN按照量化映射方法又可以分为对称量化和非对称量化。

1.1 非对称量化(uint8 0-256)

非对称量化需要一个偏移量Z来完成零点的映射,即量化前的零点和量化后的零点不一致。非对称量化的一般公式为:

S=rmax−rminqmax−qminS=qmax−qminrmax−rmin

Z=qmax−Round(rmaxS)Z=qmax−Round(Srmax)

rmaxrmax和rminrmin表示真实数据的最大值和最小值, qmaxqmax和qminqmin表示量化后的最大值和最小值,例如uint8就是0和256。 Round()表示取整,如果是量化为int型。

1.1.1 量化

q=Round(rS+Z)q=Round(Sr+Z)

1.1.2 反量化

r=(q−Z)∗Sr=(q−Z)∗S

关于深度学习量化的操作_最小值

关于深度学习量化的操作_非对称_02

1.2 对称量化(int8 -128-127)

对称算法是通过一个收缩因子,将FP32中的最大绝对值映射到8比特的最大值,最大绝对值的负值(注意此值不是fp32的最小值,是最大绝对值的相反数,故对称)映射到8比特的最小值。对称量化在量化前和量化后的零点保持一致,即零点对应,因此无需像非对称量化那样引入一个偏移量Z。 对称量化的一般公式为:

S=∣rmax∣∣qmax∣S=∣qmax∣∣rmax∣

1.2.1量化

q=Round(rS)q=Round(Sr)Round()表示取整,如果是量化为int型。

1.2.2 反量化

r=q∗Sr=q∗S

关于深度学习量化的操作_最小值_03

关于深度学习量化的操作_非对称_04

2. 量化的优缺点

2.1 量化的优点

  1. 减小模型尺寸,如8位整型量化可减少75%的模型大小
  2. 减少存储空间,在边缘侧存储空间不足时更具有意义
  3. 易于在线升级,模型更小意味着更加容易传输
  4. 减少内存耗用,更小的模型大小意味着不需要更多的内存
  5. 加快推理速度,访问一次32位浮点型可以访问四次int8整型,整型运算比浮点型运算更快
  6. 减少设备功耗,内存耗用少了推理速度快了自然减少了设备功耗
  7. 支持微处理器,有些微处理器属于8位的,低功耗运行浮点运算速度慢,需要进行8bit量化

2.2 量化的缺点

  1. 模型量化增加了操作复杂度,在量化时需要做一些特殊的处理,否则精度损失更严重
  2. 模型量化会损失一定的精度,虽然在微调后可以减少精度损失,但推理精度确实下降

3. 对称和非对称使用

对称量化无需引入偏移量Z,因此计算量低,缺点是量化后的数据是非饱和的,即有一部分区域不存在量化的数据。

非对称量化因为额外引入了一个偏移量来修正零点,因此需要的计算量会大一点。优点是其量化后的数据是饱和的,即量化前的最小值对应量化范围的最小值,量化后的最大值对应量化范围的最大值。

关于深度学习量化的操作_深度学习_05

对于fp32的值若均匀分布在0左右,映射后的值也会均匀分布,若fp32的值分布不均匀,映射后不能充分利用。所以非对称可以处理好FP32数据分布不均匀的情况

若对称算法产生的量化后数据很多都是在【0,127】内,左边的范围利用很少,减弱了量化数据的表示能力,影响模型精度。

关于深度学习量化的操作_非对称_06

此外还有很多其他的魔改版本,比如激活值饱和量化,通过选择合适的阈值T来将一些范围利用少的情况去除,然后再做对称量化。从而也实现对应的饱和量化的操作。下图为魔改版本激活值饱和量化(右图),选择合适的阈值T。以及原始版本权值非饱和量化(左图)

关于深度学习量化的操作_人工智能_07

标签:映射,对称,模型,学习,深度,量化,非对称,Round
From: https://blog.51cto.com/u_15641375/12089383

相关文章

  • 【开题报告+文档+源码】基于SSM框架的诗词吟诵知识学习系统的设计与实现
    项目背景与意义随着信息技术的迅猛发展,互联网已经成为人们获取知识的重要途径。特别是在线教育平台的兴起,使得教育资源得以更广泛的传播和利用。为了满足青岛滨海学院学生对吟诵知识学习的需求,本文设计并实现了一个基于SSM(Spring+SpringMVC+MyBatis)框架的吟诵知识学习系统......
  • 基于springboot+vue的高校学生考勤系统-可用于计算机毕设-课程设计-练手学习
    博主简介:......
  • hive学习笔记之二:复杂数据类型
    selectperson,friends[0],friends[3]fromt2;执行结果如下,第一条记录没有friends[3],显示为NULL:hive>selectperson,friends[0],friends[3]fromt2;OKperson _c1 _c2tom tom_friend_0 NULLjerry jerry_friend_0 jerry_friend_3Timetaken:0.052seconds,Fetched:2......
  • jackson学习之五:JsonInclude注解
    本文是《jackson学习》系列第五篇,来熟悉一个常用的注解JsonInclude,该注解的仅在序列化操作时有用,用于控制方法、属性等是否应该被序列化;之所以用单独的一篇来写JsonInclude注解,是因为该注解的值有多种,每种都有不同效果,最好的学习方法就是编码实战;先对注解的所有取值做个简......
  • D15【python接口自动化学习】-python基础之内置数据类型
    day15字典的常见操作(上)学习日期:20240922学习目标:内置数据类型--24常见常新:字典的常见操作(上)学习笔记:字典的内置函数访问字典的内容#访问字典的所有元素mail_list={'tom':'[email protected]','jerry':'[email protected]','john':'[email protected]'}print(mail_li......
  • 零基础转行大模型学习路线,存下吧❗❗
    从0⃣-1⃣学习AI大模型,看着一篇就对了从私有化部署、微调、项目实战等多个方面给大家介绍如何✅正确入门AI大模型,涉及的领域范围面广,涵盖各行各业大模型项目落地场景,想学AI大模型这篇资料必备!!......
  • 机器学习
    深度神经网络主要研究的问题:深度学习技术主要是数据驱动的,即对一个特定任务来说,只要增加训练数据的规模深度学习模型的表现就可提高。但是发展到今天,这种思路面临很多挑战,主要问题问题:一是在很多领域,很难获取大量的监督数据,或者数据的标注成本过高二是训练数据规模再大,也有......
  • OpenAI o1模型揭秘:通过LLMs学习推理能力
    OpenAI推出了o1,这是一种通过强化学习训练的大型语言模型,专门用于进行复杂的推理任务。o1在回答问题之前会“思考”,能够在响应用户之前生成一条长的内部思维链。在编程竞赛问题(Codeforces)中,OpenAIo1的排名在89%分位,位列美国数学奥林匹克预选赛(AIME)前500名学生之列,并且在物理、生......
  • sql语法学习:关键点和详细解释
    学习SQL语法是掌握数据库操作的基础。以下是SQL语法的一些关键点和详细解释:1.SQL基础SQL(StructuredQueryLanguage)是一种用于管理和操作关系型数据库的标准语言。它主要包括以下几个部分:数据定义语言(DDL):用于定义数据库结构,如创建、修改和删除数据库对象。数据操作语言(DML......
  • OpenAI o1模型揭秘:通过LLMs学习推理能力
    OpenAI推出了o1,这是一种通过强化学习训练的大型语言模型,专门用于进行复杂的推理任务。o1在回答问题之前会“思考”,能够在响应用户之前生成一条长的内部思维链。在编程竞赛问题(Codeforces)中,OpenAIo1的排名在89%分位,位列美国数学奥林匹克预选赛(AIME)前500名学生之列,并且在物理、生......