网站优化
当前位置: 主页 > 资讯 > 网站优化
NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
发布日期:2023-08-01 阅读次数:

  深度学习彻底改变了我们分析、理解和处理数据的方式,而且在各个领域的应用中都取得了巨大的成功,其在计算机视觉、自然语言处理、医疗诊断和医疗保健、自动驾驶汽车、推荐系统以及气候和天气建模方面有许多成功案例。

  在神经网络模型不断变大的时代,对计算速度的高需求对硬件和软件都形成了巨大的挑战。模型剪枝和低精度推理是非常有效的解决方案。

  自 NVIDIA Ampere 架构开始, 随着 A100 Tensor Core GPU 的推出,NVIDIA GPU 提供了可用于加速推理的细粒度结构化稀疏功能。在本文中,我们将介绍此类稀疏模型的训练方法以保持模型精度,包括基本训练方法、渐进式训练方法以及与 int8 量化的结合。我们还将介绍如何利用 Ampere 架构的结构化稀疏功能进行推理。

  腾讯机器学习平台部门 (MLPD) 利用了渐进式训练方法,简化了稀疏模型训练并实现了更高的模型精度。借助稀疏功能和量化技术,他们在腾讯的离线 倍的加速。

  NVIDIA Ampere和NVIDIA Hopper 架构 GPU增加了新的细粒度结构化稀疏功能,该功能主要用于加速推理。此功能是由稀疏 Tensor Core 提供,这些稀疏 Tensor Core 需要 2:4 的稀疏模式。也就是说,以 4 个相邻权重为一组,其中至少有 2 个权重必须为 0,即 50% 的稀疏率。

  这种稀疏模式可实现高效的内存访问能力,有效的模型推理加速,并可轻松恢复模型精度。在模型压缩后,存储格式只存储非零值和相应的索引元数据(图 1)。稀疏 Tensor Core 在执行矩阵乘法时仅处理非零值,理论上,计算吞吐量是同等稠密矩阵乘法的 2 倍。

  (结构化稀疏矩阵具有 2:4 的稀疏模式。在 4 个相邻权重当中,至少有 2 个值为零。在模型压缩后,仅存储非零值和相应的索引元数据。)

  结构化稀疏功能主要应用于能够提供 2:4 稀疏权重的全连接层和卷积层。如果提前对这些层的权重做剪枝,则这些层可以使用结构化稀疏功能来进行加速。

  由于直接对权重做剪枝会降低模型精度,因此在使用结构化稀疏功能的时候,您需要进行训练来恢复模型精度。下面,我们将介绍一些基本训练方法和新的渐进式训练方法。

  基本训练方法可保持模型精度,并且无需任何超参数调优。了解更多技术细节,请参阅论文Accelerating Sparse Deep Neural Networks()。

  (基本训练方法就是使用剪枝后的权重和掩码后的优化器重复原始稠密模型的训练过程。)

  例如,把稀疏训练应用在多阶段式的稠密模型训练当中。比如对于一些目标检测模型,如果下游任务的数据集足够大,您只需做稀疏调优训练。对于像 BERT-SQuAD 等模型,调优阶段使用的数据集相对较小,您则需要在预训练阶段进行稀疏训练以获得更好的模型精度。

  此外,通过在稀疏调优之前插入量化节点,您可以轻松将稀疏调优与 int8 量化调优结合起来。所有这些训练以及调优方法都是一次性的,即最终获得的模型只需要经过一次稀疏训练处理。

  一次性稀疏调优(fine-tuning)可以覆盖大多数任务,并在不损失精度的情况下实现加速。然而,就一些对权重数值变化敏感的困难任务而言,对所有权重做一次性稀疏训练会导致大量信息损失。在小型数据集上只做稀疏化调优可能会很难恢复精度,对于这些任务而言,就需要稀疏预训练(pretraining)。

  然而稀疏预训练需要更多数据,而且更加耗时。因此,受到卷积神经网络剪枝方法的启发,我们引入了渐进式稀疏训练方法,在此类任务上仅应用稀疏化调优便可以实现模型的稀疏化,同时不会造成明显的精度损失。了解更多细节,请参阅论文Learning both Weights and Connections for Efficient Neural Networks()。

  (渐进式稀疏训练方法将稀疏率分为几个步骤,以轻松恢复精度。渐进式稀疏训练方法的核心思想是将目标稀疏率进行若干次切分。)

  如上述公式和图 4 所示,对于目标稀疏率 S,我们将其分为 N 份,这将有助于在稀疏调优过程中快速恢复信息。根据我们的实验,在相同的调优迭代次数内,使用渐进式稀疏训练相比一次性稀疏训练,可以获得更高的模型精度。

  图 4. 渐进式稀疏训练方法 (以 50% 稀疏率的 2:4 结构化稀疏模式为例)

  (渐进式稀疏训练方法的示例:计算权重掩码以达到 25% 稀疏率,再进行稀疏调优恢复性能,最后重新计算掩码使之达到 50% 稀疏率并对网络进行调优。)

  我们以 50% 稀疏率的 2:4 结构化稀疏为例,将稀疏率分为两份,然后逐步稀疏和调优模型中的权重参数。如图 4 所示,首先计算权重掩码以实现 25% 的稀疏率,然后执行稀疏调优以恢复模型精度。接下来,重新对剩余权重计算权重掩码以达到 50% 的稀疏率,并对网络进行调优,以获得一个精度无损的稀疏模型。

  为了获得更轻量的模型,我们进一步将稀疏与量化、蒸馏相结合,即 Sparse-QAT。

  下方的公式表示一个通用的量化过程。对于 32 位浮点数值 x,我们使用 Q [x] 表示其具有 K-bits 表示的量化值。

  通常情况下,我们首先将原始参数量化到特定范围,并将其近似为整数。然后,可以使用这个量化比例 scale (s) 来恢复原始值。这样就得到了第一种量化方法,即校准,也称为训练后量化(post-training quantization, PTQ)。在校准中,一个关键的因素是要设置一个适当的量化比例(scale)。如果这个比例值过大,量化范围内的数字将不太准确。相反,如果这个比例值过小,会导致大量的数字落在 lmin 到 lmax 的范围之外。因此,为了平衡这两个方面,我们首先获得张量中数值的统计分布,然后设置量化比例以覆盖 99.99% 的数值。许多工作已经证明,这种方法对于在校准过程中找到合适的量化比例非常有帮助。

  然而,尽管我们已经为校准设置了一个合理的量化比例,但是对于 8 bit 量化来说,模型精度仍然会显著下降。因此,我们引入量化感知训练(quantization-aware training, QAT),以进一步提高校准后的精度。QAT 的核心思想是以模拟量化的方法来训练模型。

  在前向传播过程中,我们将权重量化为 int8,然后将其反量化为浮点数来模拟真实量化。在反向传播过程中,引入 straight through estimation (STE) 的方法来更新模型权重。STE 的核心思想可以用如下公式表示:

  由上述公式可知,阈值范围内的值对应的梯度直接反向传播,超出阈值范围的值对应的梯度被裁剪为 0。

  Sparse-QAT 训练流水线 显示了 Sparse-QAT 的训练流水线。稀疏化、量化、蒸馏以并行的方式执行,最终获得一个稀疏的 int8 量化模型。整个流水线包括如下三条路径:

  自 8.0 版本开始,TensorRT 可以支持稀疏卷积,矩阵乘法 (GEMM) 需要用 1x1 的卷积替代来进行稀疏化推理。在 TensorRT 中启用稀疏化推理非常简单。在导入 TensorRT 之前,模型的权重应具有 2:4 的稀疏模式。如果使用 trtexec 构建引擎,只需设置 -sparity=enable 标志即可。如果您正在编写代码或脚本来构建引擎,只需按如下所示设置构建配置:

  TensorRT 插件应实现 configurePlugin方法,该方法会根据输入和输出类型及尺寸设置插件。您需要在这个函数当中初始化 cuSPARSELt 的相关结构。

  在相关性案例 2 中,稀疏 int8 模型可以获得与 float32 模型接近的 Acc 分数,相比稠密 int8 模型,其获得了 1.4 倍的推理加速。

  NVIDIA Ampere 架构中的结构化稀疏功能可以加速许多深度学习工作负载,并且易于结合 TensorRT 和 cuSPARSELt 稀疏加速库一起使用。

  江西宜春市市长严允拟任市委书记!宜春市委书记于秀明已当选江西政协副主席

  小米明日将在印度发布 Redmi 12 手机,消息称其 10999 卢比起

  三星Galaxy S24全系参数曝光,可能是近几年最有看点的三星手机了

  iPhone15系列参数爆料汇总,一系四机,全系灵动岛+USB-C接口