从零学习大模型(十四)-----量化(一)

什么是量化?

量化(Quantization)是一种在计算机科学和深度学习中广泛应用的技术,其基本目标是通过减少模型中数值表示的位宽来降低计算和存储成本。简单来说,量化就是将高精度(通常是浮点数)转换为低精度(通常是定点数)表示,同时尽量保持模型的性能和准确性。

量化通常用于深度学习模型(尤其是大模型)中,以减小模型的存储空间和提高推理速度。量化不仅可以减少模型的内存占用,还能提高硬件的计算效率,尤其是在低功耗设备(如移动端、嵌入式系统、边缘计算设备)上。

定点表示(Fixed-Point Representation)

定点表示是将数字表示为整数,且在数字的整数部分和小数部分之间有一个固定的分界点。也就是说,定点数有固定的精度和范围,数字的小数部分的位数是事先定义的,不会动态变化。

结构:

定点数的表示形式可以看作是一个整数,通过乘上一个固定的缩放因子来表示小数。例如,一个定点数可以用两个部分表示:

  • 整数部分:用于表示数字的整数部分
  • 小数部分:表示小数部分,通常通过预定的比例因子来控制精度(例如,乘以 2 k 2^k 2k 来得到小数部分)

举例:

假设我们选择一个8位的定点数,其中3位表示整数部分,5位表示小数部分。

数字 3.25 会被表示为 3.25 × 2 5 = 104 3.25 \times 2^5 = 104 3.25×25=104,然后存储为整数104。在计算过程中,每次使用这个定点数时,会用一个固定的因子(如 2 5 2^5 25)来转换为小数。

优点:

  • 计算效率高:定点数的加减乘除操作比浮点数简单且快速,因为它们可以使用整数运算。
  • 存储效率高:定点数在存储上比浮点数节省空间,因为没有存储指数部分,所有的数字都用固定的位宽表示。
  • 确定性:定点表示在每次运算中使用相同的精度和范围,没有浮动。

缺点:

  • 灵活性差:定点数的精度和表示范围是固定的,不能动态调整。在表示非常大或非常小的数字时可能会失去精度。
  • 精度限制:小数部分的精度是有限的,如果数字超出了预定的表示范围或需要更高精度,可能会发生溢出或精度丢失。

浮点表示(Floating-Point Representation)

浮点表示是一种更灵活的数字表示方式,它通过使用科学记数法的形式来表示数字,通常由三个部分组成:

  • 符号位(Sign bit):表示数字的正负
  • 指数部分(Exponent):表示数值的数量级
  • 尾数部分(Mantissa 或 Fraction):表示数字的有效位,确定数字的精度

结构:

浮点数的标准形式是:

( − 1 ) s × m × b e (-1)^s \times m \times b^e (1)s×m×be

其中:

  • s s s 是符号位(0表示正数,1表示负数)
  • m m m 是尾数(也称为有效数字或分数)
  • b b b 是基数(通常为2)
  • e e e 是指数,用来表示数字的范围

举例:

假设我们有一个32位的浮点数表示(符合IEEE 754标准),其组成如下:

  • 1位符号位
  • 8位指数
  • 23位尾数

对于数字 3.25,可以表示为:

3.25 = 1.625 × 2 1 3.25 = 1.625 \times 2^1 3.25=1.625×21

其中,符号位是0(正数),指数是1,尾数是1.625。根据IEEE 754规范,尾数会进行标准化,并存储为一个二进制数。

优点:

  • 表示范围大:浮点数可以表示非常大或非常小的数,动态范围非常广泛。
  • 精度灵活:浮点数通过动态调整指数部分,可以在需要时增加或减少精度。
  • 适应性强:可以处理各种规模的数据,特别是需要高精度或者需要表示大范围数值的场景,如科学计算和机器学习。

缺点:

  • 计算成本高:浮点数的运算比定点数复杂,需要额外的硬件支持(如浮点运算单元)来处理指数和尾数部分。
  • 存储空间大:浮点数需要存储指数和尾数,相比定点数,它们需要更多的存储空间(如32位或64位)。
  • 可能存在精度问题:浮点数在计算时可能会因为舍入误差而引入精度丢失,尤其是在处理非常小或非常大的数字时。

两者的区别

特征定点表示(Fixed-Point)浮点表示(Floating-Point)
表示范围受限于固定的小数位数,适用于较小的数字范围。表示范围非常大,可以表示极大或极小的数字。
精度小数位数固定,精度在表示过程中不可调整。精度可以根据需要进行调整,动态范围灵活。
计算速度计算速度快,适合硬件实现。计算较慢,涉及指数运算,硬件成本较高。
存储需求存储效率高,数据量小,适合资源受限的环境。存储开销大,尤其是高精度浮点数(如64位)。
硬件支持易于在低功耗、低资源的硬件上实现(如嵌入式设备)。浮点硬件支持较为复杂,且功耗较高。
应用场景适用于对精度要求不高且对性能和存储有严格要求的场景,如嵌入式系统。适用于对计算精度要求较高、范围广的科学计算、机器学习等场景。

量化的过程

量化的过程可以细分为几个重要步骤,其中 范围选择精度设置量化函数 是关键环节。以下是这三个步骤的详细说明:

1. 范围选择(Range Selection)

范围选择是量化过程中的第一步,决定了要将浮点数值映射到什么样的定点数范围。选择合适的量化范围至关重要,因为它直接影响量化后模型的精度和性能。

步骤:
  • 收集统计数据:首先需要对待量化的变量(如权重或激活)的值进行统计,通常使用训练数据或者校准数据(如果是量化感知训练或后训练量化)来计算。
  • 最大值和最小值:确定数据的最大值和最小值是选择量化范围的关键。如果使用对称量化,最大值和最小值的绝对值相同;如果使用非对称量化,最大值和最小值可以不对称。
选择量化范围:
  • 对称量化:对于对称量化,量化范围通常是围绕0对称的。例如,如果最大值是+3.5,最小值是-3.5,量化范围就是从-3.5到+3.5。
  • 非对称量化:如果量化范围不对称,可以选择分别计算最大值和最小值。例如,最大值为+5,最小值为0,那么量化范围就是从0到+5。
  • 动态范围选择:在某些情况下,量化范围是动态选择的。例如,随着训练的进行,模型的参数可能发生变化,这时需要动态地调整量化范围。
影响因素:
  • 数据的分布:数据是对称的还是偏态分布?偏态分布时,非对称量化可能更合适。
  • 精度要求:量化范围的选择会影响到数值的表示精度,过小的范围可能导致溢出,过大的范围可能浪费存储。

2. 精度设置(Precision Setting)

精度设置决定了量化后数值的位宽,即每个数值使用多少位来表示。这一步骤决定了量化的精度和计算效率,涉及以下几个方面:

步骤:
  • 选择位宽:量化位宽是量化过程中最关键的参数,通常以比特数(bit)来表示。常见的量化位宽有8-bit、4-bit、2-bit等。选择位宽时需要权衡存储和精度。

    • 8-bit量化:广泛用于神经网络,通常能在存储和计算效率之间取得较好的平衡。
    • 低位宽量化:对于嵌入式设备或其他资源有限的硬件,可能需要4-bit、2-bit或甚至1-bit量化来提高效率。
  • 选择量化精度

    • 权重量化:模型权重的量化,通常较为精确,因为它们是固定的,并且在整个推理过程中保持不变。
    • 激活量化:激活量化通常较为复杂,因为激活值在每次前向传播时都会变化,量化过程中需要动态考虑输入数据的分布。
  • 选择适合的量化位宽

    • 低位宽量化(例如4-bit或2-bit)通常需要更多的调优和实验,以确保精度损失最小。
    • 高位宽量化(例如16-bit或32-bit)通常保持较高的精度,但计算效率的提升较低。
影响因素:
  • 存储限制:存储空间有限时,较低的位宽可以显著减少存储占用。
  • 计算效率:较低的位宽能够加速计算,尤其是在硬件上执行时,低位宽能够显著提高推理速度。
  • 精度要求:较低的位宽可能导致精度损失,因此需要确保精度损失在可接受的范围内。

3. 量化函数(Quantization Function)

量化函数是将浮点数转换为低精度整数的实际数学操作。量化函数的目标是根据所选范围和精度,将浮点数转换为定点数(整数),并尽量保留模型性能。

步骤:

量化函数可以通过以下几个步骤实现:

  • 计算量化步长(Quantization Scale):量化步长是量化过程中最重要的参数,它表示每个整数步长所代表的浮动量。对于对称和非对称量化,步长的计算方式不同。

    计算公式(对于非对称量化)

    step size = max − min 2 b − 1 \text{step size} = \frac{\text{max} - \text{min}}{2^b - 1} step size=2b1maxmin

    其中, b b b 是量化位宽, max \text{max} max min \text{min} min 分别是待量化数据的最大值和最小值。

    对于对称量化,步长的计算方式类似,但因为范围对称,计算起来可能更简单。

  • 量化操作(Quantization Operation):将浮点数转换为定点数的过程,可以通过以下公式实现:

    q ( x ) = round ( x − min step size ) q(x) = \text{round}\left(\frac{x - \text{min}}{\text{step size}}\right) q(x)=round(step sizexmin)

    其中, x x x 是浮点数, min \text{min} min 是量化范围的最小值, step size \text{step size} step size 是量化步长, round \text{round} round 是四舍五入操作。

  • 还原操作(Dequantization):量化后,定点数(整数)需要通过一定的公式还原成浮点数,才能用于推理。还原公式为:

    x ^ = q ( x ) × step size + min \hat{x} = q(x) \times \text{step size} + \text{min} x^=q(x)×step size+min

    其中, q ( x ) q(x) q(x) 是量化后的整数, x ^ \hat{x} x^ 是还原后的浮点数。

举例:

假设我们有一个浮点数 x = 3.25 x = 3.25 x=3.25,量化范围为 [0, 10],量化步长为 0.1(10个离散值,位宽为4位),那么:

量化后的整数值为:

q ( 3.25 ) = round ( 3.25 − 0 0.1 ) = round ( 32.5 ) = 33 q(3.25) = \text{round}\left(\frac{3.25 - 0}{0.1}\right) = \text{round}(32.5) = 33 q(3.25)=round(0.13.250)=round(32.5)=33

还原回浮点数时,得到:

x ^ = 33 × 0.1 + 0 = 3.3 \hat{x} = 33 \times 0.1 + 0 = 3.3 x^=33×0.1+0=3.3

量化后结果是3.3,相比原始浮点数3.25有一定误差。

影响因素:
  • 量化函数的选择:量化函数的选择(例如,舍入方法)会直接影响量化后精度的损失。
  • 精度与性能平衡:选择不同的量化步长和舍入策略会影响最终模型的推理性能和存储效率。

总结

量化的过程包括三个主要步骤:

  1. 范围选择:确定量化数据的最小值和最大值,从而决定数据的量化范围。
  2. 精度设置:选择适当的量化位宽,决定量化后的精度(即每个量化数值使用多少位表示)。
  3. 量化函数:使用适当的数学操作(如步长计算和舍入)将浮点数转换为低精度整数,并执行还原操作以确保数值的恢复。

通过这些步骤,可以将浮点数值高效地转换为定点数,从而减少模型存储需求、加速推理过程,同时尽量保留模型的准确性。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

从工作原理上解释为什么MPLS比传统IP方式高效?

多协议标签交换(Multiprotocol Label Switching, MPLS)是一种用于高速数据包转发的技术。它通过在网络的入口点对数据包进行标签操作,然后在核心网络内部基于这些标签来快速转发数据包,从而提高了数据传输效率。以下是几个方面解释…

以命令行形式执行Postman脚本(使用Newman)

一、背景 ​ Postman的操作离不开客户端。但是在一些情况下可能无法使用客户端去进行脚本执行。比如在服务端进行接口测试。由此我们引入了Newman。Newman基于Node.js开发,它使您可以直接从命令行轻松运行和测试Postman测试集。它在构建时考虑了可扩展性&#xff0c…

国内手机号Google账号(gmail)注册教程

注意!!本篇只适用于未注册过或未修改过的萌新用户!!!!(我注册第二个账号时就通过不了了) 国内手机号码如何创建Google(谷歌)账号,我们会发现&…

性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台

前言 在当前激烈的市场竞争中,创新和效率成为企业发展的核心要素之一。在这种背景下,如何保证产品和服务的稳定性、可靠性以及高效性就显得尤为重要。 而在软件开发过程中,性能测试是一项不可或缺的环节,它可以有效的评估一个系…

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段:PT(Pre training)。使用公开数据经过预训练得到预训练模型,预训练模型具备语言的初步理解;训练周期比较长;微调阶段1:SFT(指令微调/有监督微调…

【LeetCode】【算法】142. 环形链表II

142环形链表II 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环&#x…

白话文讲解大模型| Attention is all you need

本文档旨在详细阐述当前主流的大模型技术架构如Transformer架构。我们将从技术概述、架构介绍到具体模型实现等多个角度进行讲解。通过本文档,我们期望为读者提供一个全面的理解,帮助大家掌握大模型的工作原理,增强与客户沟通的技术基础。本文…

解析IO零拷贝技术

背景介绍 从字面上我们很容易理解出,零拷贝包含两个意思: 拷贝:就是指数据从一个存储区域转移到另一个存储区域。零:它表示拷贝数据的次数为 0。 合起来理解,零拷贝就是不需要将数据从一个存储区域复制到另一个存储…

练习LabVIEW第三十六题

学习目标: 刚学了LabVIEW,在网上找了些题,练习一下LabVIEW,有不对不好不足的地方欢迎指正! 第三十六题: 使用labview模拟温度采集系统,要求有停止键 开始编写: 前面板放一个温度…

day-81 打家劫舍 II

思路 与LCR 089. 打家劫舍相比,本题所有房屋围成了一圈,那么第一间房子和最后一间房子不能同时打劫,那么就可以分为两种情况:1.选第一间房打劫;2.选最后一间房打劫 解题过程 然后依次计算出以上两种情况的最大金额&am…

linux网络编程自定义协议和多进程多线程并发-TCP编程

1.三次握手及后面过程 计算机A是客户端, B是服务端 1.1三次握手: 1客户端给服务端SYN报文 2服务端返回SYNACK报文 3客户端返回ACK报文 客户端发完ACK后加入到服务端的维护队列中,accept()调用后就能和客户端建立连接,然后建立通讯 1.2关闭…

【工具】批量网址打开器,一次打开多个网址链接

假如你有很多个网址,这些网址要全部打开,你是否会每次复制一个粘贴到浏览器地址栏,再去复制下一个粘贴到地址栏,这样重复的操作?我就有这样的困扰,比如要检查网页上是否有bug,就要一个一个的点开…

「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目

本篇将带领你实现一个互动性十足的灯光控制小项目,用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互,是学习鸿蒙应用开发的重要基础。 关键词 UI互动应用状态管理动态图片加载用户交互 一、功能说明 在这个灯光…

如何从0到1开发一款智能生产小工单系统——全网最详细教程!

在生产车间,工单管理一度是个让人头疼的问题。任务分配不清、生产流程混乱、交接环节不顺畅等问题,让管理人员和一线工人疲于奔命。而一个智能的生产小工单系统正是解决这些问题的利器。不仅能有效地理顺工单流转流程,还能大幅提升工作效率和…

SpringBoot基础系列学习(五):JdbcTemplate 访问数据库

文章目录 一丶介绍二丶引入依赖三丶配置配置文件四丶创建表五丶java代码 一丶介绍 Spring Boot作为Spring的集大成者,自然会将JdbcTemplate集成进去。Spring Boot针对JDBC的使用提供了对应的Starter包:spring-boot-starter-jdbc,它其实就是在…

win11电脑无法找到声音输出设备怎么办?查看解决方法

电脑无法找到声音输出设备是一个常见的问题,尤其是在使用Windows操作系统时。幸运的是,大部分问题都可以通过以下几种方法来解决。 一、检查物理连接 在深入诊断之前,首先要检查硬件连接是否正常。这包括: 确保耳机、扬声器或其…

二叉树相关习题

题目:100. 相同的树 - 力扣(LeetCode) 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: …

数据结构和算法(六):贪心算法、分治算法、回溯算法、动态规划、拓扑排序

从广义上来讲:数据结构就是一组数据的存储结构 , 算法就是操作数据的方法 数据结构是为算法服务的,算法是要作用在特定的数据结构上的。 10个最常用的数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树 10个最…

PPT素材、模板免费下载!

做PPT一定要收藏好这6个网站,PPT模板、素材、图表、背景等超多素材全部免费下载。 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材,像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多,全部都…

Prompt Engineering介绍

什么是Prompt Engineering? 近年来,大语言模型(LLM)发展迅速,成为自然语言处理领域的重要技术。除了OpenAI的GPT系列、Google的PaLM(Pathways Language Model)和Bard,国内也涌现出多…