0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在GPU上利用TensorFlow Serving 部署ResNet

Tensorflowers 来源:lp 2019-03-05 17:51 次阅读

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)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4830

    浏览量

    129778
  • 机器学习
    +关注

    关注

    66

    文章

    8460

    浏览量

    133412
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60730

原文标题:利用 NVIDIA TensorRT 优化 TensorFlow Serving 的性能

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用OpenVINO™ 2020.4.582将自定义TensorFlow 2模型转换为中间表示 (IR)收到错误怎么解决?

    转换自定义 TensorFlow 2 模型 mask_rcnn_inception_resnet_v2_1024x1024_coco17 要 IR 使用模型优化器命令: 注意上面的链接可能无法
    发表于 03-07 07:28

    无法GPU运行ONNX模型的Benchmark_app怎么解决?

    CPU 和 GPU 运行OpenVINO™ 2023.0 Benchmark_app推断的 ONNX 模型。 CPU 推理成功
    发表于 03-06 08:02

    是否可以使用OpenVINO™部署管理器部署机器运行Python应用程序?

    使用 OpenVINO™部署管理器创建运行时软件包。 将运行时包转移到部署机器中。 无法确定是否可以部署机器运行 Python 应用程
    发表于 03-05 08:16

    为什么无法将TensorFlow自定义模型转换为IR格式?

    TensorFlow* 自定义模型转换为 IR 格式: mo --data_type FP16 --saved_model_dir--input_shape (1,150,150,3
    发表于 03-05 07:26

    设备利用AI Edge Torch生成式API部署自定义大语言模型

    ,从而无缝地将新的设备端生成式 AI 模型部署到边缘设备。本文是 Google AI Edge 博客连载的第二篇。一篇文章为大家介绍了 Google AI Edge Torch,该产品可以
    的头像 发表于 11-14 10:23 643次阅读
    <b class='flag-5'>在</b>设备<b class='flag-5'>上</b><b class='flag-5'>利用</b>AI Edge Torch生成式API<b class='flag-5'>部署</b>自定义大语言模型

    快速部署Tensorflow和TFLITE模型Jacinto7 Soc

    电子发烧友网站提供《快速部署Tensorflow和TFLITE模型Jacinto7 Soc.pdf》资料免费下载
    发表于 09-27 11:41 0次下载
    快速<b class='flag-5'>部署</b><b class='flag-5'>Tensorflow</b>和TFLITE模型<b class='flag-5'>在</b>Jacinto7 Soc

    混合部署 | RK3568同时部署RT-Thread和Linux系统-迅为电子

    混合部署 | RK3568同时部署RT-Thread和Linux系统-迅为电子
    的头像 发表于 09-06 15:32 571次阅读
    混合<b class='flag-5'>部署</b> | <b class='flag-5'>在</b>RK3568<b class='flag-5'>上</b>同时<b class='flag-5'>部署</b>RT-Thread和Linux系统-迅为电子

    AvaotaA1全志T527开发板上部署ncnn

    ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。 ncnn 从设计之初深刻考虑手机端的部署和使用。 无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架
    发表于 07-22 10:36

    利用TensorFlow实现基于深度神经网络的文本分类模型

    利用TensorFlow实现一个基于深度神经网络(DNN)的文本分类模型,我们首先需要明确几个关键步骤:数据预处理、模型构建、模型训练、模型评估与调优,以及最终的模型部署(尽管本文
    的头像 发表于 07-12 16:39 1070次阅读

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google开发的一个开源深度学习框架,它允许开发者方便地构建、训练和部署各种复杂的机器学习模型。TensorFlow凭借其高效的计算性能、灵活的架构以及丰富的工具和库,在学
    的头像 发表于 07-12 16:38 955次阅读

    tensorflow和pytorch哪个更简单?

    PyTorch更简单。选择TensorFlow还是PyTorch取决于您的具体需求和偏好。如果您需要一个易于使用、灵活且具有强大社区支持的框架,PyTorch可能是一个更好的选择。如果您需要一个
    的头像 发表于 07-05 09:45 1138次阅读

    tensorflow简单的模型训练

    本文中,我们将详细介绍如何使用TensorFlow进行简单的模型训练。TensorFlow是一个开源的机器学习库,广泛用于各种机器学习任务,包括图像识别、自然语言处理等。我们将从安装
    的头像 发表于 07-05 09:38 918次阅读

    如何使用Tensorflow保存或加载模型

    TensorFlow是一个广泛使用的开源机器学习库,它提供了丰富的API来构建和训练各种深度学习模型。模型训练完成后,保存模型以便将来使用或部署是一项常见的需求。同样,加载已保存的模型进行预测或
    的头像 发表于 07-04 13:07 1976次阅读

    TensorFlow的定义和使用方法

    数据流图,从而简化机器学习模型的构建、训练和部署。自2015年11月开源以来,TensorFlow迅速成为数据科学家、软件开发者以及教育工作者广泛使用的工具,广泛应用于图像识别、自然语言处理、推荐系统等多个领域。本文将深入解读Tenso
    的头像 发表于 07-02 14:14 1065次阅读

    FPGA深度学习应用中或将取代GPU

    上涨,因为事实表明,它们的 GPU 训练和运行 深度学习模型 方面效果明显。实际,英伟达也已经对自己的业务进行了转型,之前它是一家纯粹做 GPU 和游戏的公司,现在除了作为一家云
    发表于 03-21 15:19