TensorFlow Serving以Server方式提供模型能力服务,作为服务的使用者(Client)可以通过gRPC和RESTfull API两种方式来获取模型能力。虽然TensorFlow对C/S的通信约束做了说明,但感觉介绍的并不是特别的清晰易用,需要自己根据使用示例,并结合文档进行梳理和总结。
官方参考示例
在文档中提到了两个参考示例,一个用于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命令完成
示例代码分析
虽然官网提供了两个示例,但实际上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

总结
客户端向服务端发起请求时,指定了模型标识、签名标识、输入标识(包含数据),便可以从服务端获取处理结果,结果中包含输出标识。
gRPC和RESTfull API在通信约束上是一致的。
网友评论