前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >推荐!私藏的深度学习模型推理加速项目

推荐!私藏的深度学习模型推理加速项目

作者头像
AI算法修炼营
发布2020-05-08 14:32:50
1.3K0
发布2020-05-08 14:32:50
举报

前言

深度学习一般分为训练和部署两大部分。训练部分首先也是最重要的是构建网络结构,准备数据集,使用各种框架进行训练,训练要包含validation和test的过程,最后对于训练好的模型要在实际业务中进行使用。训练的操作一般在线下,实时数据来之后在线训练的情况比较少,大多数情况下数据是离线的,已经收集好的,数据更新不频繁的一天或一周一收集,数据更新频繁的可能几十分钟,在线下有大规模的集群开始对数据或模型进行更新,这样的训练需要消耗大量的GPU,相对而言一般会给一个比较大的batchsize,因为它的实时性要求相对较低,一般训练模型给的是128,甚至有些极端的1024,大的batch的好处是可以充分的利用GPU设备。

但是到推断(Inference)的时候只需要做一个前向计算,将输入通过神经网络得出预测的结果。而推断(Inference)的实际部署有多种可能,可能部署在Data Center(云端数据中心),比如说大家常见的手机上的语音输入,目前都还是云端的,也就是说你的声音是传到云端的,云端处理好之后把数据再返回来;还可能部署在嵌入端,比如说嵌入式的摄像头、无人机、机器人或车载的自动驾驶,当然车载的自动驾驶可能是嵌入式的设备,也可能是一台完整的主机,像这种嵌入式或自动驾驶,它的特点是对实时性要求很高

做一个不同恰当的比方,训练(Training)这个阶段如果模型比较慢,其实是一个砸钱可以解决的问题,我们可以用更大的集群、更多的机器,做更大的数据并行甚至是模型并行来训练它,重要的是成本的投入。而部署端不只是成本的问题,如果方法不得当,即使使用目前最先进的GPU,也无法满足推断(Inference)的实时性要求。因为模型如果做得不好,没有做优化,可能需要二三百毫秒才能做完一次推断(Inference),再加上来回的网络传输,用户可能一秒后才能得到结果。在语音识别的场景之下,用户可以等待;但是在驾驶的场景之下,可能会有性命之庾。

TensorRT简介

TensorRT项目立项的时候名字叫做GPU Inference Engine(简称GIE),Tensor表示数据流动以张量的形式。所谓张量大家可以理解为更加复杂的高维数组,一般一维数组叫做Vector(即向量),二维数组叫做Matrix,再高纬度的就叫Tensor,Matrix其实是二维的Tensor。在TensoRT中,所有的数据都被组成最高四维的数组,如果对应到CNN中其实就是{N, C, H, W},N表示batch size,即多少张图片或者多少个推断(Inference)的实例;C表示channel数目;H和W表示图像或feature maps的高度和宽度。TR表示的是Runtime。

TensorRT整个过程可以分三个步骤,即模型的解析(Parser),Engine优化和执行(Execution)。

项目推荐一:NVIDIA JetRacer AI

搜索结果

网络搜索结果JetRacer AI Kit

这一款是专门为NVIDIA JetRacer AI 项目设计的智能车套件,基于Jetson Nano Developer Kit。扩展板将OLED,电机驱动电路,电池保护电路等集成在一起,免去你焊接电路的烦恼,支持免卸载充电,无需反复拆卸电池。软件方面完全兼容NVIDIA JetRacer AI项目,支持深度学习,自动驾驶,自动视觉巡线等功能。

源码地址:https://github.com/NVIDIA-AI-IOT/jetracer

视频教程:

https://www.bilibili.com/video/av66312848/

项目推荐二:TensorRT Inference 服务端菜鸟教程

本项目通过一个简单易懂,方便快捷的教程,部署一套完整的深度学习模型,一定程度可以满足部分工业界需求。对于不需要自己重写服务接口的团队来说,使用 tesorrt inference sever 作为服务,也足够了。

这里采取的案例是 centernet 检测,SSD,YOLO 系列都比较古老了,虽然教程也比较多,但是都不够简洁而且相对思想比较老,稍微用点新的。

本教程使用的检测模型暂时不提供 model zoo,主要原因是官方 release 的 model 都带 DCN 模块,这个模块有 c++ 层面的库,作为初学者来说,部署起来非常不方便,大家可以根据 centernet 官方提供的代码,自行训练不带 DCN 的模型。

源码地址:

https://github.com/layerism/TensorRT-Inference-Server-Tutorial

本教程的实现路径如下:

  1. 前处理采取 tensorflow 编写,包括图像解析,resize,计算仿射变换矩阵,标准化等,保存成 tensorflow pd 文件
  2. 神经网络部分是 torch,首先把 torch 的模型转换成 onnx,然后通过 onnx-simplifier 做进一步的简化,接着交由 tensorRT 进行进一步优化,以及做 int8 量化。
    • onnx-simplifier 的目的是为了更好地避免 onnx 到 tensorRT 的转换失败,但是,其并不能够百分百保证所有网络都能够被成功转换成 tensorRT,比如 torch 里面的 unsquezze 等 shape 层面的操作会有潜在问题,需要 model.py 里面改改。
    • onnx 有一定概率会掉性能点,这个原因暂时不明,onnx 解析 torch 的计算图时候,并不是一个算子对应一个 onnx 算子,这里面存在一些超参不一致等非常隐藏的问题。
  3. 后处理是 torch 编写,然后转成 onnx,靠 onnx runtime 调度
  4. tensorRT Inference Server 提供 ensemble 模式,可以联合调度 tensorflow 的 pd 文件,tensorRT plan 文件,onnx 格式文件,这样一来,可以把前处理,NN 计算,后处理都服务化,免除工程师搞复杂的编译工作和写 c++ 的工作,整个部署只需要写 python,特别通用高效,且没有竞争力

项目推荐三:TensorRT-Integrate

源码地址:

https://github.com/dlunion/tensorRTIntegrate

本项目包含TensorRT前向、插件、模型转换、量化做封装,简化,易于使用和学习或者工程化。

参考资料:《高性能深度学习支持引擎实战——TensorRT》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI算法修炼营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 搜索结果
    • 网络搜索结果JetRacer AI Kit
    相关产品与服务
    语音识别
    腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档