dl_inference是58同城开源的通用深度学习推理工具,可在生产环境中快速上线由TensorFlow、PyTorch、Caffe框架训练出的深度学习模型,提供GPU和CPU两种部署方式,并且实现了模型多节点部署时的负载均衡策略,支持线上海量推理请求,dl_inference支撑了58同城各AI场景下日均超过10亿次的线上推理请求。可参见 《开源|dl_inference:通用深度学习推理服务》。
2021年11月我们对dl_inference进行再次更新,集成TensorRT加速深度学习推理,支持Intel Math Kernel Library库的TensorFlow Serving推理框架,并于12月10号由58技术委员会和AI Lab主办了技术沙龙对使用dl_inference开源工具加速深度学习推理进行解析。可参见 《开源 | dl_inference更新:增加TensorRT、MKL集成,提高深度学习模型推理速度》 。
dl_inference项目地址为 https://github.com/wuba/dl_inference,欢迎大家使用并Star,Issue,PR!
沙龙海报
本次沙龙的视频录像、PPT资料如下,欢迎阅读、点赞、转发、评论~
使用TensorRT加速深度学习推理
魏竹斌, 58同城TEG-AI Lab后端高级工程师。
议题介绍: 深度学习模型推理阶段对算力和时延具有很高的要求,如果将训练好的神经网络直接部署到推理端,很有可能出现算力不足无法运行或者推理时间较长等问题。本次分享主要介绍TensorRT加速原理以及如何使用dl_inference完成TensorFlow、PyTorch框架训练模型的自动优化转换和TIS(Trion Inference Server)推理部署。
PPT下载:
关注“58技术”公众号,回复“dl_inference”即可获取。
关注“58AILab”公众号—部门介绍—联系我们—添加小秘书微信(WubaAILab)备注 “dl_inference” 即可获取。
QA环节:
观众:TensorRT加速效果怎幺样 ?
魏竹斌: 从模型结构层面来讲,TensorRT优化实质是消除了你模型中的无用OP、横向CBR合并和纵向同结构不同权值层合并三大类操作,所以,如果你的模型中存在以上三种情况中的一种,TensorRT都可以进行一定程度优化,具体效果有多大提升,也是取决于你模型网络层级结构。如果你的模型本来就很紧致或很简单,使得TensorRT基本没有优化余地,那加速效果自然不会很明显。
观 众:TensorRT模型部署对硬件有什幺要求吗 ?
魏竹斌 : 转换和部署必须是同一种类型的GPU卡,否则TIS加载模型的时候会报错;另一点就是GPU显存必须足够加载模型 。
观 众:TensorRT模型转换成功率有多少,是一定能转换吗?
魏竹斌 : 实测对图片分类类型模型转换成功率高。主要容易失败的点:TensorFlow/PyTorch 模型转ONNX时,可能会由于OP无法对应失败;ONNX转TensorRT时,同样可能出现OP不支持或数据类型不支持的情况,TensorRT目前只支持BOOL, INT8, INT32, FLOAT16和FLOAT32这5种数据类型,如果你的模型中有这5种之外的数据类型(例如图片处理类模型常用UNIT8或STRING作为输入节点的类型),转换就会以失败告终。但是TensorRT提供了插件机制,可以解决OP不支持的情况 。
观 众: TensorRT对TensorFlow版本有什幺要求吗?
魏竹斌 : 支持TensorFlow1.12-1.15 、2.1-2.7版本,ONNX opset 支持9-15版本,主要是取决于OP是否可以一一对应。
观 众:TensorRT加速后精度有影响吗?
魏竹斌 : 如果不做量化等形式优化,精度基本不变,但是还需要实际测试。TensorRT更多的是通过图优化进行了模型的加速,计算的流程发生了一些变化,但是最终输出的结果并不会改变。
观 众:dl_inference使用镜像仓库地址,是否可以直接本地测试 ?
魏竹斌 : 我们在github中已经构建好了模型转换镜像的Dockerfile,可以直接构建;TIS镜像是NVIDIA官方镜像,可以直接pull;本地只要硬件支持可以直接测试。
观 众: dl_inference集成的TensorRT加速支持INT8量化吗?
魏竹斌 : TensorRT支持INT8量化,我们在生产环境中,也有一些模型已经使用了INT8精度,使用INT8精度可以带来更高的性能提升,在dl_inference后续版本中会考虑开源出来,大家可以持续关注。
使用MKL(Math Kernel Library)加速深度学习推理
魏竹斌,58同城TEG-AI Lab后端高级工程师。
议题介绍: 模型CPU上推理耗时高而切换到GPU上推理成本高,迫切需要提高模型在CPU上的推理性能。本次分享详细阐述MKL(Math Kernel Library)加速原理,以实际案例介绍TensorFlow Serving MKL版本在 dl_inference中 的具体应用和效果 。
PPT下载:
关注“58技术”公众号,回复“dl_inference”即可获取。
关注“58AILab”公众号—部门介绍—联系我们—添加小秘书微信(WubaAILab)备注 “dl_inference” 即可获取。
QA环节:
观众 : MKL是否可以应用在任意模型中,是否都会有优化效果?
韩雨 : MKL并不能对所有模型都有较好的优化效果,通常我们更多的将MKL应用在CV领域的相关模型当中,其他模型需要具体进行测试后才能确认是否有加速效果,这和模型的结构,计算时是否用到了指令集优化都有关系,我们dl_inferecen在测试实践中,发现部分推荐类模型并不会有效果提升,例如Wide&Deep,DIEN,FM相关模型。我们建议大家分别测试原始版本的TensorF low Serving和通过MKL优化后的TensorFlow Serving后,根据实际测试的数据为准,进行模型的上线工作 。
观众 : dl_inference是否支持灰度测试功能 ?
韩雨 : dl_inference目前并不支持灰度测试功能,但是可以根据dl_inference的现有特性,来实现灰度功能。dl_inference是作为一种推理工具的参考案例提供给大家,大家需要根据自己的实际需求进行集成。例如在dl_inference中,可以通过模型id调用不同的服务,那幺大家在集成的时候,就可以将这个id作为灰度区别手段之一,例如将90%的请求,由id为1001的模型处理,将10%的请求,由id为1002的模型处理,以此来实现灰度功能。
观众 :使用MKL后精度会有影响吗 ?
韩雨 : MKL主要是通过数学上等价的操作,实现计算量,数据传输速度的提升,在数学上等价的操作,我们可以理解为最终输出的结果会是一致的。另外MKL的优化是通过指令集的并行计算,这里也并不会带来结果上的变化。一般来说,只有模型量化才会对精度产生较大的影响,例如将数据的计算从FP32精度变为FP16精度,MKL并不属于模型量化的领域。我们实测使用MKL后,对于一些精度的影响可能会发生在小数点第六位,甚至第七位,通常这种精度的变化我们认为是不会有影响的。
观众 :使用MKL是否可以在ARM架构上使用 ?
韩雨 : 支持,MKL同样可以在ARM架构上进行使用。本次分享的内容,主要是基于x86和x64架构,因为这两种架构使用更加广泛,但是ARM架构也是同样支持的,大家可以自行尝试使用ARM架构的性能提升。
观众 :CPU推理和GPU推理差异是多少 ?
韩雨 : CPU和GPU是两种架构,应用场景也不同,推理性能上需要看CPU和GPU的具体型号。我们推荐对于计算密集型的模型,优先放在GPU上运行,性能会比CPU上高很多倍。对于一些计算结构较为简单的模型,使用CPU进行推理也会有不错的效果,最终还是要根据具体的模型的测试结果,和性价比,来决定使用CPU还是GPU推理。
观众 :使用MKL推理性 能可以提升多少 ?
韩雨 : 在本次分享中,给大家介绍的是Resnet50模型的优化效果,在Resnet50模型中,在相同硬件环境下,使用MKL后QPS可以提升60%以上,耗时可以降低40%。在之前PPT中列举的MobileNe t,SSD(Single Shot MultiBox Detector)模型 ,都有着不错的加速效果,大家可以使用dl_inference测试下自己的模型的效果提升。
dl_inference地址:https://github.com/wuba/dl_inference
欢迎使用,并 Star,Issue,PR!
Be First to Comment