我目前正在应对以可扩展方式为我的tensorflow模型提供服务的挑战。据我所知,推荐的解决方案是使用标准TensorFlow ModelServer。通用需求可以很好地处理-但我想要更多。我想通过解析“ limit”之类的参数来定义前n个logit +要返回的概率来减少数据传输量。
在研究过程中,我确定了以下解决方案:
1)在模型构建过程中创建一个更高级的SignatureDef。
2)使用上述功能来自定义基本的tensorflow/serving项目。
3)使用标准Tensorflow Modelserver服务模型,并构建后处理服务以重构resp。以预定义的方式过滤结果。
比我更有经验的人可以详细介绍我的问题吗? -代码段或链接会很棒。
谢谢。
答案 0 :(得分:1)
您的解决方案编号3,
”使用标准Tensorflow Modelserver服务模型并构建一个 后处理服务以重组resp。将结果过滤到 预定义的方式。”
应该是最好的。
链接和代码段:如果我们考虑使用TF服务的MNIST示例,则“保存的模型”的链接为https://github.com/tensorflow/serving/blob/87e32bb386f156fe208df633c1a7f489b57464e1/tensorflow_serving/example/mnist_saved_model.py,
如果需要前n个预测的值,可以在客户端文件中调整函数代码_create_rpc_callback
,如下所示。
def _create_rpc_callback(label, result_counter):
"""Creates RPC callback function.
Args:
label: The correct label for the predicted example.
result_counter: Counter for the prediction result.
Returns:
The callback function.
"""
def _callback(result_future):
"""Callback function.
Calculates the statistics for the prediction result.
Args:
result_future: Result future of the RPC.
"""
exception = result_future.exception()
if exception:
result_counter.inc_error()
print(exception)
else:
sys.stdout.write('.')
sys.stdout.flush()
response = numpy.array(result_future.result().outputs['scores'].float_val)
print('Top 4 responses = ', response[0:4])
最后一行的print
语句将显示前4个预测。