RESTful API 调用
关于 caicloud.clever.serving.client.RESTfulClient 类
TaaS 平台的本地开发包 caicloud.tensorflow 提供 caicloud.clever.serving.client.RESTfulClient
类用于调用模型托管 Serving 的 RESTful API。
RESTfulClient
类提供了下面两个方法:
__init__(host)
:创建一个 Serving RESTful API 请求客户端对象。
参数
host
为托管模型 Serving RESTful API 服务地址。call_predict(inputs, output_filter=None)
:执行 RESTful API 请求,执行托管模型的预测方法。
参数
inputs
为输入 tensor 别名到实际输入值的字典;参数
output_filter
用于过滤托管模型计算的输出 tensor,默认为None
,表示计算所有输出 tensor。返回最终托管模型计算的输出 tensor 别名到实际输出值的字典。
如果还没有安装 caicloud.tensorflow 包,则通过下面命令进行安装,
$ sudo pip install caicloud.tensorflow
mnist-serving 的 RESTful Client
我们使用 caicloud.clever.serving.client.RESTfulClient
来实现访问模型托管 mnist-serving RESTful API 的 client 端代码,
import tensorflow as tf
from caicloud.clever.serving.client import restful_client
from caicloud.clever.serving.client import serving_error
from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets as input_data
client = restful_client.RESTfulClient('192.168.16.42:32638')
# loading mnist data
print("Loading mnist data...")
mnist = input_data("/tmp/mnist-data", one_hot=True)
# prepare request input data
input_data = mnist.test.images[0]
input_data_shape = [1, mnist.test.images[0].size]
inputs = {
'image': tf.contrib.util.make_tensor_proto(input_data, shape=input_data_shape),
}
try:
# call client.call_predict() to do model predict.
outputs = client.call_predict(inputs)
# get output: logits
result = tf.contrib.util.make_ndarray(outputs["logits"])
print('logits: {0}'.format(result))
except serving_error.ServingRESTfulError as e:
print('serving error,\n status: {0},\n reason: {1},\n body: {2}'.format(e.status, e.reason, e.body))
将上面代码保存到 restful_clieint.py 文件,然后运行,
bash-3.2$ python restful_client.py
Loading mnist data...
Extracting /tmp/mnist-data/train-images-idx3-ubyte.gz
Extracting /tmp/mnist-data/train-labels-idx1-ubyte.gz
Extracting /tmp/mnist-data/t10k-images-idx3-ubyte.gz
Extracting /tmp/mnist-data/t10k-labels-idx1-ubyte.gz
logits: [[-0.37270582 -7.31677485 -0.04589005 2.54814148 -2.60255098 -1.18702579
-5.90019894 8.67759323 -0.52831918 2.18874288]]
更多使用细节可以参考 caicloud/tensorflow-tutorial 中提供的三个样例代码。