如何调用具有 Python 和 TensorFlow 服务模型的特定模型版本?

How do I call out to a specific model version with Python and a TensorFlow serving model?

我有几个机器学习模型 运行 通过 Kubernetes 上的 TensorFlow Serving。我希望能够部署一个特定模型,然后加载多个版本。

这似乎比必须为我们拥有的每个模型的每个版本维护单独的 Kubernetes 部署更容易。

但是如何将我想使用 Python gRPC 接口调用的版本或模型风格传递给 TF Serving 并不明显。如何指定版本并传入?

无论出于何种原因,在构建拉取请求时都无法就地更新模型规范。相反,您需要单独构建一个包含所需版本的 ModelSpec 实例,然后将其传递给预测请求的构造函数。

另外值得指出的是,您需要使用 Google-specific Int64Value 作为版本。

from google.protobuf.wrappers_pb2 import Int64Value
from tensorflow_serving.apis.model_pb2 import ModelSpec
from tensorflow_serving.apis import predict_pb2, get_model_metadata_pb2, \
                                    prediction_service_pb2_grpc
from tensorflow import make_tensor_proto
import grpc

model_name = 'mymodel'
input_name = 'model_input'
model_uri = 'mymodel.svc.cluster.local:8500'

X = # something that works

channel = grpc.insecure_channel(model_uri, options=MESSAGE_OPTIONS)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)

version = Int64Value(value=1)
model_spec = ModelSpec(version=version, name=model_name, signature_name='serving_default')

request = predict_pb2.PredictRequest(model_spec=model_spec)
request.inputs[input_name].CopyFrom(make_tensor_proto(X.astype(np.float32), shape=X.shape))
result = stub.Predict(request, 1.0)
channel.close()