首页 > 解决方案 > 如何使用 Python 和 TensorFlow 服务模型调用特定模型版本?

问题描述

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

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

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

标签: pythontensorflowtensorflow-serving

解决方案


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

还值得指出的是,您需要使用特定Int64Value于 Google 的版本。

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()

推荐阅读