边缘人工智能的模型量化
看看物联网和边缘计算是如何拥抱AI的
深度学习正见证着越来越多的成功历史。然而,必须在高性能计算系统上运行的大型/重型模型远非最佳。人工智能已经在商业应用中广泛使用。人工智能推理和训练的计算需求正在增加。因此,出现了一类相对较新的深度学习方法,即量化的神经网络模型,以解决这一差异。内存一直是深度学习架构的最大挑战之一。这是游戏行业的演变,导致了硬件的快速发展,导致了GPU的出现,使今天的50层网络成为可能。然而,由于人工智能正迅速向边缘设备发展,为捕获的数据提供近乎实时的结果,较新和强大的网络对内存的渴求现在正推动着深度学习模型压缩技术的发展,以控制这一需求。模型量化就是这样一种快速发展的技术,它允许在边缘设备上部署深度学习模型,其功率、内存和计算能力都比成熟的计算机小。
AI是如何从云端迁移到边缘的?
许多企业使用云作为他们的主要AI引擎。它可以通过云数据中心托管所需数据,以执行智能决策。这种将数据上传到云存储和与数据中心互动的过程,诱发了实时决策的延迟。随着对物联网应用及其实时响应的需求增长,云在未来将不是一个可行的选择。因此,边缘的人工智能正变得越来越流行。
边缘人工智能大多以分散的方式工作。现在,小型计算机设备集群共同推动决策,而不是到一个大型处理中心。边缘计算大大提升了设备的实时反应。与云端人工智能相比,边缘人工智能的另一个优势是操作、带宽和连接成本较低。现在,这并不像它听起来那么容易。在边缘设备上运行人工智能模型,同时保持推理时间和高吞吐量,同样具有挑战性。模型量化是解决这个问题的关键。
量化的必要性?
现在在进入量化之前,让我们看看为什么一般的神经网络需要这么多内存。
一个标准的人工神经网络将由多层相互连接的神经元组成,每个神经元都有自己的权重、偏置和激活函数。这些权重和偏置被称为神经网络的 "参数"。这被神经网络物理地存储在内存中。标准的32位浮点值是它们的标准表示,允许神经网络有很高的精度和准确性。
获得这种精度使得任何神经网络都要占用大量的内存。想象一下,一个有数百万个参数和激活的神经网络,被存储为32位的值,它将会消耗多少内存。例如,一个50层的ResNet架构将包含大约2600万个权重和1600万个激活值。因此,对权重和激活使用32位浮点值会使整个架构消耗大约168MB的存储空间。量化是一个大的术语,包括不同的技术,将大集合的输入值转换成小集合的输出值。我们用于推理的深度学习模型不过是具有复杂和迭代数学运算的矩阵,其中大部分包括乘法。将那些32位的浮动值转换为8位的整数会降低所使用的权重的精度。
由于这种存储格式,模型在内存中的足迹得到了减少,而且它极大地提高了模型的性能。在深度学习中,权重和偏差被存储为32位浮点数字。当模型被训练后,它可以被减少到8位整数,这最终会减少模型的大小。人们可以把它减少到16位浮点(减少2倍大小)或8位整数(减少4倍大小)。这将会在模型预测的准确性上有所折衷。然而,在许多情况下,经验证明,量化的模型在某些情况下不会出现明显的衰减或根本没有衰减。
量化过程是如何进行的?
有两种方法可以进行模型量化,如下所述。
训练后量化
顾名思义,训练后量化是一个将预训练模型转换为量化模型的过程,即把模型参数从32位转换为16位或8位。它可以进一步分为两种类型。一种是混合量化,即只对权重进行量化,不涉及模型的其他参数。另一种是完全量化,即对模型的权重和参数都进行量化。
量化感知训练
顾名思义,在这里我们在训练时对模型进行量化。在初始训练前对网络进行修改(使用假的量化节点),并通过训练学习8位权重,而不是以后再去转换。
量化的好处和坏处
量化的神经网络,除了提高性能外,还由于两个因素而大大提高了电源效率:较低的内存访问成本和更好的计算效率。较低位的量化数据需要减少芯片两边的数据移动,减少内存带宽并节省大量的能量。
如前所述,经验证明,量化的模型不会出现明显的衰减。不过,有些时候,量化会大大降低模型的准确性。因此,通过对后量化或量化感知训练的良好应用,人们可以克服这种下降的不准确性。
当涉及到在具有低功率、低内存和低计算量的边缘设备上开发和部署人工智能模型时,模型量化至关重要。它为物联网生态系统顺利地增加了智能。