TensorFlow Servering C/S通信约束

TensorFlow Serving以Server方式提供模型能力服务,作为服务的使用者(Client)可以通过gRPC和RESTfull API两种方式来获取模型能力。虽然TensorFlow对C/S的通信约束做了说明,但感觉介绍的并不是特别的清晰易用,需要自己根据使用示例,并结合文档进行梳理和总结。

01

官方参考示例

在文档中提到了两个参考示例,一个用于gRPC通信约束测试,一个用于RESTfull API通信约束测试

1. gRPC示例

  • 示例使用说明
    • https://www.tensorflow.org/serving/serving_basic
  • 模型输出
    • minist_save_model.py
    • 示例代码
      • https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_saved_model.py
  • 客户端验证
    • mnist_client.py
    • 示例代码
      • https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_client.py

2. RESTfull API示例

  • 示例使用说明
    • https://www.tensorflow.org/serving/api_rest
  • 模型输出
    • export_half_plus_two.py
    • 示例代码
      • https://github.com/tensorflow/serving/blob/master/tensorflow_serving/servables/tensorflow/testdata/export_half_plus_two.py
  • 客户端验证
    • Http请求,通过curl命令完成

02

示例代码分析

虽然官网提供了两个示例,但实际上RESTfull API的示例过于简单,并且做了封装,实际的参考价值不大。下面主要结合gRPC的示例代码进行分析。

客户端同服务端进行通信交互的核心是几个标识,我们分别介绍下。

1. 模型标识

指定要使用哪一个模型。

参考mnist_client.py

模型标识在Serving的模型保存输出代码中并没有显示的声明。模型标识实际上是在指定模型输出路径,和设置TF Serving “target”时指定的。

参考:https://www.tensorflow.org/serving/serving_basic

2. 签名标识

可以粗糙的理解为,用来指定需要调用模型中的哪个方法。

官网定义(参考:https://www.tensorflow.org/serving/signature_defs)

参考mnist_client.py

签名标识在Serving的模型保存输出代码中设置,

参考minist_save_model.py

3. 输入标识

设置输入,传入待处理的数据

官网定义(参考:https://www.tensorflow.org/serving/signature_defs)

参考minist_save_model.py

参考mnist_client.py

4. 输出标识

设置哪些数据作为返回值,只在Serving中进行设置,Client获取的返回值中,能够获取对应的标识。

官网定义(参考:https://www.tensorflow.org/serving/signature_defs)

参考minist_save_model.py

参考mnist_client.py

03

总结

客户端向服务端发起请求时,指定了模型标识、签名标识、输入标识(包含数据),便可以从服务端获取处理结果,结果中包含输出标识。

gRPC和RESTfull API在通信约束上是一致的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注