tensorflow serving及tensorrt 的踩坑记录


此文记录一下算法实施过程中遇到的问题,整个过程基于Python技术栈,无缝集成到流式处理框架中,首先软硬件配置如下:
服务器配置:64 cores,256G内存,GPU Tesla K80 (4个);

TensorFlow相关版本:
tensorboard 1.6.0
tensorflow 1.6.0
tensorflow-serving-api 1.6.0
tensorrt 4.0.0.3
cuda 版本 
cat /usr/local/cuda/version.txt
cudnn 版本 
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2


项目中需要提供高并发低延迟的在线predict,正好离线训练用的是TensorFlow的DNN模型,模型的hidden layer设置3层,
取的最终训练好的DNN的隐藏层的权重作为特征,可以类比FNN中用神经网络做了特征延伸,接下来要把训练好的DNN模型部署线上实时predict。
TensorFlow Serving可以提供多模型、多版本的版本发布,很适合迭代开发以及高频部署,具体的server端代码参照:

tensorflow serving及tensorrt 的踩坑记录_第1张图片

调用的client端代码参照:

tensorflow serving及tensorrt 的踩坑记录_第2张图片

如果我们还想进一步优化server端性能,比如进一步降低响应延时,该怎么办?

TensorFlow Serving只是帮我们更好的管理多版本模型及部署,使我们更便捷的对外包装接口,要想从神经网络内部去优化,我们可以借助NVIDIA TensorRT,

Tensorrt首先会将我们训练好的神经网络模型加载并优化,优化一些模型参数比如batch size, precision等,接着序列化到磁盘文件,如下图:

tensorflow serving及tensorrt 的踩坑记录_第3张图片

在线实时predict时,我们会加载磁盘文件并反序列化为TensorRT engine对象,可以看到TensorRT engine对象把之前的隐藏层及神经元都进行了优化,更适合GPU的数据运算,如下图:

tensorflow serving及tensorrt 的踩坑记录_第4张图片

在使用Tensorrt时需要对应的cuda、cudnn版本,TensorFlow 对应的的1.7以后的版本可以用Python编写涉及到TensorRT的代码,如下图:

tensorflow serving及tensorrt 的踩坑记录_第5张图片tensorflow serving及tensorrt 的踩坑记录_第6张图片

 

 

结合物理机上测试数据,Tensorrt可以将TensorFlow serving的响应延时压缩30%以上。

 refer:

https://tensorflow.google.cn/serving/

https://github.com/NVIDIA-AI-IOT/tf_trt_models

https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/

https://www.nvidia.com/en-us/data-center/resources/inference-technical-overview/

转载于:https://www.cnblogs.com/John-Geek-2018/p/9941574.html

你可能感兴趣的:(tensorflow serving及tensorrt 的踩坑记录)