首页 > 其他分享 >转载:【AI系统】训练后量化与部署

转载:【AI系统】训练后量化与部署

时间:2024-12-12 10:46:36浏览次数:3  
标签:scale FP32 AI text cdot offset 量化 转载

本文将会重点介绍训练后量化技术的两种方式:动态和静态方法,将模型权重和激活从浮点数转换为整数,以减少模型大小和加速推理。并以 KL 散度作为例子讲解校准方法和量化粒度控制来平衡模型精度和性能。

训练后量化的方式

训练后量化的方式主要分为动态和静态两种。

动态离线量化

动态离线量化(Post Training Quantization Dynamic, PTQ Dynamic)仅将模型中特定算子的权重从 FP32 类型映射成 INT8/16 类型,主要可以减小模型大小,对特定加载权重费时的模型可以起到一定加速效果。但是对于不同输入值,其缩放因子是动态计算。动态量化的权重是离线转换阶段量化,而激活是在运行阶段才进行量化。因此动态量化是几种量化方法中性能最差的。

不同的精度下的动态量化对模型的影响:

  • 权重量化成 INT16 类型,模型精度不受影响,模型大小为原始的 1/2;
  • 权重量化成 INT8 类型,模型精度会受到影响,模型大小为原始的 1/4。

image

动态离线量化将模型中特定算子的权重从 FP32 类型量化成 INT8 等类型,该方式的量化有两种预测方式:

  1. 反量化推理方式,即是首先将 INT8/FP16 类型的权重反量化成 FP32 类型,然后再使用 FP32 浮运算运算进行推理;

  2. 量化推理方式,即是推理中动态计算量化算子输入的量化信息,基于量化的输入和权重进行 INT8 整形运算。

静态离线量化

静态离线量化(Post Training Quantization Static, PTQ Static)同时也称为校正量化或者数据集量化,使用少量无标签校准数据。其核心是计算量化比例因子,使用静态量化后的模型进行预测,在此过程中量化模型的缩放因子会根据输入数据的分布进行调整。相比量化训练,静态离线量化不需要重新训练,可以快速得到量化模型。

$$
uint8 = round(float/scale) - offset
$$

静态离线量化的目标是求取量化比例因子,主要通过对称量化、非对称量化方式来求,而找最大值或者阈值的方法又有 MinMax、KL 散度、ADMM、EQ,MSE 等方法。

静态离线量化的步骤如下:

  1. 加载预训练的 FP32 模型,配置用于校准的数据加载器;
  2. 读取小批量样本数据,执行模型的前向推理,保存更新待量化算子的量化 scale 等信息;
  3. 将 FP32 模型转成 INT8 模型,进行保存。

image

一些常用的计算量化 scale 的方法:

量化方法 方法详解
$abs_{max}$ 选取所有激活值的绝对值的最大值作为截断值α。此方法的计算最为简单,但是容易受到某些绝对值较大的极端值的影响,适用于几乎不存在极端值的情况。
$KL$ 使用参数在量化前后的 KL 散度作为量化损失的衡量指标。此方法是 TensorRT 所使用的方法。在大多数情况下,使用 KL 方法校准的表现要优于 $abs_{max}$ 方法。
$avg $ 选取所有样本的激活值的绝对值最大值的平均数作为截断值α。此方法计算较为简单,可以在一定程度上消除不同数据样本的激活值的差异,抵消一些极端值影响,总体上优于 $abs_{max}$ 方法。

量化粒度

量化参数可以针对层的整个权重张量计算,也可以针对每个通道分别计算。在逐张量量化中,同一剪切范围将应用于层中的所有通道。在模型量化过程中分为权重量化和激活量化:

  • 权重量化:即需要对网络中的权重执行量化操作。可以选择逐张量(per-tensor)或者逐通道(per-channel)的量化粒度,也就是说每个通道选取一个量化 scale。对于卷积神经网络,per- channel 通常对应通道轴。在任何一种情况下,量化因子的精度都是 FP32。per-channel 的量化粒度比 per-tensor 的更细粒度,模型效果更好,但带来的是推理过程中的计算复杂度增加。需要注意的是部分部署硬件有可能不支持 per-channel 量化推理。

  • 激活量化:即对网络中不含权重的激活类算子进行量化。一般采用逐张量(per-tensor)的粒度,也可以选择逐 token(per-token)的量化粒度。

image

KL 散度校准法

下面以静态离线量化中的 KL 散度作为例子,看看静态离线量化的具体步骤。

KL 散度原理

KL 散度校准法也叫相对熵,其中 p 表示真实分布,q 表示非真实分布或 p 的近似分布:

$$

标签:scale,FP32,AI,text,cdot,offset,量化,转载
From: https://www.cnblogs.com/ewr67/p/18601882

相关文章

  • 转载:【AI系统】模型转换流程
    用户在使用AI框架时,可能会遇到训练环境和部署环境不匹配的情况,比如用户用Caffe训练好了一个图像识别的模型,但是生产环境是使用TensorFlow做预测。因此就需要将使用不同训练框架训练出来的模型相互联系起来,使用户可以进行快速的转换。模型转换主要有直接转换和规范式转换两......
  • 转载:【AI系统】自定义计算图 IR
    模型转换涉及对模型的结构和参数进行重新表示。在进行模型转换时,通常需要理解模型的计算图结构,并根据目标格式的要求对其进行调整和转换,可能包括添加、删除或修改节点、边等操作,以确保转换后的计算图能够正确地表示模型的计算流程。本文主要介绍自定义计算图的方法以及模型转换的......
  • 转载:【AI系统】模型转换基本介绍
    模型转换的主要任务是实现模型在不同框架之间的流转。随着深度学习技术的发展,训练框架和推理框架的功能逐渐分化。训练框架通常侧重于易用性和研究人员的算法设计,提供了分布式训练、自动求导、混合精度等功能,旨在让研究人员能够更快地生成高性能模型。而推理框架则更专注于针对特......
  • 转载:【AI系统】Kernel 层架构
    推理引擎的Kernel层通常是推理引擎中用于执行底层数学运算的组件。在神经网络模型推理过程中,需要对大量数据进行高效的数学运算,如矩阵乘法、卷积、池化等。Kernel层就是实现这些运算的核心部分,它直接影响着推理引擎的速度和效率,因此本文将会重点介绍Kernel层相关的内容。Ker......
  • 转载:【AI系统】计算图的优化策略
    除了前面提到的算子替换和算子前移等内容,本文内容将深入探讨计算图的优化策略,我们将细致分析图优化的其他重要内容,如改变数据节点的数据类型或存储格式来提升模型性能,以及优化数据的存储和访问方式以降低内存占用和数据访问时间。以上内容的理解和掌握,对于高效利用计算资源,提升算......
  • 转载:【AI系统】Winograd 算法
    在上一篇文章的介绍中,介绍了Im2Col技术,它通过将三维张量重新排列成矩阵形式,然后利用基于内存访问局部性的优化库如GEMM(通用矩阵乘法库)加速计算。随后,还探讨了空间组合优化,这一种利用局部性原理来提升效率的技术。在本文将重点介绍Winograd优化算法,它是矩阵乘优化方法中Copp......
  • 转载:【AI系统】Im2Col 算法
    作为早期的AI框架,Caffe中卷积的实现采用的是基于Im2Col的方法,至今仍是卷积重要的优化方法之一。从上一篇文章的介绍中可以看到,在CNN中卷积直接计算的定义中,卷积核在输入图片上滑动,对应位置的元素相乘后相加求和,滑窗的大小由卷积核决定。由于滑动操作时的窗口的数据横向是......
  • 转载:【AI系统】卷积操作原理
    卷积是神经网络里面的核心计算之一,它是一种特殊的线性运算。而卷积神经网络(CNN)是针对图像领域任务提出的神经网络,其受猫的视觉系统启发,堆叠使用卷积层和池化层提取特征。它在CV领域方面的突破性进展引领了深度学习的热潮。回到卷积本身,其变种丰富、计算复杂,神经网络运行时大部......
  • 转载:【AI系统】推理系统引言
    在深入探究AI编译原理之后,将进一步迈向一个与日常生活紧密相连的新领域。这个领域无处不在,无论是日常使用的购物应用、观看在线视频的平台,还是钟爱的游戏,它们都与这个领域息息相关。该领域,便是推理系统与推理引擎。那么,推理系统与推理引擎究竟是什么呢?它们之间又存在着怎样的差......
  • 转载:【AI系统】推理流程全景
    本文介绍神经网络模型在部署态中的两种方式:云侧部署和边缘侧部署。其中,云侧部署适用于云服务器等具备强大计算能力和存储空间的环境,可以实现高吞吐量和集中的数据管理,但可能面临高成本、网络延迟和数据隐私等挑战。边缘侧部署适用于边缘设备和移动设备等资源受限的环境,可以通过模......