外链论坛

 找回密码
 立即注册
搜索
查看: 50|回复: 3

怎么样用英伟达TensorRT优化TensorFlow Serving的性能?谷歌工程师一文详解

[复制链接]

3003

主题

2万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139269
发表于 2024-7-28 01:21:03 | 显示全部楼层 |阅读模式

文 / Guangda Lai、Gautam Vasudevan、Abhijit Karmarkar、Smit Hinsu

量子位 转载自 TensorFlow公众号

怎么样用TensorFlow Serving系统,结合英伟达的Tensor RT,实现高性能深度学习推理?

TensorFlow团队的工程师们最新发布的一篇教程,便是要一步步教会你。

量子位经授权转载,如下~

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

加入社群

量子位现开放「AI+行业」社群,面向AI行业关联从业者,技术、制品等人员,按照所在行业可选取相应行业社群,在量子位公众号(QbitAI)对话界面回复关键词“行业群”,获取入群方式。行业群会有审核,敬请谅解。

另外,量子位AI社群正在招募,欢迎对AI感兴趣的朋友,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式。

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的朋友加入咱们关联细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վᴗ ի 跟踪AI技术和制品新动态

爱好就点「好看」吧 !

回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-21 04:14:46 | 显示全部楼层
外链发布社区 http://www.fok120.com/
回复

使用道具 举报

3046

主题

2万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098928
发表于 2024-10-8 21:05:51 | 显示全部楼层
你的见解真是独到,让我受益匪浅。
回复

使用道具 举报

3011

主题

2万

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99159151
发表于 2024-10-18 07:59:56 | 显示全部楼层
哈哈、笑死我了、太搞笑了吧等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-9 00:45 , Processed in 0.073979 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.