在GPU上利用TensorFlow Serving 部署ResNet

网友投稿 424 2022-11-13

在GPU上利用TensorFlow Serving 部署ResNet

注:ResNet 链接

在 GPU 上利用 TensorFlow Serving 部署 ResNet

$ mkdir /tmp/resnet

$ ls /tmp/resnet

1538687457

注:经过预训练的 ResNet 链接

$ 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 …

Prediction class:286, avg latency:18.0469 ms

注:此处 链接

此 docker run 命令会启动 TensorFlow Serving 服务器,以提供 /tmp/resnet 中已下载的 SavedModel,并在主机中开放 REST API 端口 8501。resnet_client.py 会发送一些图像给服务器,并返回服务器所作的预测。现在让我们终止 TensorFlow Serving 容器的运行,以释放所占用的 GPU 资源。

$ docker kill tfserving_resnet

注:REST API 链接

利用 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 链接

现在,我们只需为模型指定正确的目录,便可利用 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 所带来的性能优势。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Power8伴随云计算横空出世
下一篇:不按需付费的SaaS和耍流氓有什么分别
相关文章

 发表评论

暂时没有评论,来抢沙发吧~