@Team
2018-09-21T17:45:57.000000Z
字数 1569
阅读 1749
刘才权
TensorFlow Serving以Server方式提供模型能力服务,作为服务的使用者(Client)可以通过gRPC和RESTfull API两种方式来获取模型能力。虽然TensorFlow对C/S的通信约束做了说明,但感觉介绍的并不是特别的清晰易用,需要自己根据使用示例,并结合文档进行梳理和总结。
在文档中提到了两个参考示例,一个用于gRPC通信约束测试,一个用于RESTfull API通信约束测试。
示例使用说明: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
示例使用说明: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命令完成
虽然官网提供了两个示例,但实际上RESTfull API的示例过于简单,并且做了封装,实际的参考价值不大。下面主要结合gRPC的示例代码进行分析。
客户端同服务端进行通信交互的核心是几个标识,我们分别介绍下。
指定要使用哪一个模型。
参考mnist_client.py
模型标识在Serving的模型保存输出代码中并没有显示的声明。模型标识实际上是在指定模型输出路径,和设置TF Serving "target"时指定的。
参考:https://www.tensorflow.org/serving/serving_basic
可以粗糙的理解为,用来指定需要调用模型中的哪个方法。
官网定义(参考:https://www.tensorflow.org/serving/signature_defs)
参考mnist_client.py
签名标识在Serving的模型保存输出代码中设置,
参考minist_save_model.py
设置输入,传入待处理的数据。
官网定义(参考:https://www.tensorflow.org/serving/signature_defs)
参考minist_save_model.py
参考mnist_client.py
设置哪些数据作为返回值,只在Serving中进行设置,Client获取的返回值中,能够获取对应的标识。
官网定义(参考:https://www.tensorflow.org/serving/signature_defs)
参考minist_save_model.py
参考mnist_client.py
客户端向服务端发起请求时,指定了模型标识、签名标识、输入标识(包含数据),便可以从服务端获取处理结果,结果中包含输出标识。
gRPC和RESTfull API在通信约束上是一致的。