ML-paper-PTQ4SAM

ML-paper-PTQ4SAM

Charles Lv7

PTQ4SAM

paper

**核心问题:**SAM 在许多计算机视觉任务中取得了令人印象深刻的性能,但巨大的内存和计算成本阻碍了它的实际部署.

核心方法(贡献):
image-20240710102207739

  1. 第一个 SAM 量身定制的 PTQ 框架,命名为 PTQ4SAM
  2. SAM 中 post-Key-Linear 激活的量化范围较大不利于量化执行,因此提出了双峰整合(BIG)策略,自动检测双峰分布,并将双峰分布等价转换为正态分布
  3. 由于 SAM 包含不同的注意机制,导致 Softmax 后的分布有很大的变化,因此论文提出了自适应粒度量化(AGQ),以适当的粒度精确地表示了不同的 post-Softmax 分布

**实验效果:**当 SAM-L 量化到 6 位时,实例分割的准确率达到无损,在理论 3.9× 加速下下降了约 0.5%

改进方向: SAM 中出现双峰分布的原因尚不清楚。这个方向为我们未来的研究提供了一个潜在的途径

背景与相关工作

SAM 的 transformer 架构需要密集的计算和内存占用,阻碍了在边缘设备上的部署

选用 PTQ,相比于量化感知训练(QAT),训练后量化(PTQ)使用非标记样本来校准预训练模型,实际使用时效率更高

对于 SAM 而言,直接采用这些方法对任何事物模型进行分割会带来两个独特的挑战,需要重新审视传统的 PTQ 方案——post-Key-Linear 双峰分布和 post-Softmax 分布,而这两点在之前的论文中没有在量化 SAM 时特意考虑

  • 双峰分布的中心空隙区间严重扩大了整个分布的范围,这对量化性能产生了负面影响

    • 我们提出了一种双峰整合( Bimodal Integration,BIG )策略来巧妙地消除双峰分布
    • 我们利用它的 per-tensor 特性来判断是否为双峰分布,并利用它的 per-channel 特性将这种双峰分布转换为正态分布
  • 由于注意机制的多样性,SAMs 表现出更加复杂的 post-Softmax 分布,具体表现为大约 72.5 %的 image-to-token 的 Softmax 后激活大于 0.01,而在 token-to-image 中只有 0.4%

    • 我们提出了一种自适应粒度量化( AGQ ),它针对不同的后 Softmax 分布进行了明确的裁剪,为较低和较高的注意力分数提供了粒度上的适当折衷。

Segment Anything

Segment Anything Model(SAM)是 Meta AI 推出的一款图像分割模型,旨在实现广泛、精确和高效的图像分割任务。它具有广泛的适用性,能处理多种图像和对象,从简单的前景-背景分割到复杂的物体分割。SAM 支持用户通过点击、绘制或文本提示等方式引导分割过程,提升用户交互友好性。模型基于 Transformer 和卷积神经网络(CNN),结合两者的优势,既能捕捉全局特征,又能保留局部细节。经过大规模数据集预训练,SAM 拥有出色的泛化能力和高精度。应用场景涵盖医学影像分析、自动驾驶、智能制造和内容创作等领域。未来,SAM 有望在更高效的分割算法、更好的用户交互界面和更多应用场景上不断进步,展示出广泛的应用潜力,为各行各业提供强大的图像分割工具。

SAM 相关工作论文 贡献
HQ-SAM 设计了可学习的 tokens 和全局-局部融合方案来获得高质量的掩码
SEEM 将指称图像扩展为提示类型,并整合了一个联合的视觉-语义空间

问题:SAM 仍然存在不可维持的资源密集型消耗,其实时处理能力需要改善

Post-Training Quantization

PTQ 分为基于统计的 PTQ(statistic-based PTQ)和基于学习的 PTQ(learning-based PTQ),基于统计的 PTQ 方法只寻求最优的量化参数来最小化量化误差,而基于学习的 PTQ 方法微调模型参数,包括权重和量化参数。

  • Statistic-Based PTQ 根据收集到的统计信息,确定每一层的量化参数(如量化比例和零点)。常见的方法包括均匀量化(Uniform Quantization)和非均匀量化(Non-Uniform Quantization),使用确定的量化参数,将浮点权重和激活值映射到低比特位的整数值(如 8 位),并将其存储为量化模型。这种方法不需要再训练模型,仅通过统计分析来确定量化参数,因此实现简单且快速。但在某些情况下,量化后的模型性能可能会有所下降。适用于计算资源有限、对模型精度要求不高的场景,如边缘设备和移动设备。优点是实现简单、快速;缺点是对模型性能影响较大。
  • learning-based PTQ 首先对模型进行初始量化,类似于基于统计的 PTQ 方法,确定初始的量化参数,在初始量化的基础上,使用一小部分训练数据对模型进行微调训练。通过反向传播算法同时优化权重和量化参数,使模型在量化后的环境中依然能够保持良好的性能。基于学习的 PTQ 方法可以显著提升量化模型的性能,尤其在高精度要求的任务中表现突出。然而,这种方法需要额外的计算资源和训练时间。适用于计算资源充足、对模型精度要求高的场景,如服务器端推理和高精度应用。优点是能够显著提升量化模型的性能;缺点是需要额外的训练时间和计算资源。
量化算法相关工作 方法类别 贡献
AdaRound learning-based PTQ 优化了量化权重时的取整操作,以最小化模型的整体损失
BRECQ learning-based PTQ 提出了一种分块重构算法来优化量化模型
QDrop learning-based PTQ 在重建过程中引入下落操作,增加了优化模型的平整度
PD- Quant learning-based PTQ 在优化量化参数时引入了全局信息
MRECG learning-based PTQ 首次在大型语言模型上提出了一种新的可学习权重舍入方案

这些技术主要是基于 CNN 架构模型进行的。类似于 SAM 的 transformer 结构模型还未被探索

方法理论

image-20240710120349404

均匀量化和对数量化

  • 均匀量化是一种简单且常用的量化方法,通过将浮点数值映射到固定范围内的整数值,且步长(scale)是均匀的。该方法首先确定数据的最小值和最大值,然后计算量化步长和零点,并利用这些参数将浮点数值转换为整数。均匀量化的优点在于实现简单、计算效率高,适用于数据分布较为均匀的场景。然而,对于数据分布不均匀的情况,其量化误差可能较大,影响模型性能。image-20240710115817897

  • 对数量化根据数据的实际分布情况,自适应选择量化步长,使量化误差最小化。这种方法在数据密集的区域使用较小的步长,在数据稀疏的区域使用较大的步长,从而更好地处理具有复杂分布的数据。对数量化的优点在于能够显著减少量化误差,适用于数据分布复杂、精度要求高的场景。然而,其实现较为复杂,计算效率较低,量化和反量化过程可能需要额外的计算资源。image-20240710115832483

特性 均匀量化 对数量化
实现复杂度 简单 复杂
计算效率
量化步长 固定 自适应
适用数据分布 均匀 不均匀
量化误差 较大(对于不均匀分布数据) 较小
适用场景 移动设备、嵌入式系统等 服务器端推理、高精度应用等

Bimodal Integration

双峰伴随着它们的中心空洞或稀疏间隔,大大扩展了分布范围,导致实验上超过 5 倍于正态分布的量化误差

  • 从张量的角度来看:分布包含两个峰,且它们的中心是对称的

  • 从每个通道的角度来看:每个通道的激活只持续在一个固定的峰值,这表明一个通道内部存在明显的不对称性

    一般来说,大约一半的通道(例如,在 SAM - B 中为 46.1 %)聚集在正峰,其余的通道聚集在负峰

img 我们观察到双峰分布显著地集中于post=Key-Linear的激活,公式表示为![image-20240710120650047](https://charles2530.github.io/image/ML-paper-PTQ4SAM/image-20240710120650047.png)

BIG 包括三个步骤:发现双峰、γ 计算和等效变换

  • 在 SAM 中,并不是所有的 post-Key-Linear 激活都是双峰分布,为了区分双峰分布,我们首先采用高斯核密度估计来计算整个张量的概率密度函数( PDF ) ,为了避免将两个小凸点识别为两个峰,我们限制了峰的高度和两个峰之间的距离

    高斯核密度估计(KDE, Kernel Density Estimation)是一种非参数统计方法,用于估计随机变量的概率密度函数(PDF)。与直方图不同,KDE 不依赖于特定的区间划分,而是使用核函数(kernel function)平滑数据,提供一个连续的密度估计。

  • 通过引入 channel 级超参数 r 来将双峰分布转化为正态分布,通过计算每个通道 key linear 后的激活函数均值来将结果转化为正数image-20240710121135150

  • 等效变换image-20240710121648720

Adaptive Granularity Quantization

由于前人工作主要针对自注意力机制中的 softmax 进行设计,而 SAM 中有多种注意力机制如 cross-attention,故论文重新研究了对数量化器,提出了一种自适应粒度量化( AGQ ),并引入自适应参数 τ 来调整 base

  • 较小的 τ 可以代表较低的注意力分数。并且随着 τ 的增加,较高的注意力分数变得更加细粒度,从而根据不同的注意力机制类型使用不同的参数image-20240710122219269
  • LUT 表示小查找表,可用于各种神经网络加速器,值得注意的是,由于 τ∈{ 20,21,…,2n - 1 }的 LUT 可以合并到 τ = 2n 的 LUT 中,因此整个网络只需要一个 LUT。image-20240710122356561

实验工作

image-20240710122645016

  1. 在不同的检测器中,我们的方法一致地优于其他方法。
  2. 我们的 PTQ4SAM-S 甚至在 SAM-L 的 W6A6 数据集上显著地超过了目前最好的基于学习的方法 QDrop
  3. 在 SAM-L 和 SAM-H 上,6 位 PTQ4SAM-L 甚至取得了比全精度模型更好的性能。在 W4A4 设置下,我们的方法在 SAM-L 上提供了 1.04%的精度提升,比 QDrop 提高了 0.15 %。
  • 为了验证 PTQ4SAM 在两种 PTQ 方法中的有效性,我们将我们的方法集成到基于统计的 OMSE 和基于学习的 QDrop 中,称为 PTQ4SAM-S 和 PTQ4SAM-L

  • 消融实验中我们证明了每个组分对 PTQ4SAM 都有贡献,而当两个组分共同应用时,性能达到最佳image-20240710123425222

  • 在 W4A4 上,我们的方法将计算的 FLOP 降低了 70 %以上,存储减少了 85 %以上。随着模型规模的增大,加速比和内存节省都变得更加显著,而性能下降则变得更少。

code

PTQ4SAM 源码分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
├── ckpt  	#源模型权重
├── data #数据集
├── exp #量化类型,子文件分别对应W4A4和W6A6量化
│ ├── config44.yaml
│ └── config66.yaml
├── mmdetection #目标检测开源工具箱,提供权重下载路径
├── projects
│ ├── configs #模型相关配置文件
│ └── instance_segment_anything #模型量化算子cuda
├── ptq4sam
│ ├── model #量化模型
│ ├── quantization #模型量化算子python,包括quantier和observer
│ └── solver #工具类及测试代码
├── result
│ └── tmp #运行结果
└── run.sh
1
2
3
4
export CUDA_VISIBLE_DEVICES=2
python ptq4sam/solver/test_quant.py \
--config ./projects/configs/yolox/yolo_l-sam-vit-l.py \
--q_config exp/config66.yaml --quant-encoder

Bimodal distributions mainly occur in the mask decoder of SAM-B and SAM-L.

运行结果:

image-20240720092243322

  • quant_model 主要是 quant 了 SAM 中的 image_encoder,mask_decoder 部分代码,没有量化 prompt_encoder
  • BIG 策略用于DecoderAttention(mask_decoder),而双峰分布主要集中于 mask decoder 中 image-embedding 后,具体在 token-to-image 这个 cross-attn 处使用了双峰聚合
    image-20240722081852301
1
2
3
4
def bimodal_adjust(model):
for name,m in model.named_modules():
if isinstance(m, QuantDecoderOurAttentionBlock) and 'token_to_image' in name:
m.bimodal_adjust()
  • AGQ 策略用于EncoderAttention(image_encoder)和DecoderAttention(mask_decoder),image_encoder 中为下图中使用的 Multi-Head Attention 处的 self-attn 使用,mask_decoder 具体为下图中 self-attn 和 token-to-image 和 image-to-token 两个 cross-attn 中
image-20240721091939829 image-20240716213535511
  • 将提供的 base 模型进行了运行,模型占用显存约 20G,单卡运行平均约 9h
  • --quant-encoder的作用(提速)
  • Title: ML-paper-PTQ4SAM
  • Author: Charles
  • Created at : 2024-07-14 13:50:29
  • Updated at : 2024-07-29 14:38:07
  • Link: https://charles2530.github.io/2024/07/14/ml-paper-ptq4sam/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments