01
背 景
dl_inference是58同城推出的通用深度学习推理服务,可在生产环境中快速上线由TensorFlow、PyTorch、Caffe等框架训练出来的深度学习模型。dl_inference于2020年3月26号发布,可参见《开源|dl_inference:通用深度学习推理服务》。
我们在2021年11月对dl_inference再次进行更新,从发布至今新增如下Features:
1、集成TensorRT加速深度学习推理,支持将TensorFlow-SavedModel模型、PyTorch-Pth模型进行自动优化,转换为TensorRT模型后部署,提高模型在GPU上的推理速度。
2、集成Intel Math Kernel Library库的TensorFlow Serving推理框架,加速TensorFlow模型CPU上推理。
3、支持Caffe模型推理,提供丰富的模型应用示例。
02
使用TensorRT加速深度学习推理
深度学习模型推理阶段对算力和时延具有很高的要求,如果将训练好的神经网络直接部署到推理端,很有可能出现算力不足无法运行或者推理时间较长等问题,因此我们需要对训练好的神经网络进行一定的优化。TensorRT是NVIDIA推出的一款基于CUDA和cuDNN的神经网络推理加速引擎,能从以下几个方面来提升模型在GPU上的推理性能:模型和模型元数据描述文件准备好后,在dl_inference/TisPredictOnline/DockerImage目录下进行镜像生成。{
"batch_size":0,
"input":[
{
"name":"image",
"data_type":"float",
"dims":[
-1,
224,
224,
3
],
"node_name":"input_1:0"
}
],
"output":[
{
"name":"probs",
"data_type":"float",
"dims":[
-1,
19
],
"node_name":"dense_1/Softmax:0"
}
]
}
最后启动镜像,自动化执行模型转换操作,完成模型转换。cd DockerImage
docker build -t tis-model-convert:lastest .
2、模型部署 首先需要拉取镜像,然后启动镜像进行模型TIS推理部署。cd $模型所在路径
docker run -v `pwd`:/workspace/source_model -e SOURCE_MODEL_PATH=/workspace/source_model -e TARGET_MODEL_PATH=/workspace/source_model -e MODEL_NAME=tensorflow-666 -e MODEL_TYPE=tensorflow tis-model-convert:lastest
# SOURCE_MODEL_PATH 原始模型所在路径,也是模型描述文件所在路径
# TARGET_MODEL_PATH 生成TensorRT模型所在路径
# MODEL_NAME 模型名称
# MODEL_TYPE 模型类型 (tensorflow or pytorch)
至此模型TIS推理服务已经就绪,开发者可以通过客户端对其进行测试,dl_inference定义了rpc接口TisPredict用于进行调用,同时也提供了client demo (dl_inference/DLPredictOn-line/demo/src/main/java/com/bj58/ailab/demo/client/TisClient.java)供开发者进行参考。 使用TensorRT加速深度学习推理能够使得GPU上推理性能大幅提升,如dl_inference在TensorFlow框架训练的Resnet50模型上应用TensorRT加速功能,在不降低推理精度情况下,T4卡上加速后QPS提升80%,耗时降低18%,如下图所示。docker pull nvcr.io/nvidia/tritonserver:20.08-py3
docker run -v ${TARGET_MODEL_PATH}:/workspace -p 8001:8001 nvcr.io/nvidia/tritonserver:20.08-py3 /opt/tritonserver/bin/tritonserver --model-repository=/workspace
# TARGET_MODEL_PATH即为模型转换服务中环境变量值,默认使用8001端口且此端口固定
03
使用Intel MKL 加速深度学习推理
Math Kernel Library(简称MKL,后改名为oneDNN)为Intel推出的数学核心函数库,能够在CPU上利用AVX2、FMA等指令进行指令集优化。dl_inference通过利用MKL库,在以下几个方面对TensorFlow模型推理进行了优化:KMP_BLOCKTIME - 设置线程在执行完并行区域之后,在休眠之前应该等待的时间(以毫秒为单位)dl_inference在Intel(R) Xeon(R) CPU E5-2620上部署Resnet50模型推理使用MKL版本获取了不错的加速效果,使用MKL版本的TensorFlow Serving相对直接使用TensorFlow Serving QPS提升60%,耗时降低40%,对比时分配的CPU资源为4核,效果如下图所示。
KMP_AFFINITY - 控制线程如何分布并绑定到特定的处理单元
KMP_SETTINGS - 允许 (true) 或禁止 (false) 在程序执行期间输出 OpenMP* 运行时库环境变量
OMP_NUM_THREADS - OpenMP运行时可用的最大线程数,通常设置为等于物理内核的数量
04
总结
dl_inference2020年3月发布以来完成的三次版本迭代,丰富了使用案例,支持了Caffe框架训练的模型推理,提升了模型在GPU和CPU上推理性能。使用过程中,如遇任何问题可添加“58技术小秘书”为好友,备注“dl_inference”加入官方交流群寻求帮助。 后续我们还将对这三次版本迭代进行线上的沙龙直播,敬请期待![1] 通过Intel MKL优化TensorFlow:https://www.intel.cn/content/www/cn/zh/developer/articles/technical/tensorflow-optimizations-on-modern-intel-architecture.html
[2] 在Intel CPU上通过参数配置优化TensorFlow性能:https://www.intel.com/content/www/us/en/developer/articles/technical/maximize-tensorflow-performance-on-cpu-considerations-and-recommendations-for-inference.html
[3] Intel深度学习加速调优指南:https://www.intel.cn/content/www/cn/zh/developer/articles/technical/deep-learning-with-avx512-and-dl-boost.html
[4] NVIDIA TensorRT介绍:https://docs.nvidia.com/deeplearning/tensorrt/
[5] NVIDIA Triton-Inference-Server介绍:https://developer.nvidia.com/nvidia-triton-inference-server
本文分享自微信公众号 - 58技术(architects_58)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
|