tensorflow serving 是用于机器学习模型的高性能灵活服务系统,而 nvidia tensorrt™ 是实现高性能深度学习推理的平台,通过将二者相结合,用户便可获得更高性能,从而轻松实现 gpu 推理。tensorflow 团队与 nvidia 合作,在 tensorflow v1.7 中首次添加了对 tensorrt 的支持。此后,我们一直密切合作,共同改进 tensorflow-tensorrt 集成(称为 tf-trt)。tensorflow serving 1.13 现已实现这种集成,tensorflow 2.0 很快也会进行集成。
在 之前的文章 中,我们介绍了如何借助 docker 使用 tensorflow serving。在本文中,我们将展示以同样的方式运行经 tf-trt 转换的模型有多简单。与之前一样,我们尝试在生产环境中部署 resnet 模型。下方所有示例均在配备 titan-v gpu 的工作站上运行。
注:resnet 链接
https://github.com/tensorflow/models/tree/master/official/resnet
在 gpu 上利用 tensorflow serving 部署 resnet
在这项练习中,我们仅下载 经过预训练的 resnet savedmodel:
$ mkdir /tmp/resnet
$ curl -s https://storage.googleapis.com/download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v2_fp32_savedmodel_nhwc_jpg.tar.gz | tar --strip-components=2 -c /tmp/resnet -xvz
$ ls /tmp/resnet
1538687457
注:经过预训练的 resnet 链接
https://github.com/tensorflow/models/tree/master/official/resnet#pre-trained-model
在之前的文章中,我们展示了如何使用 tensorflow serving cpu docker 图像提供模型。在这里,我们运行 gpu docker 图像(请查看此处了解相关说明),以借助 gpu 提供并测试此模型:
$ docker pull tensorflow/serving:latest-gpu
$ docker run --rm --runtime=nvidia -p 8501:8501 --name tfserving_resnet \
-v /tmp/resnet:/models/resnet -e model_name=resnet -t tensorflow/serving:latest-gpu &
…
… server.cc:286] running grpc modelserver at 0.0.0.0:8500 …
… server.cc:302] exporting http/rest api at:localhost:8501 …
$ curl -o /tmp/resnet/resnet_client.py https://raw.githubusercontent.com/tensorflow/serving/master/tensorflow_serving/example/resnet_client.py
$ python /tmp/resnet/resnet_client.py
prediction class:286, avg latency:18.0469 ms
注:此处 链接
https://www.tensorflow.org/serving/docker#serving_with_docker_using_your_gpu
此 docker run 命令会启动 tensorflow serving 服务器,以提供 /tmp/resnet 中已下载的 savedmodel,并在主机中开放 rest api 端口 8501。resnet_client.py 会发送一些图像给服务器,并返回服务器所作的预测。现在让我们终止 tensorflow serving 容器的运行,以释放所占用的 gpu 资源。
$ docker kill tfserving_resnet
注:rest api 链接
https://www.tensorflow.org/tfx/serving/api_rest
利用 tf-trt 转换和部署模型
现在,我们有了工作模型。为了享受 tensorrt 带来的好处,我们需要在 tensorflow serving docker 容器内运行转换命令,从而将此模型转换为使用 tensorrt 运行运算的模型:
$ docker pull tensorflow/tensorflow:latest-gpu
$ docker run --rm --runtime=nvidia -it -v /tmp:/tmp tensorflow/tensorflow:latest-gpu /usr/local/bin/saved_model_cli \
convert --dir /tmp/resnet/1538687457 --output_dir /tmp/resnet_trt/1538687457 --tag_set serve \
tensorrt --precision_mode fp32 --max_batch_size 1 --is_dynamic_op true
在这里,我们运行了 saved_model_cli 命令行工具,其中内置了对 tf-trt 转换的支持。--dir 和 --output_dir 参数会指示 savedmodel 的位置以及在何处输出转换后的 savedmodel,而 --tag_set 则指示 savedmodel 中要转换的图表。随后,我们在命令行中传递 tensorrt 并指定配置,明确指示其运行 tf-trt 转换器:
--precision_mode 指示转换器需使用的精度,目前其仅支持 fp32 和 fp16
--max_batch_size 指示输入的批次大小上限。此转换器要求将由 tensorrt 处理的所有张量将其首个维度作为批次维度,而该参数则指示推理过程中会产生的最大值。若已知推理过程中的实际批次大小上限且该值与之匹配,则转换后的模型即为最优模型。请注意,转换后的模型无法处理批次规模大于此处所指定大小的输入,但可处理批次规模更小的输入
--is_dynamic_op 指示在模型运行时进行实际转换。原因在于,在进行转换时,tensorrt 需要明确所有形状。对于本例中使用的 resnet 模型,其张量没有固定的形状,因此我们需要此参数
注:saved_model_cli 链接
https://www.tensorflow.org/guide/saved_model#cli_to_inspect_and_execute_savedmodel
现在,我们只需为模型指定正确的目录,便可利用 docker 提供经 tf-trt 转换的模型,这与之前一样简单:
$ docker run --rm --runtime=nvidia -p 8501:8501 --name tfserving_resnet \
-v /tmp/resnet_trt:/models/resnet -e model_name=resnet -t tensorflow/serving:latest-gpu &
…
… server.cc:286] running grpc modelserver at 0.0.0.0:8500 …
… server.cc:302] exporting http/rest api at:localhost:8501 …
向其发送请求:
$ python /tmp/resnet/resnet_client.py
prediction class:286, avg latency:15.0287 ms
最后,我们终止容器的运行:
$ docker kill tfserving_resnet
我们可以看到,使用 tensorflow serving 和 docker 生成经 tf-trt 转换的模型与提供一般模型一样简单。此外,以上为展示内容,其中的性能数字仅适用于我们所使用的模型和运行本示例的设备,但它的确展现出使用 tf-trt 所带来的性能优势。
tensorflow 2.0 发布在即,tensorflow 团队和 nvidia 正在共同努力,以确保 tf-trt 能在 2.0 中流畅运行。如需了解最新信息,请查看 tf-trt github 代码库(https://github.com/tensorflow/tensorrt)。
直流电机控制器电路图分享
低功耗4按键/4通道触摸触控芯片VKD104B的特点介绍
安森美半导体推出非同步升压控制器NCV8871
三星将并购作为工具 进一步扩张业务版图将并购作为工具 进一步扩张业务版图
手机市场整体销量增长缓慢 巨头之间的竞争愈演愈烈
在GPU上利用TensorFlow Serving 部署ResNet
显卡性能测试的方法和流程
芯片断供,华为究竟该如何破局呢?
2018年德州仪器中国教育者年会武汉落幕
线下活动 | 大联大车用巡演:驶向未来 预约下一个十五•五骋驰世界
我国在半导体行业在工具等方面对国外商具有不同程度的依赖?
UVLED固化机主要应用于哪些医疗器械
5G应用将融入进博会,联通VR全景远程直播将全面升级
首款续航1000公里以上氢能车研制成功 我国氢能产业交通迎来重大突破
北斗定位水稻机插机技术为我国粮食生产提供新的技术保障
电阻式触摸屏校准算法的优化_电阻式触摸屏工作原理
动力锂电池系统集成关键技术和产品研究
关于机器人的崛起的分析
Facebook诉讼的两项重大收购项目介绍
大族激光谋策锂电设备布局