TF-Serving:如何发送模型版本以及响应

时间:2018-12-02 20:40:11

标签: tensorflow tensorflow-serving

序言。我正在解决经典的分类任务,用户向我发送图像,对图像进行分类,然后将其发回给班级名称,另外将结果保存在数据库中。为了使一切高效,我在返回类ID的机器上运行了一个tensorflow-serving,至于{class: name}映射,它在Web服务器端进行维护。

现在问题如何将这些{class: name}映射与TF模型保持同步?假设我有两类分类任务:{0: "tree", 1: "car"}。在我的模型的第二个版本中,我交换了这两个类,即映射很好地变成了{0: "car", 1: "tree"},为什么不呢?如果我在Web服务器端拥有静态映射,则将所有树分类为汽车,反之亦然。

问题。解决此同步问题的正确方法是什么?

在开始回答之前,让我先回答一些非常合理的问题:

  1. Q :为什么我们不能将此映射移至张量流服务端?
    A :假设,我们弄乱了tf方面的命名。然后一段时间,我们将向数据库写入错误的名称。当我们发现这一点时,我们将需要进入数据库并重命名所有内容。在Web服务器端进行映射使这根本不是问题。我们将更改此映射,仅此而已,因为我们仅在数据库中存储了类ID。
  2. Q :如果更改了模型并且所有类都进行了改组怎么办?
    A :当然,我们需要对所有模型进行版本控制并为每个模型存储映射。

如果采用建议的方法,则发送模型版本以及响应就足够了。我可以在tf服务中做到吗?欢迎其他解决此问题的想法和方法。

1 个答案:

答案 0 :(得分:0)

我想您已经有了某种包装TensorFlow Server的服务,并且该服务向用户公开,您可以在其中实现一些额外的逻辑。

TF Serving提供了metadata API(通过REST或RPC),使您可以请求当前托管的模型的SignatureDef。我不确定这是否满足您的需要,因为在您描述的场景中SignatureDef可能保持不变。但是,method_name似乎允许一些customization

  // Extensible method_name information enabling third-party users to mark a
  // SignatureDef as supporting a particular method. This enables producers and
  // consumers of SignatureDefs, e.g. a model definition library and a serving
  // library to have a clear hand-off regarding the semantics of a computation.

也许您可以将版本绑定到此method_name中,并在每次启动服务时提出要求。