python - 如何使用 Python 和 TensorFlow 服务模型调用特定模型版本?
问题描述
我有一些机器学习模型通过 Kubernetes 上的 TensorFlow Serving 运行。我希望能够对特定模型进行一次部署,然后加载多个版本。
这似乎比为我们拥有的每个模型的每个版本都维护一个单独的 Kubernetes 部署更容易。
但是,如何将我想使用 Python gRPC 接口调用的版本或模型风格传递给 TF 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()
推荐阅读
- sql - 选择多个列,按一列分组,涉及 clob
- android - 当chrome有标签时,Android chrome不会访问apk下载网址
- php - 用 Xpath 抓取网页,抓取 img
- python-3.x - 代码计算不正确,我无法找到我犯错的地方
- javascript - 有没有一种方法可以在 JavaScript 中以不同方式突出显示全局变量和局部变量的语法突出显示?
- android - 如何在Android中响应BottomSheetDialogFragment的外部触摸事件
- android - 无法更改活动的名称
- javascript - ngSwitch 是“属性指令”还是“结构指令”?
- javascript - 实施记录最近 5 分钟点击的点击计数器的问题
- jquery - jquery.signalr 无法识别 jquery