Drift: Leveraging Distribution-based Dynamic Precision Quantization for Efficient Deep Neural Network Acceleration【DAC‘24】
介绍了一种新的DNN加速方法,Drift,通过基于数据分布的动态精度量化来提高深度学习模型的运行效率
一、文章背景
1. 背景
随着DNN模型变得越来越庞大(两年内增长了240倍),现有的静态量化方法不足以充分利用模型中的稀疏性和冗余性,尤其是对于越来越大的模型(例如LLMs)。
2. 动机
现有的静态量化方法固定了数据的精度(如权重和激活值),但DNN中的数据通常是动态的,各个区域的数据分布特性差异较大。因此,使用静态量化无法充分利用这些差异。例如,在图像分类任务中,物体的像素比背景像素更重要。这样的动态性无法通过静态量化来充分体现。
图1中的三张子图展示了子张量(张量的一部分,即从一个更大的张量中提取出来的一个较小的矩形或立方区域)在DNN中的动态性和分布情况:
- (a) Sub-tensor profiling in ViT:图像Transformer模型中的子张量分析,展示了子张量的最大值和平均值的分布,表明不同子张量之间的差异很大。
- (b) Sub-tensor profiling in BERT:在BERT模型中的子张量分析,展示了类似的现象,即不同子张量的最大值和平均值之间的差异。
- (c) Sub-tensor distribution in BERT:显示了BERT模型中的子张量分布,表明这些子张量的分布符合拉普拉斯分布。
3. 动态量化
一些研究已经开始探索动态量化,这种方法根据数据的动态性调整计算的精度。例如,DRQ是一种根据激活张量的不同区域动态选择4位或8位精度的算法,而DTQAtten则为自然语言处理模型中的每个token选择不同的精度。然而,现有的动态量化算法存在两个主要问题:
- 现有算法通常针对特定的场景设计,无法泛化到其他类型的DNN模型。例如,直接将DRQ应用于BERT模型会导致超过12%的精度下降。
- 现有的支持静态量化的加速器无法高效支持动态精度的计算。
4. Drift动态量化算法
为了解决上述问题,文提出动态精度量化算法,可以动态地选择不同的数据精度。具体来说,它会根据低精度格式的“表示能力”来选择合适的精度设置,同时保持计算精度不损失。
核心思想
- 动态选择子张量(如激活张量中的部分区域)的精度。通过分析子张量的数值分布,算法能够判断哪些区域可以使用低精度进行计算,哪些区域需要更高的精度。
- 这种方法可以利用现有的硬件资源,不需要额外的计算或芯片面积的开销。
5. Drift硬件架构
为了支持该算法,研究设计了一个新的加速器架构
- Drift可以将不同精度的计算分配到不同的systolic arrays中,避免因动态精度计算带来的数据流阻塞问题。
- Drift的在线调度策略可以在运行时动态平衡不同精度计算的资源分配。