量化 | Posting-training quantization

量化

训练后量化可以在改善 CPU 和硬件加速器延迟的同时缩减模型大小,且几乎不会降低模型准确率。

动态范围 / 全整数 / float16量化
Technique Benefits Hardware
Dynamic range quantization 4x smaller, 2x-3x speedup CPU
Full integer quantization 4x smaller, 3x+ speedup CPU, Edge TPU, Microcontrollers
Float16 quantization 2x smaller, GPU acceleration CPU, GPU

post-training optimization options

动态范围量化

训练后量化最简单的形式是仅将权重从浮点静态量化为整数(具有 8 位精度)

全整数量化 INT

对于全整数量化,需要校准或估算模型中所有浮点张量的范围,即 (min, max)。与权重和偏差等常量张量不同,模型输入、激活(中间层的输出)和模型输出等变量张量不能校准,除非我们运行几个推断周期。因此,转换器需要一个有代表性的数据集来校准它们。

整数量化 UINT

对于适用于微控制器的 TensorFlow Lite 和 Coral Edge TPU,创建全整数模型是常见的用例。

float16量化

float16 量化的优点:

  • 将模型的大小缩减一半(因为所有权重都变成其原始大小的一半)。
  • 实现最小的准确率损失。
  • 支持可直接对 float16 数据进行运算的部分委托(例如 GPU 委托),从而使执行速度比 float32 计算更快。

float16 量化的缺点:

  • 它不像对定点数学进行量化那样减少那么多延迟。
  • 默认情况下,float16 量化模型在 CPU 上运行时会将权重值“反量化”为 float32。(请注意,GPU 委托不会执行此反量化,因为它可以对 float16 数据进行运算。)

猜你喜欢

转载自blog.csdn.net/qq_38844835/article/details/120689961