0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA QAT工具包实现TensorRT量化网络的设计

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-06-21 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

出身背景

加速深层神经网络( DNN )推理是实现实时应用(如图像分类、图像分割、自然语言处理等)延迟关键部署的重要步骤。

改进 DNN 推理延迟的需要引发了人们对以较低精度运行这些模型的兴趣,如 FP16 和 INT8 。在 INT8 精度下运行 DNN 可以提供比其浮点对应项更快的推理速度和更低的内存占用。 NVIDIA TensorRT 支持训练后量化( PTQ )和 QAT 技术,将浮点 DNN 模型转换为 INT8 精度。

在这篇文章中,我们讨论了这些技术,介绍了用于 TensorFlow 的 NVIDIA QAT 工具包,并演示了一个端到端工作流,以设计最适合 TensorRT 部署的量化网络。

量化感知训练

QAT 背后的主要思想是通过最小化训练期间的量化误差来模拟低精度行为。为此,可以通过在所需层周围添加量化和去量化( QDQ )节点来修改 DNN 图。这使得量化网络能够将由于模型量化和超参数的微调而导致的 PTQ 精度损失降至最低。

另一方面, PTQ 在模型已经训练之后,使用校准数据集执行模型量化。由于量化没有反映在训练过程中,这可能导致精度下降。图 1 显示了这两个过程。

pYYBAGKxiG-ATkKeAACqD-C1-UA461.png

图 1 通过 PTQ 和 QAT 的量化工作流

用于 TensorFlow 的 NVIDIA QAT 工具包

该工具包的目标是使您能够以最适合于 TensorRT 部署的方式轻松量化网络。

目前, TensorFlow 在其开源软件 模型优化工具包 中提供非对称量化。他们的量化方法包括在所需层的输出和权重(如果适用)处插入 QDQ 节点,并提供完整模型或部分层类类型的量化。这是为 TFLite 部署而优化的,而不是 TensorRT 部署。

需要此工具包来获得一个量化模型,该模型非常适合 TensorRT 部署。 TensorRT optimizer 传播 Q 和 DQ 节点,并通过网络上的浮点操作将它们融合在一起,以最大化 INT8 中可以处理的图形比例。这将导致 NVIDIA GPU 上的最佳模型加速。我们的量化方法包括在所需层的输入和权重(如果适用)处插入 QDQ 节点。

我们还执行对称量化( TensorRT 使用),并通过层名称和 基于模式的层量化 的部分量化提供扩展量化支持。

表 1 总结了 TFMOT 和用于 TensorFlow 的 NVIDIA QAT 工具包之间的差异。

图2显示了一个简单模型的前/后示例,用 Netron 可视化。QDQ节点放置在所需层的输入和权重(如适用)中,即卷积(Conv)和完全连接(MatMul)。

图 2 量化前后的模型示例(分别为基线和 QAT 模型)

TensorRT 中部署 QAT 模型的工作流

图 3 显示了在 TensorRT 中部署 QAT 模型的完整工作流,该模型是通过 QAT 工具包获得的。

图 3 TensorRT 使用 QAT 工具包获得的 QAT 模型的部署工作流

假设预训练的 TensorFlow 2 模型为 SavedModel 格式,也称为基线模型。

使用quantize_model功能对该模型进行量化,该功能使用 QDQ 节点克隆并包装每个所需的层。

微调获得的量化模型,在训练期间模拟量化,并将其保存为SavedModel格式。

将其转换为 ONNX 。

然后, TensorRT 使用 ONNX 图来执行层融合和其他图优化,如 专用 QDQ 优化 ,并生成一个用于更快推理的引擎。

ResNet-50v1 示例

在本例中,我们将向您展示如何使用 TensorFlow 2 工具包量化和微调 QAT 模型,以及如何在 TensorRT 中部署该量化模型。有关更多信息,请参阅完整的 example_resnet50v1.ipynb Jupyter 笔记本。

要求

要跟进,您需要以下资源:

Python 3.8

TensorFlow 2.8

NVIDIA TF-QAT 工具包

TensorRT 8.4

准备数据

对于本例,使用 ImageNet 2012 数据集 进行图像分类(任务 1 ),由于访问协议的条款,需要手动下载。 QAT 模型微调需要此数据集,它还用于评估基线和 QAT 模型。

登录或注册链接网站,下载列车/验证数据。您应该至少有 155 GB 的可用空间。

工作流支持 TFRecord 格式,因此请使用以下说明(从 TensorFlow 说明 ) 转换下载的。将 ImageNet 文件转换为所需格式:

set IMAGENET_HOME=/path/to/imagenet/tar/files in data/imagenet_data_setup.sh 。

将 imagenet_to_gcs.py 下载到$IMAGENET_HOME。

Run 。/data/imagenet_data_setup.sh.

您现在应该可以在$IMAGENET_HOME中看到兼容的数据集。

量化和微调模型

from tensorflow_quantization import quantize_model
from tensorflow_quantization.custom_qdq_cases import ResNetV1QDQCase # Create baseline model
model = tf.keras.applications.ResNet50(weights="imagenet", classifier_activation="softmax") # Quantize model
q_model = quantize_model(model, custom_qdq_cases=[ResNetV1QDQCase()]) # Fine-tune
q_model.compile( optimizer="sgd", loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=["accuracy"]
)
q_model.fit( train_batches, validation_data=val_batches, batch_size=64, steps_per_epoch=500, epochs=2
) # Save as TF 2 SavedModel
q_model.save(“saved_model_qat”)

将 SavedModel 转换为 ONNX

$ python -m tf2onnx.convert --saved-model= --output= --opset 13

部署 TensorRT 发动机

将 ONNX 模型转换为 TensorRT 引擎(还可以获得延迟测量):

$ trtexec --onnx= --int8 --saveEngine= -v

获取验证数据集的准确性结果:

$ python infer_engine.py --engine= --data_dir= -b=

后果

在本节中,我们报告了 ResNet 和 EfficientNet 系列中各种型号的准确性和延迟性能数字:

ResNet-50v1

ResNet-50v2

ResNet-101v1

ResNet-101v2

效率网 -B0

效率网 -B3

所有结果都是在 NVIDIA A100 GPU 上获得的,批次大小为 1 ,使用 TensorRT 8.4 ( EA 用于 ResNet , GA 用于 EfficientNet )。

图 4 显示了基线 FP32 模型与其量化等效模型( PTQ 和 QAT )之间的精度比较。正如您所见,基线模型和 QAT 模型之间的准确性几乎没有损失。有时,由于模型的进一步整体微调,精度甚至更高。由于 QAT 中模型参数的微调, QAT 的精度总体上高于 PTQ 。

图 4 FP32 (基线)、带 PTQ 的 INT8 和带 QAT 的 INT8 中 ResNet 和 EfficientNet 数据集的准确性

ResNet 作为一种网络结构,一般量化稳定,因此 PTQ 和 QAT 之间的差距很小。然而, EfficientNet 从 QAT 中获益匪浅,与 PTQ 相比,基线模型的准确度损失有所减少。

有关不同模型如何从 QAT 中受益的更多信息,请参见 深度学习推理的整数量化:原理与实证评价 (量化白皮书)中的表 7 。

图 5 显示了 PTQ 和 QAT 具有相似的时间,与各自的基线模型相比,它们引入了高达 19 倍的加速。

图 5 ResNet 和 EfficientNet 系列中各种模型的延迟性能评估

PTQ 有时可能比 QAT 略快,因为它试图量化模型中的所有层,这通常会导致更快的推断,而 QAT 仅量化用 QDQ 节点包裹的层。

有关 TensorRT 如何使用 QDQ 节点的更多信息,请参阅 TensorRT 文档中的 使用 INT8 和 走向 INT8 推理:使用 TensorRT 部署量化感知训练网络的端到端工作流 GTC 会话。

有关各种受支持型号的性能数字的更多信息,请参阅 model zoo 。

结论

在本文中,我们介绍了 TensorFlow 2 的 NVIDIA QAT 工具包 。 我们讨论了在 TensorRT 推理加速环境中使用该工具包的优势。然后,我们演示了如何将该工具包与 ResNet50 结合使用,并对 ResNet 和 EfficientNet 数据集执行准确性和延迟评估。

实验结果表明,与 FP32 模型相比,用 QAT 训练的 INT8 模型的精度相差约 1% ,实现了 19 倍的延迟加速。

关于作者

Gwena Cunha Sergio 在 NVIDIA 担任深度学习软件工程师。在此之前,她是韩国京浦国立大学的一名博士生,致力于研究基于深度学习的方法,用于嘈杂的自然语言处理任务和从多模态数据生成序列。

Sagar Shelke 是 NVIDIA 的深度学习软件工程师,专注于自主驾驶应用程序。他的兴趣包括用于部署和机器学习系统的神经网络优化。萨加尔拥有圣地亚哥州立大学电气和计算机工程硕士学位。

Dheeraj Peri 在 NVIDIA 担任深度学习软件工程师。在此之前,他是纽约罗切斯特理工学院的研究生,致力于基于深度学习的内容检索和手写识别方法。 Dheeraj 的研究兴趣包括信息检索、图像生成和对抗性机器学习。他获得了印度皮拉尼 Birla 理工学院的学士学位。

Josh Park 是 NVIDIA 的汽车解决方案架构师经理。到目前为止,他一直在研究使用 DL 框架的深度学习解决方案,例如在 multi-GPUs /多节点服务器和嵌入式系统上的 TensorFlow 。此外,他一直在评估和改进各种 GPUs + x86 _ 64 / aarch64 的训练和推理性能。他在韩国大学获得理学学士和硕士学位,并在德克萨斯农工大学获得计算机科学博士学位

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4827

    浏览量

    106800
  • NVIDIA
    +关注

    关注

    14

    文章

    5496

    浏览量

    109096
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVIDIA TensorRT LLM 1.0推理框架正式上线

    TensorRT LLM 作为 NVIDIA 为大规模 LLM 推理打造的推理框架,核心目标是突破 NVIDIA 平台上的推理性能瓶颈。为实现这一目标,其构建了多维度的核心
    的头像 发表于 10-21 11:04 757次阅读

    eForce无线通信软件开发工具包兼容WLAN模块WKR612AA1

    近期,eForce株式会社宣布,其面向嵌入式设备的无线通信软件开发工具包(μC3-WLAN SDK)现已兼容 KAGA FEI 生产的无线局域网(WLAN)模块"WKR612AA1"。
    的头像 发表于 09-24 15:16 722次阅读

    DeepSeek R1 MTP在TensorRT-LLM中的实现与优化

    TensorRT-LLM 在 NVIDIA Blackwell GPU 上创下了 DeepSeek-R1 推理性能的世界纪录,Multi-Token Prediction (MTP) 实现了大幅提速
    的头像 发表于 08-30 15:47 3969次阅读
    DeepSeek R1 MTP在<b class='flag-5'>TensorRT</b>-LLM中的<b class='flag-5'>实现</b>与优化

    量化评估企业软件测试能力的评估工具包

    的能力评估标准,让测试团队陷入"救火式加班"的循环。更令人焦虑的是——管理层难以量化测试团队的真实能力水平;工程师说不清效率瓶颈究竟在哪里;工具投入不少,但效果始
    的头像 发表于 08-27 10:04 475次阅读
    <b class='flag-5'>量化</b>评估企业软件测试能力的评估<b class='flag-5'>工具包</b>

    使用NVIDIA Triton和TensorRT-LLM部署TTS应用的最佳实践

    针对基于 Diffusion 和 LLM 类别的 TTS 模型,NVIDIA Triton 和 TensorRT-LLM 方案能显著提升推理速度。在单张 NVIDIA Ada Lovelace
    的头像 发表于 06-12 15:37 1302次阅读
    使用<b class='flag-5'>NVIDIA</b> Triton和<b class='flag-5'>TensorRT</b>-LLM部署TTS应用的最佳实践

    在Google Colab笔记本电脑上导入OpenVINO™工具包2021中的 IEPlugin类出现报错,怎么解决?

    在 Google* Colab Notebook 上OpenVINO™工具包 2021 中使用了 IEPlugin 。 遇到: ImportError: cannot import name \'IEPlugin\' from \'openvino.inference_engine\'
    发表于 03-05 10:31

    构建开源OpenVINO™工具包后,使用MYRIAD插件成功运行演示时报错怎么解决?

    构建开源OpenVINO™工具包后,使用 MYRIAD 插件成功运行演示。 使用 CPU 插件运行演示时遇到错误: Cannot load library \'libarmPlugin.so
    发表于 03-05 09:57

    安装OpenVINO™工具包稳定扩散后报错,怎么解决?

    已安装OpenVINO™工具包稳定扩散并收到错误消息: \"BackendCompilerFailed: openvino_fx raised RuntimeError
    发表于 03-05 06:56

    云计算开发工具包的功能

    随着云计算技术的不断成熟,越来越多的企业开始将应用和服务迁移到云端,以享受弹性计算资源、高可用性和成本效益等优势。为了加速这一进程,云计算服务提供商推出了各种开发工具包。下面,AI部落小编带您了解云计算开发工具包的主要功能。
    的头像 发表于 02-21 11:02 553次阅读

    Labview声音和振动工具包示例文件Sound Level

    Labview 声音和振动工具包示例文件,声压测试,有模拟和DAQ两个文件。
    发表于 01-05 09:15 5次下载

    TSP工具包软件的应用说明

    在一个需要快速开发测试的行业中,有效的自动化和便捷代码的开发需求比以往任何时候都显得更加突出。企业在努力提高产品质量的同时,更需要寻求更短的上市时间,合适的工具正是实现这一目标的关键
    的头像 发表于 01-03 15:53 3289次阅读
    TSP<b class='flag-5'>工具包</b>软件的应用说明

    NVIDIA TensorRT-LLM中启用ReDrafter的一些变化

    Recurrent Drafting (简称 ReDrafter) 是苹果公司为大语言模型 (LLM) 推理开发并开源的一种新型推测解码技术,该技术现在可与 NVIDIA TensorRT-LLM 一起使用。
    的头像 发表于 12-25 17:31 1237次阅读
    在<b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b>-LLM中启用ReDrafter的一些变化

    最新Simplicity SDK软件开发工具包发布

    最新的SimplicitySDK软件开发工具包已经发布!此次更新针对SiliconLabs(芯科科技)第二代无线开发平台带来了包括蓝牙6.0的信道探测(Channel Sounding
    的头像 发表于 12-24 09:47 1473次阅读

    【AIBOX应用】通过 NVIDIA TensorRT 实现实时快速的语义分割

    NVIDIA系列AIBOXAIBOX-OrinNano和AIBOX-OrinNX均搭载NVIDIA原装JetsonOrin核心板模组,标配工业级全金属外壳,铝合金结构导热,顶盖外壳侧面采用条幅格栅
    的头像 发表于 12-18 16:33 1134次阅读
    【AIBOX应用】通过 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b> <b class='flag-5'>实现</b>实时快速的语义分割

    解锁NVIDIA TensorRT-LLM的卓越性能

    NVIDIA TensorRT-LLM 是一个专为优化大语言模型 (LLM) 推理而设计的库。它提供了多种先进的优化技术,包括自定义 Attention Kernel、Inflight
    的头像 发表于 12-17 17:47 1611次阅读