分享 | 网络加速 - OpenVINO与Tensor RT 原理比较

分享 | 网络加速 - OpenVINO与Tensor RT 原理比较

爱分享的 OpenVINO 中文社区

内容来源|李乐恒
文案 / 排版 | 卢 蔷 薇
原 文 链 接 | https://zhuanlan.zhihu.com/p/162831104

为什么需要网络加速/压缩?

大家熟知的resnet,densenet均属于巨无霸类型的网络,在延迟,大小均对用户不友好。

试想:你下载了一个手势识别的app,里面还带上了100m大小的resnet,这不是很好的体验。

为了部署深度学习模型,我们可能会在CPU/GPU设备上部署模型。

所幸,核弹厂与牙膏厂都提供了官方的网络加速工具。核弹厂对应Tensor RT(GPU),牙膏厂对应openvino(CPU),而对于FPGA等其他架构,我不懂,所以下面我们比较OpenVINO 与Tensor RT 的原理。

Tensor RT

在这里插入图片描述
Tensor RT主要有以下两种方式实现网络加速:

01 层间融合或张量融合(Layer & Tensor Fusion)

以典型的Googlenet也就是Inception模块为例,我们通常称conv+bias+relu(CBR)为一个block,TensorRT通过对层间的横向或纵向合并,使得层的数量大大减少。横向合并可以把卷积、偏置和激活层合并成一个CBR结构,只占用一个CUDA核心。纵向合并可以把结构相同,但是权值不同的层合并成一个更宽的层,也只占用一个CUDA核心。合并之后的计算图(图4右侧)的层次更少了,占用的CUDA核心数也少了,因此整个模型结构会更小,更快,更高效。

02 数据精度校准(Precision Calibration)

我们训练的网络通常是FP32精度的网络,一旦网络训练完成,在部署推理的过程中由于不需要反向传播,完全可以适当降低数据精度,比如降为FP16或INT8的精度。更低的数据精度将会使得内存占用和延迟更低,模型体积更小。

而什么是Calibration?对于模型中的若干网络层,我们可以逐个的降低其精度,同时准备一个验证集,再划定一条baseline,但网络的性能降低到baseline时,我们停止降低精度。当然也可以将所有网络层的精度降低,但与此同时模型的性能也会降低。

OpenVINO

整体优化目标与Tensor RT类似,只不过设备由GPU变为CPU。

01 Linear Operations Fusing

在这里插入图片描述
以resnet为例,对于bn层,他可以被解构为Mul → Add → Mul → Add,并且可以被集合到conv层中。

02 数据精度校准(Precision Calibration)

与Tensor RT一样,我这里就复制了。

我们训练的网络通常是FP32精度的网络,一旦网络训练完成,在部署推理的过程中由于不需要反向传播,完全可以适当降低数据精度,比如降为FP16或INT8的精度。更低的数据精度将会使得内存占用和延迟更低,模型体积更小。

而什么是Calibration?对于模型中的若干网络层,我们可以逐个的降低其精度,同时准备一个验证集,再划定一条baseline,但网络的性能降低到baseline时,我们停止降低精度。当然也可以将所有网络层的精度降低,但与此同时模型的性能也会降低。

关注我们,让开发变得更有趣👇
在这里插入图片描述

微信号:openvinodev
B站:OpenVINO 中文社区

*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值