使用通用gRPC客户端

简介

TensorFlow serving提供了通用的gRPC接口,我们也考虑实现通用的gRPC客户端,由于用户模型的输入数据不同,因此我们通过JSON定义数据,并且集成到Xiaomi Cloud-ML中。

使用Xiaomi Cloud-ML

安装cloudml命令工具后,我们可以创建模型服务,请求的数据保存到本地JSON文件中。

  1. {
  2. "keys_dtype": "int32",
  3. "keys": [[1], [2]],
  4. "features_dtype": "float32",
  5. "features": [[1,2,3,4,5,6,7,8,9], [1,2,3,4,5,6,7,8,9]]
  6. }

注意JSON文件中所有字段与用户TensorFlow模型的定义是对应的,不同模型的键不同,为了构建TensorProto,我们还需要用户为每个键设置类型,字段名是键名加上"_dtype",值是TensorFlow可以支持的格式。

如果模型是我们自己部署的,默认只有我们可以获取该ip,因此直接指定模型名和版本来预测了。

  1. cloudml models predict linear v1 -f ./data.json

如果我们想访问通用的TensorFlow serving服务,可不必创建模型,直接指定ip也可以访问。

  1. cloudml models predict -n linear -s 127.0.0.1:9000 -f ./data.json

实现原理

Xiaomi Cloud-ML的通用客户端是基于Python实现的,和普通Python gRPC客户端类似,实现方法参考 TensorFlow serving Python客户端 。

我们对Python gRPC客户端进行封装,支持读取JSON文件构建TensorProto,易用性更强但灵活性较差,如果不想使用cloudml命令行也可以直接运行下面的脚本。

  1. ./generic_predict_client.py --server 127.0.0.1:9000 --model linear --data ./linear.json

原文: http://docs.api.xiaomi.com/cloud-ml/modelservice/0901_use_generic_client.html