人工智能推理 Int4的精确性

NVIDIA blog
115 0 2019-11-13

与INT8相比,INT4的精度可以带来额外59%的加速

如果说人工智能和深度学习中有一个不变的东西,那就是从给定的平台中榨取每一点可能的性能,这是永无止境的优化。许多推理应用程序都受益于降低的精度,无论是递归神经网络(RNNs)的混合精度,还是卷积神经网络(CNNs)的INT8混合精度,后者的应用程序可以获得3倍以上的速度提升。

VIDIA的图灵架构引入了INT4精度,这又提供了一个加速的机会。除了提高计算速度之外,使用INT4还可以减少网络的内存占用和节省内存带宽,这使得在一个GPU上运行多个集成网络变得更加容易。

NVIDIA除了是唯一一家提交了所有5个MLPerf推论v0.5基准的公司外,还在开放部门提交了ResNet-50v1.5的INT4实现。这一实现实现了59%的吞吐量增加,但准确性损失不到1%。在这篇博客中,我们将简要介绍我们的INT4提交,它来自于NVIDIA早期的研究,用于评估图灵GPU卡上INT4推断的性能和准确性。

该代码使用了一个ResNet50 v1.5pipeline,其中的权重经过了微调,允许使用INT4剩余层进行准确的推断。这段代码从用于驱动计算的“model”目录加载经过调优的网络。在内部,代码积极地融合各层以生成高效的高性能推理引擎。

首先,我们展示了使用INT4精度对比INT8baseline观察到的性能加速。然后我们将描述模型格式和执行的计算,最后我们将描述用于微调模型权重的过程。


在图灵上用Int4加速

图:在2019年11月6日从www.mlperf.org检索到的数据中心服务器表单因素和离线场景的MLPerf v0.5推断结果(INT8关闭了inf0.25和inf0.27, INT4开放了inf0.460和inf0.462)。每个处理器的性能是通过将总体性能的主要指标除以所报告的加速器的数量来计算的。MLPerf名称和标识是商标。


INT4在NVIDIA T4上以最小的精度损失(约1%)额外获得了59%的推断吞吐量。在TITAN RTX上,速度提升了52%,从单个GPU每秒产生超过25000张图像。上面显示的性能数据是在具有多个gpu的服务器上运行的,吞吐量值是通过取服务器吞吐量,然后除以gpu的数量来显示每个加速器的数据得出的。

模型描述

在这里可以找到使用INT4 precision运行ResNet-50所需的文件,以及关于如何运行线束以重现结果的详细说明。

INT4 ResNet50 v1.5网络由多层管道组成,由“model”目录中的文件描述。在顶层,我们有以下几层:

第1层至第4层为残差网络(residual network)序列,其中每个残差网络由以下部分组成:


对于每一层,都有一个描述层结构的文本文件,然后在“model/npdata”目录中,有具有实际过滤权、比例和偏差值的文件。每个层的详细信息可以在这里找到

微调模型

我们的方法不需要对模型进行完全的再训练。我们用FP32量子化层来扩充来自torchvision的预先训练的FP32模型。这些层的初始参数是使用通过原始模型运行校准集收集的范围数据设置的。然后我们运行训练阶段来微调网络和量化层。流程如下:

1.通过“量化”FP32模型运行校准数据集,并收集直方图数据

2.使用直方图找到所有张量的99.999%百分位范围值

3.用新的范围调整模型中的量子化层

4.通过量化模型运行训练数据集的epoch并反向传播错误,对量化层使用直接穿透估计器(STE)。继续训练,直到精度达到可接受的水平。

在我们的例子中,我们使用了15个epoch。一旦完成,就可以对模型进行微调,并使用来自“伪”量化层的范围数据生成量化的INT4模型。

INT4还处于早期阶段,它也可以通过NVIDIA的CUTLASS库访问,可以在GitHub上访问。人工智能推理精度的降低代表了另一个有趣的领域,在这个领域中,优化可以以最小的精度损失从相同的硬件中获得更高的性能。进一步的研究领域包括将INT4精度应用于其他图像聚焦网络。

要复制结果,请在这里下载MLPerf Inference v0.5 Int4提交代码和二进制文件