TensorFlow Serving使用指南

简介: TensorFlow Serving使用指南

简介


TensorFlow Serving 是一个适用于机器学习模型的灵活、高性能应用系统,专为生产环境而设计。借助 TensorFlow Serving,您可以轻松部署新算法和实验,同时保留相同的服务器架构和 API。TensorFlow Serving 提供与 TensorFlow 模型的开箱即用型集成,但也可以轻松扩展以应用其他类型的模型和数据。


服务示例流程


安装了模型服务器的最新 TensorFlow 服务图像

docker pull tensorflow/serving
  • 使用一个名为 的玩具模型,该模型为我们提供的预测值生成。Half Plus Two``0.5 * x + 2``x要获取此模型,请先克隆 TensorFlow Serve 存储库。
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
  • 运行 TensorFlow Serve 容器,将其指向此模型并打开 REST API 端口 (8501)
 docker run -p 8501:8501 -v /tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu:/models/half_plus_two   -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &

docker run 是在 Docker 中运行容器的命令。


-p 8501:8501 是将容器内部的端口 8501 映射到主机上的端口 8501。这样可以在外部访问 TensorFlow Serving 模型服务器。


-v


/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu:/models/half_plus_two 挂载了一个本地目录作为容器内部的模型目录。这样可以在容器中加载模型。


-e MODEL_NAME=half_plus_two 设置了环境变量 MODEL_NAME 为 “half_plus_two”。TensorFlow Serving 模型服务器会使用这个环境变量来确定加载哪个模型。


-t tensorflow/serving:latest-gpu 指定了使用的镜像为 TensorFlow Serving 的最新版本。最后的 & 意思是在后台运行,可以继续使用命令行。


使用预测 API 查询模型,通过命令行工具 curl 向 TensorFlow Serving 模型服务器发送了一个预测请求,要求预测模型 “half_plus_two” 对于输入数据 [1.0, 2.0, 5.0] 的输出

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict
  • 返回
{ "predictions": [2.5, 3.0, 4.5] }

模型训练、加载、推理


  • 训练模型(删除run_in_docker.sh中自动更新docker的部分)
tools/run_in_docker.sh python tensorflow_serving/example/mnist_saved_model.py \
  /tmp/mnist
  • 模型保存在
$ ls /tmp/mnist/1
saved_model.pb variables
  • 加载模型
docker run -p 8500:8500 \
--mount type=bind,source=/tmp/mnist,target=/models/mnist \
-e MODEL_NAME=mnist -t tensorflow/serving &
  • 测试模型
tools/run_in_docker.sh python tensorflow_serving/example/mnist_client.py  --num_tests=1000 --server=127.0.0.1:8500
  • 输出结果
Inference error rate: 11.13%

查看模型情况


本地浏览器打开如下网址, 可以JSON的形式查看模型的基本运行及 metadata 情况.


查看模型概况

http://127.0.0.1:8501/v1/models/mnist
{
  "model_version_status": [
    {
      "version": "1",
      "state": "AVAILABLE",
      "status": {
        "error_code": "OK",
        "error_message": ""
      }
    }
  ]
}

查看模型metadata 数据情况

http://127.0.0.1:8501/v1/models/mnist/metadata
{
  "model_spec": {
    "name": "mnist",
    "signature_name": "",
    "version": "1"
  },
  "metadata": {
    "signature_def": {
      "signature_def": {
        "serving_default": {
          "inputs": {
            "inputs": {
              "dtype": "DT_FLOAT",
              "tensor_shape": {
                "dim": [
                  {
                    "size": "-1",
                    "name": ""
                  },
                  {
                    "size": "224",
                    "name": ""
                  },
                  {
                    "size": "224",
                    "name": ""
                  },
                  {
                    "size": "3",
                    "name": ""
                  }
                ],
                "unknown_rank": false
              },
              "name": "concat_channel:0"
            }
          },
          "outputs": {
            "outputs": {
              "dtype": "DT_INT64",
              "tensor_shape": {
                "dim": [
                  {
                    "size": "-1",
                    "name": ""
                  }
                ],
                "unknown_rank": false
              },
              "name": "predict:0"
            }
          },
          "method_name": "tensorflow/serving/predict"
        }
      }
    }
  }
}

调用接口进行预测

import cv2
import numpy as np
import  requests
import json
url = 'http://127.0.0.1:8501/v1/models/mnist:predict'
image = cv2.imread("11.jpg", cv2.IMREAD_COLOR)
image = image.astype(np.float32) / 255
image = image.tolist()
headers = {"content-type": "application/json"}
body = {
        "signature_name": "serving_default",
        "inputs": [
           image 
           ]
        }
r = requests.post(url, data = json.dumps(body), headers = headers)
text = r.text
print(text)


目录
相关文章
|
8月前
|
编译器 TensorFlow 算法框架/工具
windows部署tensorflow serving
windows部署tensorflow serving
|
5月前
|
前端开发 开发者 设计模式
揭秘Uno Platform状态管理之道:INotifyPropertyChanged、依赖注入、MVVM大对决,帮你找到最佳策略!
【8月更文挑战第31天】本文对比分析了 Uno Platform 中的关键状态管理策略,包括内置的 INotifyPropertyChanged、依赖注入及 MVVM 框架。INotifyPropertyChanged 方案简单易用,适合小型项目;依赖注入则更灵活,支持状态共享与持久化,适用于复杂场景;MVVM 框架通过分离视图、视图模型和模型,使状态管理更清晰,适合大型项目。开发者可根据项目需求和技术栈选择合适的状态管理方案,以实现高效管理。
58 0
|
5月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow Serving 部署指南超赞!让机器学习模型上线不再困难,轻松开启高效服务之旅!
【8月更文挑战第31天】TensorFlow Serving是一款高性能开源服务系统,专为部署机器学习模型设计。本文通过代码示例详细介绍其部署流程:从安装TensorFlow Serving、训练模型到配置模型服务器与使用gRPC客户端调用模型,展示了一站式模型上线解决方案,使过程变得简单高效。借助该工具,你可以轻松实现模型的实际应用。
101 0
|
人工智能 安全 Cloud Native
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
538 0
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
|
Cloud Native 安全 TensorFlow
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(2)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(2)
360 0
|
弹性计算 Cloud Native TensorFlow
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(3)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(3)
224 0
|
Cloud Native TensorFlow 算法框架/工具
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(4)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(4)
245 0
|
机器学习/深度学习 弹性计算 JSON
Tensorflow Serving部署模型与调用
本文以mnist为数据集,使用keras 构建CNN网络,将训练获取的模型通过Tensorflow Serving方式部署提供Rest Full接口,分别使用PostMan和Python调用服务,代码编辑调试使用阿里云PAI DSW实例,模型部署使用阿里云ECS虚拟机。
62726 2
Tensorflow Serving部署模型与调用
|
机器学习/深度学习 TensorFlow API
Tensorflow serving with docker
本次教程的目的是带领大家看下如何用 Docker 部署深度学习模型的 第一步我们需要 pull 一个 docker image
308 0
|
Serverless Shell TensorFlow
开发函数计算的正确姿势——tensorflow serving
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。
3814 0