神经网络量化:原理、方法与实践
1. 量化粒度
在神经网络量化中,量化粒度是一个重要的概念。目前,常见的量化方式是为每个张量定义一组量化参数(量化器),分别用于权重和激活值,这被称为逐张量量化。在公式 11.5 中可以看到这种量化方式的体现。
不过,我们也可以为张量的各个分段(例如权重张量的输出通道)定义单独的量化器,从而提高量化粒度。在神经网络量化里,逐张量量化因其硬件实现较为简单,是最常用的粒度选择。在公式 11.5 中,所有累加器都使用相同的比例因子 swsx。
然而,增加量化粒度可以提升性能。例如,对于权重张量,我们可以为每个输出通道指定不同的量化器,这就是逐通道量化。逐通道量化在某些情况下能显著提高量化的准确性,尤其是当权重在不同通道间的分布差异较大时。但需要注意的是,并非所有硬件都支持逐通道量化,所以在选择目标设备时,需要确认其支持情况。
还有一些研究尝试超越逐通道量化,为一组权重或激活值应用单独的量化器。虽然增加分组的粒度通常能提高准确性,但会带来一些额外的开销,因为累加器需要处理具有不同比例因子的值的总和。目前,大多数现有的定点加速器并不支持这种逻辑,但随着该领域研究的发展,未来有望看到更多硬件对这些方法的支持。
2. 量化模拟
为了测试神经网络在量化设备上的运行效果,我们通常会在用于训练神经网络的通用硬件上模拟量化行为,这就是量化模拟。其目的是使用浮点硬件来近似定点运算。与在实际量化硬件上进行实验或使用量化内核相比,量化模拟的实现要简单得多。它允许用户高效地测试各种量化选项,并为量化感知训练提供 GPU 加速。
在模拟过程中,我们需要考虑实际设备推理和模拟推理的差异。在实际设备推
超级会员免费看
订阅专栏 解锁全文
802

被折叠的 条评论
为什么被折叠?



