使用通用gRPC客户端
简介
TensorFlow serving提供了通用的gRPC接口,我们也考虑实现通用的gRPC客户端,由于用户模型的输入数据不同,因此我们通过JSON定义数据,并且集成到Xiaomi Cloud-ML中。
使用Xiaomi Cloud-ML
安装cloudml命令工具后,我们可以创建模型服务,请求的数据保存到本地JSON文件中。
{
"keys_dtype": "int32",
"keys": [[1], [2]],
"features_dtype": "float32",
"features": [[1,2,3,4,5,6,7,8,9], [1,2,3,4,5,6,7,8,9]]
}
注意JSON文件中所有字段与用户TensorFlow模型的定义是对应的,不同模型的键不同,为了构建TensorProto,我们还需要用户为每个键设置类型,字段名是键名加上"_dtype",值是TensorFlow可以支持的格式。
如果模型是我们自己部署的,默认只有我们可以获取该ip,因此直接指定模型名和版本来预测了。
cloudml models predict linear v1 -f ./data.json
如果我们想访问通用的TensorFlow serving服务,可不必创建模型,直接指定ip也可以访问。
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命令行也可以直接运行下面的脚本。
./generic_predict_client.py --server 127.0.0.1:9000 --model linear --data ./linear.json